方策勾配法:REINFORCE
方策勾配定理、REINFORCEアルゴリズム、ベースラインの減算、分散削減について学習します。
「方策勾配法:REINFORCE」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
価値ベースRLと方策ベースRL
一部のRL手法は行動の価値を学習し、その後で最も良い行動を貪欲に選びます。一方、方策勾配法は方策を直接学習します。方策とは、行動の確率を出力する関数です。この方法では、連続行動や確率的方策を自然に扱えます。
方策 pi(a|s)
パラメータ化された方策pi(a|s, theta)は、状態を行動に対する確率分布へ写像します。パラメータtheta(ニューラルネットワーク)を調整することで、より大きな報酬を得られる行動を選びやすくします。
class Policy(nn.Module):
def __init__(self, obs_dim, n_actions):
super().__init__()
self.net = nn.Sequential(
nn.Linear(obs_dim, 128), nn.ReLU(),
nn.Linear(128, n_actions)
)
def forward(self, s):
return torch.softmax(self.net(s), dim=-1)行動のサンプリング
方策は分布なので、最大の行動を選ぶのではなく、行動をサンプリングします。サンプリングによって探索が可能になり、方策は確率的になります。
probs = policy(state)
dist = torch.distributions.Categorical(probs)
action = dist.sample()
log_prob = dist.log_prob(action)軌跡のロールアウト
エピソード(軌跡)とは、開始から終了までの状態、行動、報酬の系列です。環境が終了するまで行動することで、完全な軌跡を収集します。
states, actions, rewards, log_probs = [], [], [], []
state, _ = env.reset()
done = False
while not done:
probs = policy(torch.tensor(state).float())
dist = torch.distributions.Categorical(probs)
a = dist.sample()
state, r, term, trunc, _ = env.step(a.item())
rewards.append(r); log_probs.append(dist.log_prob(a))
done = term or trunc割引リターン G_t
リターンG_tは時刻t以降の将来報酬の合計で、近い将来の報酬ほど大きく評価されるようgammaで割り引かれます。時刻t以降に取った行動がどれだけ良かったかを表します。
def returns(rewards, gamma=0.99):
G, out = 0, []
for r in reversed(rewards):
G = r + gamma * G
out.insert(0, G)
return torch.tensor(out)REINFORCEの目的関数
REINFORCEは、期待リターンに対して勾配上昇を行います。直感的には、高いリターンにつながった行動の確率を上げ、低いリターンにつながった行動の確率を下げます。各行動は、その行動に対応するG_tによって重み付けされます。
方策勾配
損失は-sum(log_prob * G_t)です。負号によって勾配上昇を勾配降下に変換し、オプティマイザーがリターンを最大化できるようにします。高いリターンを得た行動では、その対数確率が押し上げられます。
G = returns(rewards)
loss = -torch.sum(torch.stack(log_probs) * G)方策の更新
通常どおり逆伝播を行い、ステップを実行します。1回の更新では軌跡全体を使用し、その後で軌跡を破棄します(REINFORCEはオンポリシーであり、現在の方策から得たデータだけを使用します)。
optimizer.zero_grad()
loss.backward()
optimizer.step()高分散問題
通常のREINFORCEは非常に不安定で分散が大きくなります。エピソードごとにリターンが大きく変動するため、勾配の推定値がノイズの多いものになり、学習が遅く不規則になります。
分散削減のためのベースライン
G_tからベースライン(平均リターンなど)を引くと、勾配にバイアスを生じさせずに分散を削減できます。単に正のリターンを得た行動ではなく、期待を上回った行動に報酬を与えます。
baseline = G.mean()
advantage = G - baseline
loss = -torch.sum(torch.stack(log_probs) * advantage)REINFORCEが重要な理由
REINFORCEは、すべての方策勾配法の基礎です。高分散とサンプル効率の低さという弱点が、次に学ぶアクター・クリティック法やPPO法の動機になっています。
理解度チェック
方策勾配についての理解度を確認しましょう。
まとめ:REINFORCE
方策pi(a|s,theta)をパラメータ化し、軌跡を実行して、割引リターンG_tを計算し、損失-sum(log_prob * G_t)を使って勾配上昇を行う方法を学びました。また、REINFORCEの高分散問題と、ベースラインによって分散を削減する方法も確認しました。
よくある質問
「方策勾配法:REINFORCE」レッスンは無料ですか?
はい。「方策勾配法:REINFORCE」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「方策勾配法:REINFORCE」で何を学びますか?
方策勾配定理、REINFORCEアルゴリズム、ベースラインの減算、分散削減について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「方策勾配法:REINFORCE」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 方策勾配法:REINFORCE
- アクター・クリティック法(A2C)
- 近接方策最適化(PPO)
- カスタムGymnasium環境