0Pricing
Learn AI with Python · レッスン

近接方策最適化(PPO)

クリップ付き代理目的関数、GAEによるアドバンテージ推定、stable-baselines3を使ったPPOについて学習します。

「近接方策最適化(PPO)」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

なぜPPOなのか

PPOは、現在の強化学習で標準的に使われているアルゴリズムです。安定していてサンプル効率が高く、調整も容易です。方策勾配法における、更新が大きすぎて方策を壊してしまうという根本的な問題を、更新ごとに方策の変更量を制限することで解決します。

大きな更新の危険性

方策を一度に大きく更新しすぎると、性能が崩壊することがあります。強化学習はオンポリシーであるため、そこからの回復は困難です。PPOは各更新を現在の方策に近いものに保ち、安全性を確保します。

確率比

PPOは、新しい行動確率と古い行動確率の比を追跡します。ratio = pi_new(a|s) / pi_old(a|s)。比が1に近い場合は方策がほとんど変化しておらず、1から大きく離れている場合は大きく変化しています。

ratio = torch.exp(new_log_prob - old_log_prob)

クリップ付き目的関数

PPOの特徴はクリップ付き代理目的関数です。比にアドバンテージを掛けますが、比を[1-eps, 1+eps]にクリップします。これにより、方策を過度に変更する動機がなくなります。

clipped = torch.clamp(ratio, 1 - eps, 1 + eps)
objective = torch.min(ratio * adv, clipped * adv)
loss = -objective.mean()

クリップ閾値epsilon

eps(通常は0.2)はクリップ閾値です。比が1からどれだけ離れてよいかを制限するため、アドバンテージが大きい場合でも、方策の更新量は制限されて安定します。

eps = 0.2  # allow at most +/-20% change in probability

min()とクリッピングが機能する理由

クリップされた目的関数とクリップされていない目的関数のminを取ることで、上限が悲観的になります。クリップ範囲を超えた改善には追加の報酬が与えられないため、オプティマイザーが更新を行き過ぎさせる理由がなくなります。

一般化アドバンテージ推定

PPOはGAEを使ってアドバンテージを推定します。GAEは、gammaとlambdaのパラメーターを使って複数ステップのリターンを組み合わせます。バイアスと分散のバランスを取り、滑らかで信頼性の高いアドバンテージ推定値を得ます。

def gae(rewards, values, gamma=0.99, lam=0.95):
    adv, gae_acc = [], 0
    for t in reversed(range(len(rewards))):
        delta = rewards[t] + gamma * values[t+1] - values[t]
        gae_acc = delta + gamma * lam * gae_acc
        adv.insert(0, gae_acc)
    return adv

バッチごとの複数エポック

REINFORCEとは異なり、PPOは収集したデータの各バッチを複数の最適化エポックで再利用します。クリッピングによってこの処理が安全になるため、サンプル効率が大幅に向上します。

for _ in range(n_epochs):
    # recompute ratio and clipped loss on the same batch
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

Stable-Baselines3でのPPO

実際には、PPOを手作業で実装することはほとんどありません。Stable-Baselines3が検証済みの実装を提供しています。方策の種類、環境、詳細度を指定して作成し、その後learnを呼び出します。

from stable_baselines3 import PPO

model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=100_000)

学習済みエージェントの使用

学習後は、predictを使って新しい観測に対する行動を取得します。評価時にdeterministic=Trueを設定すると、サンプリングする代わりに最も確率の高い行動を選択できます。

obs, _ = env.reset()
action, _ = model.predict(obs, deterministic=True)
model.save("ppo_agent")

PPOが広く使われる理由

PPOは、安定したクリップ付き更新、GAEによるアドバンテージ推定、データの再利用を組み合わせた、堅牢で汎用的なアルゴリズムです。最小限の調整で多くのタスクに対応できるため、ロボティクスからRLHFまで幅広く利用されています。

理解度チェック

PPOについての理解度を確認しましょう。

まとめ:PPO

確率の比とクリップ閾値epsを使って更新を制限するPPOのクリップ付き代理目的関数、アドバンテージ推定のためのGAE、そして複数エポックにわたるデータの再利用について学びました。Stable-Baselines3では、PPO("MlpPolicy", env, verbose=1)を使って簡単に実行できます。

よくある質問

「近接方策最適化(PPO)」レッスンは無料ですか?

はい。「近接方策最適化(PPO)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「近接方策最適化(PPO)」で何を学びますか?

クリップ付き代理目的関数、GAEによるアドバンテージ推定、stable-baselines3を使ったPPOについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「近接方策最適化(PPO)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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