見出し画像

PPOのハイパーパラメータとその範囲

以下の記事が面白かったので、ざっくり訳してみました。

PPO Hyperparameters and Ranges

1. PPO

「PPO」(Proximal Policy Optimization)は、主要な強化学習アルゴリズムの1つです。「PPO」は経験豊富な「Dota 2」プレイヤーのグループを打ち負かした「OpenAI Five」を駆動するアルゴリズムであり、「PPO」のバリエーションである「Joint PPO」は、「OpenAI Retro Contest」で優勝しました。「PPO」の普及を支援するのは、「OpenAI Baselines」「RLlib」「Unity ML Agent」のようなオープンソースの実装になります。

「PPO」は、代理損失関数を使用してポリシーの更新を行い、パフォーマンスの壊滅的な低下を回避する「Policy Gradients」です。このアルゴリズムは、ハイパーパラメーターの初期化が寛容で、さまざまなRLタスクでそのまま使用できるという利点があります。ただし、適切なハイパーパラメーターの指定により、結果が改善される可能性があります。

この投稿は、私が集めた少数のサンプルで使用されるハイパーパラメータとそれらの範囲の説明です。「PPO」で使用されるハイパーパラメーターがさらに増えた場合は、お知らせください。経験豊富なPPOユーザーが決定的なガイドを作成するまで、この投稿がある程度役立つことを願っています。

2. ハイパーパラメーター:Epoch、MiniBatch、Horizon

「ポリシー」は、強化学習エージェントが実行できる一連の行動を決定します。「Policy Gradients」ではエージェントは最初のポリシーから開始し、環境と対話して報酬を取得し、その報酬を使用してポリシーを改善します。「Policy Gradients」には、2つのステップがあります。

1番目のステップでは、「経験」(状態、報酬、行動のセット)が収集され、2番目のステップでは、「ポリシー」が改善されます。

ここで考慮すべき2つの問題があります。
「ポリシーを更新する前にエージェントが収集すべき経験量」と、「古いポリシーを新しいポリシーに更新する方法」です。

「Policy Gradients」は経験を収集し、経験を使用してポリシーを更新するため、経験効率が低いという問題が発生します。古い経験は破棄され、新しいポリシーを使用して新しい経験が収集されるためです。「On-Policy」な「Policy Gradients」は、「Off-Policy」な「DQN」(Replauy Bufferで経験を格納および再利用する)よりも経験効率が低くなります。

「収集すべき経験量」に関するハイパーパラメータには、「Epoch」「MiniBatch」「Horizon」があります。「Horizon」はポリシー更新前に収集する経験の数(ステップ数)です。この収集した経験を使って、バッチサイズ「MiniBatch」でエポック数「Epoch」の「確率的勾配降下」(SGD)を実行します。

◎Horizonの範囲
32 〜 5000

◎Horizonの呼び方
・horizon(PPOペーパー/RLlib)
・nsteps(ppo2 baselines)
・timesteps_per_actorbatch(ppo baselines)
・time_horizon(Unity ML)

ポリシー更新前に収集する経験の数(ステップ数)。

考慮すべきもう1つのポイントは、OpenAI Fiveのブログで説明されている、「Horizon」と「Gamma」(時間割引率)のバランスになります。

◎MiniBatchの範囲
4 〜 4096 (分散実装ではさらに高くなる可能性がある)

◎MiniBatchの呼び方
・minibatch size(PPOペーパー)
・timesteps_per_batch(RLlib)
・nminibatches(ppo2 baselines)
・optim_batchsize(ppo baselines)
・batch_size(Unity ML)

勾配降下に使うミニバッチのサイズ。

◎Epochの範囲
3 〜 30

◎Epochの呼び方
・epochs(PPOペーパー)
・num_sgd_iter(RLlib)
・noptepochs(ppo2 baselines)
・optim_epochs(ppo baselines)
・num_epoch(Unity ML)

収集した経験を勾配降下にかける回数。

3. ハイパーパラメーター:Clipping paramater(ε), Discount(γ), GAE paramater(λ), KL Target

「Policy Gradients」に関する2番目の問題に戻りましょう。「古いポリシーを新しいポリシーに更新する方法」です。

ポリシーが大幅に更新されると、ポリシーのパフォーマンスが大幅に低下し、回復しなくなる可能性があります。「PPO」は代理損失関数を使用して、古いポリシーから新しいポリシーへの更新を安全な範囲内に保ちます。

