強化学習のヒントとコツ
以下の記事を参考に書いてます。
・Reinforcement Learning Tips and Tricks
1. 要約
このセクションの目的は、「強化学習」の実験を支援することです。強化学習に関する一般的なアドバイス(開始する場所、選択するアルゴリズム、アルゴリズムの評価方法など)、およびカスタム環境を使用する場合や強化学習アルゴリズムを実装する場合のヒントを紹介します。
2. 強化学習を使用する際の一般的なアドバイス
(1) 強化学習および「Stable Baselines」について記事を読む
(2) 必要に応じて、定量的な実験とハイパーパラメータの調整を行う
(3) 個別のテスト環境を使用してパフォーマンスを評価する
(4) パフォーマンスを向上させるには、訓練予算を増やす
強化学習を使用したい場合は、次の記事を読んで、強化学習について理解する必要があります。
・ OpenAI Spinning Up
・ David Silver’s course
・ Lilian Weng’s blog
・ Berkeley’s Deep RL Bootcamp
・ Berkeley’s Deep Reinforcement Learning course
・ More resources
また、「Stable Baselines」のドキュメントを読み、チュートリアルを実行することをお勧めします。基本的な使用法について説明し、ライブラリのより高度な概念(コールバックやラッパーなど)を紹介します。
強化学習は、他の機械学習方法といくつかの点で異なります。エージェントの訓練に使用されるデータは、エージェント自体による環境との対話を通じて収集されます。この依存は悪循環につながる可能性があります。エージェントが低品質のデータ(報酬のない経験など)を収集した場合、それは改善されず、悪い経験を蓄積し続けます。
この要因は、主に強化学習の結果が実行ごとに異なる場合があることが原因になります。このため、定量的な結果を得るには、常に複数の実行を行う必要があります。
強化学習での良好な結果は、通常、適切なハイパーパラメータを見つけることに依存しています。最近のアルゴリズム(PPO、SAC、TD3)では通常、ハイパーパラメータの調整はほとんど必要ありませんが、デフォルトのパラメータがどの環境でも機能するとは考えていません。
したがって、調整されたハイパーパラメータについては、「RL Zoo」を参照することを強くお勧めします。
強化学習を新しい問題に適用する際のベストプラクティスは、自動ハイパーパラメータ最適化を行うことです。これも「RL Zoo」に含まれています。
カスタム環境に強化学習を適用するときは、常にエージェントへの入力を「正規化」し(PPO2 / A2CにVecNormalizeを使用)、他の環境(Atari、フレームスタックなど)で行われる一般的な前処理を確認する必要があります。カスタム環境に関する詳細なアドバイスについては、以下のカスタム環境の段落を作成する際のヒントとコツを参照してください。
3. 強化学習の現在の制限
強化学習の現在の「制限」に注意する必要があります。
「モデルフリーな強化学習アルゴリズム」(つまり、Stable Baselinesに実装されているすべてのアルゴリズム)は、通常、サンプル効率が悪いです。何か有用なことを学ぶために多くのサンプル(時には何百万もの相互作用)を必要とします。これが、強化学習での成功のほとんどがゲームまたはシミュレーションのみでしか達成されていない理由です。たとえば、ETHチューリッヒによるこの作業では、ANYmalロボットはシミュレーションのみで訓練され、その後実世界でテストされました。
一般的なアドバイスとして、より良いパフォーマンスを得るには、エージェントの予算(訓練のステップ数)を増やす必要があります。
望ましい行動を達成するためには、十分な報酬機能を設計するための専門知識が必要になることがよくあります。この報酬エンジニアリングは、いくつかの反復を必要とします。報酬形成の良い例として、「模倣学習」と「強化学習」を組み合わせてアクロバティックな動きを行うDeep Mimicの論文をご参照してください。
強化学習の最後の制限の1つは、訓練の不安定さです。つまり、訓練中にパフォーマンスが大幅に低下することがあります。この動作は特に「DDPG」に存在します。そのため、拡張「TD3」がその問題に対処しようとします。「TRPO」や「PPO」などの他の方法では、信頼領域を使用して、更新が大きくなりすぎないようにして問題を最小限に抑えます。
4. 強化学習アルゴリズムを評価する方法
ほとんどの強化学習アルゴリズムは訓練中に探査ノイズを使用するため、特定の時点でエージェントのパフォーマンスを評価するための個別のテスト環境が必要です。n回のテストエピソード(nは通常5〜20)についてエージェントを定期的に評価し、エピソードごとの報酬を平均して適切な推定値を得ることが推奨されます。
一部のポリシーはデフォルトで確率的であるため(A2CやPPOなど)、predict()を呼び出す時に「deterministic = True」を設定することも必要です。これにより、パフォーマンスが向上することがよくあります。訓練カーブ(タイムステップのエピソード報酬関数)を確認することは良い代用ですが、エージェントの真のパフォーマンスを過小評価します。
強化学習評価に関する適切な議論については、「Deep Reinforcement Learning」を読むことをお勧めします。
このブログ投稿 とCédricColasによるこの問題もご覧ください。
5. どの強化学習アルゴリズムを使用すればよいか
強化学習には特効薬はありません。ニーズと問題に応じて、強化学習アルゴリズムを選択します。
1つ目の選択ポイントは、行動空間が、「離散行動」(左、右など)と「連続行動」(例:特定の速度に移動)のどちらであるかに由来します。いくつかの強化学習アルゴリズムは、行動空間が1つまたは他のドメインに合わせて調整されています。「DQN」は離散行動のみ、「SAC」は連続高度のみに制限されます。
2つ目の選択ポイントは、訓練を「並列化」できるかどうかと、それを行う方法(MPIの有無にかかわらず)です。実世界での訓練時間が重要な場合は、「A2C」とその派生物(PPO、ACER、ACKTRなど)に傾く必要があります。「ベクトル化環境」を見て、複数のワーカーによる訓練の詳細をご覧ください。
◎ 離散行動
「Discrete」「MultiDiscrete」「Binary」「MultiBinary」をカバーします。
・ シングルプロセス
拡張機能を備えた「DQN」(「double DQN」「prioritized replay」など)および「ACER」が推奨されるアルゴリズムです。「DQN」は通常訓練時間がかかりますが、(「Replay Buffer」のため)最も効率的なサンプルです。
・ マルチプロセス
「PPO2」「A2C」およびその後続バージョン(ACKTR、ACER)を試してください。「MPI」を使用して訓練をマルチプロセスできる場合は、「PPO1」「TRPO」をチェックアウトする必要があります。
◎ 連続行動
・ シングルプロセス
現在の最新技術(SOTA)アルゴリズムは「SAC」および「TD3」です。最良の結果を得るには、「RL Zoo」のハイパーパラメータを使用してください。
・ マルチプロセス
「PPO2」「TRPO」「A2C」をご覧ください。繰り返しますが、 連続行動問題のために「RL Zoo」からハイパーパラメータを取得することを忘れないでください(Bullet envsを参照)。
「正規化」はこれらのアルゴリズムにとって重要です。「MPI」を使用できる場合は、「PPO1」「TRPO」「DDPG」のいずれかを選択できます。
6. 目標環境
環境が「GoalEnvインターフェース」(「HER」を参照)に従う場合、行動空間に応じて「HER +(SAC / TD3 / DDPG / DQN)」を使用する必要があります。ワーカー数は、「HER」を使用した実験の重要なハイパーパラメータです。現在、「HER + DDPG」のみが「MPI」を使用したマルチプロセスをサポートしています。
7. カスタム環境を作成する際のヒントとコツ
カスタム環境の作成方法について学びたい場合は、このページを読むことをお勧めします。また、カスタム環境を作成する具体的な例のためのColabノートブックも提供しています。
◎ 基本的なアドバイス
・ 可能な場合、つまり境界がわかっている場合は、常に観測空間を正規化する
・ 行動空間を正規化し、連続する場合に対称にする(以下の潜在的な問題を参照)。良い習慣は、行動を[-1、1]に収まるようにスケール変更すること。
・ 有益な報酬と問題の単純化されたバージョンから始める。
・ ランダム行動を使用してデバッグし、環境が機能し、Gymインターフェースに従うことを確認する。
以下は、環境がエラーなしで実行されることを確認するためのコードです。
env = YourEnv()
obs = env.reset()
n_steps = 10
for _ in range(n_steps):
# ランダム行動
action = env.action_space.sample()
obs, reward, done, info = env.step(action)
◎ 行動空間を正規化する必要があるのはなぜか
ほとんどの強化学習アルゴリズムは、連続行動のために「ガウス分布」(最初は0を中心とし、標準は1)に依存しています。そのため、カスタム環境を使用しているときに行動空間を「正規化」することを忘れると、学習に悪影響を及ぼし、デバッグが困難になる可能性があります(issue #473 )。
ガウスを使用する別の結果は、行動の範囲が制限されないことです。そのため、クリッピングは通常、有効な間隔を保つための包帯として使用されます。より良い解決策は、squashing関数(SACを参照)またはBeta版(issue#112)を使用することです。
「DDPG」「TD3」は確率分布に依存しないため、このステートメントは当てはまりません。
8. 強化学習アルゴリズムを実装する際のヒントとコツ
強化学習アルゴリズムを実装して論文を再現しようとするには、John Schulmanによる「強化学習研究の要点」が非常に役立ちます(ビデオ)。
強化学習アルゴリズムを機能させるには、次の手順に従うことをお勧めします。
(1) 元の論文を数回読む
(2) 既存の実装を読み取る(利用可能な場合)
(3) Toy問題に対して「sign of life」を持つようにする
(4) より困難な環境で実行することで実装を検証(結果をRL Zooと比較)
通常、そのステップのハイパーパラメータ最適化を実行する必要があります。
連続行動な強化学習の動作確認におすすめな環境は次のとおりです。徐々に難易度が上がります。
(1) Pendulum
(2) HalfCheetahBullet
(3) BipedalWalkerHardcore
離散行動な強化学習の動作確認におすすめな環境は次のとおりです。徐々に難易度が上がります。
(1) CartPole-v1
(2) LunarLander
(3) Pong
(4) その他のAtariゲーム(Breakoutなど)