0Pricing
Learn AI with Python · レッスン

方策勾配法: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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 方策勾配法:REINFORCE
  2. アクター・クリティック法(A2C)
  3. 近接方策最適化(PPO)
  4. カスタムGymnasium環境
← Learn AI with Pythonに戻る