画像1

「PPO」は、実装に応じて2行目、3行目、または2行の組み合わせを使用します。2番目の行の実装では、クリップパラメーターはεです。

◎Clipping paramater(ε)の範囲
0.1, 0.2, 0.3

◎Clipping paramater(ε)の呼び方
・Clipping paramater(ε)(PPOペーパー)
・clip_param(RLlib)
・cliprange(ppo2 baselines)
・clip_param(ppo baselines)
・epsilon(Unity ML)

上図の「KLlib penalty」(3行目)は、RLlibのPPO実装で利用可能です。
パラメーター「kl_coeff」(KL発散の初期係数)とい「kl_target」は、KL実装に使用できます。

旧ポリシーと新ポリシーの比率に対する許容限界。この値を小さくすると、突発的なポリシー破壊を防ぐことができる。

◎KL Targetの範囲
0.003〜0.03

◎KL Initializationの範囲
0.3 〜 1

上図の「大文字のAハットシンボル」は「アドバンテージ関数」です。これは、GAEのペーパーで概説されているように、「Discount(γ)」と「GAE paramater(λ)」で報酬ストリームを変更します。「Discount(γ)」と「GAE paramater(λ)」は、軌道のバイアスと分散のトレードオフを実行し、報酬シェーピングの一形態として見ることもできます。

画像2

◎Discount(γ)の範囲
0.99 (もっとも一般的), 0.8 〜 0.9997

◎Discount(γ)の呼び方
・Discount(γ) (PPOペーパー)
・gamma (RLlib)
・gamma (ppo2 baselines)
・gamma (ppo baselines)
・gamma (Unity ML)

将来の報酬割引率。遠い将来のためにエージェントが行動している時は大きな値、近い将来のためにエージェントが行動している時は小さな値がよい。

◎GAE paramater(λ)の範囲
0.9 〜 1

◎GAE paramater(λ)の呼び方
・GAE paramater(λ)(PPOペーパー)
・lambda(RLlib)
・lambda(ppo2 baselines)
・lambda(ppo baselines)
・lambda(Unity ML)

正則化パラメータ。

4. ハイパーパラメーター:価値関数係数とエントロピー係数

上記の代理損失関数に加えて、「PPO」には目的関数に他の2つの損失が含まれています。

画像3

「c1」は「価値関数係数」で、「c2」は「エントロピー係数」です。

◎価値関数係数の範囲
0.5, 1

◎価値関数係数の呼び方
・VF coeff (PPOペーパー)
・vf_loss_coef (RLlib)
・vf_coef (ppo2 baselines)

「エントロピー係数」は正則化です。ポリシーは、すべてのポリシーが等しく発生する可能性が高い場合に最大エントロピーを持ち、ポリシーの1つの行動の確率が支配的な場合に最小になります。「エントロピー係数」に最大可能エントロピーが乗算され、損失に追加されます。これにより、1つの行動の確率が時期尚早に収束してポリシーを支配し、探索を防ぐことができます。

◎エントロピー係数の範囲
0〜0.01

◎エントロピー係数の呼び方
・Entropy coeff (PPOペーパー)
・entropy_coeff (RLlib)
・ent_coeff (ppo2 baselines)
・entcoeff (ppo baselines)
・beta (Unity ML)

エントロピーの正則化の強さ。値を大きくすると、行動の決定がよりランダムになる。行動空間がDiscreteの場合、エントロピーの減少が早すぎる時は「エントロピー係数」を増やし、エントロピーの減少が遅すぎる時は減らすとよい。

6. その他のハイパーパラメーター:終了条件と学習率

最後のセクションでは、多くの深層学習で利用される、より一般的なハイパーパラメーターをいくつか取り上げます。明らかなのは、実験を実行する「期間」です。これは、設定された数の「タイムステップ」、または何らかの「終了条件」が満たされるまでになります。

もう1つは、オプティマイザーの「学習率」です。PPOはAdamオプティマイザーを使用します。一部の実装には、Adam epsilonのハイパーパラメーターもあります。

◎学習率の範囲
0.003〜5e-6

◎学習率の呼び方
・Adam stepsize (PPOペーパー)
・sgd_stepsize (RLlib)
・lr (ppo2 baselines)
・learning_rate (Unity ML)

勾配降下の初期の学習率。報酬が継続的に増加しないような場合は値を小さくするとよい。


この記事が気に入ったらサポートをしてみませんか?