スペースインベーダーとの深層Q学習
'Deep Q-Learning with Space Invaders'
ハギングフェイスとのディープ強化学習クラスのユニット3
⚠️ この記事の新しい更新版はこちらから利用できます 👉 https://huggingface.co/deep-rl-course/unit1/introduction
この記事はディープ強化学習クラスの一部です。初心者からエキスパートまでの無料コースです。シラバスはこちらをご覧ください。
⚠️ この記事の新しい更新版はこちらから利用できます 👉 https://huggingface.co/deep-rl-course/unit1/introduction
- 機械学習インサイトディレクター【パート3:ファイナンスエディション】
- IntelとHugging Faceがパートナーシップを結び、機械学習ハードウェアアクセラレーションを民主化する
- 世界最大のオープンマルチリンガル言語モデル「BLOOM」をご紹介します
この記事はディープ強化学習クラスの一部です。初心者からエキスパートまでの無料コースです。シラバスはこちらをご覧ください。
前のユニットでは、最初の強化学習アルゴリズムであるQ-Learningを学び、それをゼロから実装し、FrozenLake-v1 ☃️とTaxi-v3 🚕の2つの環境でトレーニングしました。
このシンプルなアルゴリズムで優れた結果を得ました。ただし、これらの環境は比較的単純であり、状態空間が離散的で小さかったため(FrozenLake-v1では14の異なる状態、Taxi-v3では500の状態)。
しかし、大きな状態空間の環境では、Qテーブルの作成と更新が効率的でなくなる可能性があることを後で見ていきます。
今日は、最初のディープ強化学習エージェントであるDeep Q-Learningを学びます。Qテーブルの代わりに、Deep Q-Learningは、状態を受け取り、その状態に基づいて各アクションのQ値を近似するニューラルネットワークを使用します。
そして、RL-Zooを使用して、Space Invadersやその他のAtari環境をプレイするためにトレーニングします。RL-Zooは、トレーニング、エージェントの評価、ハイパーパラメータの調整、結果のプロット、ビデオの記録など、RLのためのトレーニングフレームワークであるStable-Baselinesを使用しています。
では、始めましょう! 🚀
このユニットを理解するためには、まずQ-Learningを理解する必要があります。
- Q-LearningからDeep Q-Learningへ
- Deep Qネットワーク
- 入力の前処理と時間制約
- Deep Q-Learningアルゴリズム
- 経験再生により経験をより効率的に使用する
- 固定Q-ターゲットによりトレーニングを安定化させる
- Double DQN
Q-LearningからDeep Q-Learningへ
Q-Learningは、Q関数、つまり特定の状態における特定のアクションの価値を決定する行動価値関数をトレーニングするために使用するアルゴリズムであることを学びました。
Qは、その状態でのそのアクションの品質に由来します。
内部的には、Q関数にはQテーブルがあり、各セルが状態-アクションのペアの値に対応しているテーブルがあります。このQテーブルを、Q関数のメモリやチートシートと考えてください。
問題は、Q-Learningがタブローメソッドであることです。つまり、状態とアクションの空間が配列やテーブルとして表現できる程度に小さい問題です。しかし、これは拡張性に欠ける性質です。
Q-Learningは、以下のような小さな状態空間の環境でうまく機能していました:
- FrozenLakeでは14の状態がありました。
- Taxi-v3では500の状態がありました。
しかし、今日やることを考えてみてください:フレームを入力として使用してエージェントにSpace Invadersのプレイ方法を学習させる予定です。
Nikita Melkozerovさんが言及したように、Atari環境の観測空間は形状が(210、160、3)で、値は0から255の範囲内であり、したがって256^(210x160x3) = 256^100800(比較のために、観測可能な宇宙にはおよそ10^80の原子が存在します)。
そのため、状態空間は膨大です。したがって、その環境のためにQテーブルを作成して更新することは効率的ではありません。この場合、Qテーブルではなく、パラメータ化されたQ関数Q θ ( s , a ) Q_{\theta}(s,a) Q θ ( s , a ) を使用してQ値を近似するのが最善のアイデアです。
このニューラルネットワークは、与えられた状態に対して、その状態で可能な各アクションの異なるQ値を近似します。そして、それがまさにDeep Q-Learningが行うことです。
Deep Q-Learningを理解したので、Deep Q-Networkについてもっと詳しく見ていきましょう。
Deep Q-Network (DQN)
これが私たちのDeep Q-Learningネットワークのアーキテクチャです:
入力として、ネットワークを通過した4つのフレームのスタックを状態として受け取り、その状態で可能な各アクションのQ値のベクトルを出力します。そして、Q-Learningと同様に、イプシロングリーディポリシーを使用して実行するアクションを選択するだけです。
ニューラルネットワークが初期化されると、Q値の推定は非常に悪いです。しかし、トレーニング中に、Deep Q-Networkエージェントは状況と適切なアクションを関連付け、ゲームをうまくプレイすることを学びます。
入力の前処理と時間制約
入力の前処理について説明しました。トレーニングに必要な計算時間を減らすために、状態の複雑さを削減したいので、これは重要なステップです。
したがって、状態空間を84×84に縮小してグレースケールにします(Atariの環境では色は重要な情報を追加しません)。これは、RGBの3つのカラーチャンネルを1つに減らすための重要な節約です。
また、重要な情報が含まれていない場合は、画面の一部をクロップすることもできます。そして、4つのフレームをスタックします。
なぜ4つのフレームをスタックするのですか?フレームをスタックする理由は、時間制約の問題を処理するのに役立ちます。例えば、ポンのゲームを見るとき、このフレームではボールの行先を予測することはできません。なぜなら、モーションの感覚を得るには1つのフレームでは十分ではないからです。しかし、3つのフレームを追加すると、ボールが右に移動していることがわかります。
そのため、時間的な情報を捉えるために、4つのフレームをスタックします。
次に、スタックされたフレームは3つの畳み込み層で処理されます。これらの層によって、画像の空間的な関係を捉えて利用することができます。また、フレームが一緒にスタックされているため、それらのフレーム間のいくつかの空間的な特性を利用することもできます。
最後に、各可能なアクションのQ値を出力するためのいくつかの完全接続層があります。
したがって、Deep Q-Learningは、状態ごとに、その状態で可能な各アクションの異なるQ値を近似するためにニューラルネットワークを使用しています。次に、Deep Q-Learningアルゴリズムを学習します。
Deep Q-Learningアルゴリズム
Deep Q-Learningは、状態ごとに異なるアクションのQ値を近似するために、ディープニューラルネットワークを使用します(価値関数の推定)。
違いは、トレーニングフェーズでは、Q値の更新を直接行うのではなく、Q値の予測とQターゲットの間の損失関数を作成し、勾配降下法を使用してDeep Q-Networkの重みを更新してQ値をより正確に近似することです。
Deep Q-Learningのトレーニングアルゴリズムには2つのフェーズがあります:
- サンプリング:アクションを実行し、観測されたエクスペリエンスのタプルをリプレイメモリに保存します。
- トレーニング:ランダムにタプルの小さなバッチを選択し、勾配降下法の更新ステップを使って学習します。
しかし、これはQ-Learningと比較して唯一の変更ではありません。Deep Q-Learningのトレーニングは不安定になる可能性があります。これは、非線形なQ値関数(ニューラルネットワーク)とブートストラップ(既存の推定値を使用してターゲットを更新し、実際の完全なリターンではない)を組み合わせるためです。
トレーニングの安定化を支援するために、3つの異なる解決策を実装しています:
- エクスペリエンスリプレイ:より効率的なエクスペリエンスの利用のため。
- 固定Qターゲット:トレーニングの安定化のため。
- ダブルディープQ-Learning:Q値の過大評価の問題を扱うため。
エクスペリエンスリプレイによるより効率的なエクスペリエンスの利用
なぜリプレイメモリを作成するのでしょうか?
エクスペリエンスリプレイはDeep Q-Learningで2つの機能を持っています:
- トレーニング中にエクスペリエンスをより効率的に利用するため。
- エクスペリエンスリプレイは、通常、オンライン強化学習では環境とやり取りし、エクスペリエンス(状態、アクション、報酬、次の状態)を取得し、それらから学習(ニューラルネットワークの更新)を行い、それらを破棄します。
- しかし、エクスペリエンスリプレイでは、エクスペリエンスのサンプルを保存するリプレイバッファを作成し、トレーニング中に再利用することができます。
⇒ これにより、個々のエクスペリエンスから複数回学習することができます。
- 以前のエクスペリエンスを忘れないようにし、エクスペリエンス間の相関を減らす。
- ニューラルネットワークに順次エクスペリエンスのサンプルを与えると、新しいエクスペリエンスで上書きされるため、以前のエクスペリエンスを忘れる傾向があります。たとえば、最初のレベルと次のレベルが異なる場合、エージェントは最初のレベルでの振る舞いやプレイ方法を忘れる可能性があります。
解決策は、環境とやり取りしながらエクスペリエンスのタプルを保存するリプレイバッファを作成し、その後、タプルの小さなバッチをサンプリングすることです。これにより、ネットワークがただ即座に行ったことについて学習するだけではなくなります。
エクスペリエンスリプレイには他の利点もあります。経験をランダムにサンプリングすることで、観測のシーケンスの相関を取り除き、アクションの値が振動したり、破局的に発散するのを防ぎます。
Deep Q-Learningの疑似コードでは、キャパシティN(定義できるハイパーパラメータ)からリプレイメモリバッファDを初期化し、その後、メモリにエクスペリエンスを保存し、トレーニングフェーズでDeep Q-Networkにフィードするためにエクスペリエンスのミニバッチをサンプリングしています。
トレーニングの安定化のための固定Qターゲット
TDエラー(または損失)を計算する場合、TDターゲット(Qターゲット)と現在のQ値(Qの推定値)の差を計算します。
しかし、実際のTDターゲットの情報が分からないため、推定する必要があります。ベルマン方程式を使用すると、TDターゲットはその状態でそのアクションを取った場合の報酬に、次の状態での最大の割引Q値を加えたものです。
しかし、問題は、TDターゲットとパラメータ(重み)の推定に同じパラメータ(重み)を使用していることです。そのため、TDターゲットと変更しているパラメータとの間には相関があります。
したがって、トレーニングの各ステップで、「私たちのQ値はシフトするだけでなく、ターゲット値もシフトします。」つまり、私たちはターゲットに近づいていますが、ターゲットも移動しているということです。それは動くターゲットを追いかけているようなものです! これにより、トレーニング中に大きな振動が生じました。
あたかもあなたがカウボーイ(Qの推定値)であり、牛(Qターゲット)を捕まえたい場合、より近づかなければなりません(エラーを減らす必要があります)。
各時間ステップで、同じパラメータを使用しているため、各時間ステップで移動する牛に近づこうとしています。
これにより、追跡の奇妙な経路が生じます(トレーニング中の大きな振動)。
代わりに、疑似コードで行っていることは、以下の通りです:
- TDターゲットを推定するために別のネットワークを使用し、パラメータを固定する
- ターゲットネットワークを更新するために、CステップごとにDeep Q-Networkのパラメータをコピーする
ダブルDQN
ダブルDQN、またはダブルラーニングは、Hado van Hasseltによって導入されました。この方法は、Q値の過大評価の問題を処理します。
この問題を理解するために、TDターゲットをどのように計算するかを思い出してください:
TDターゲットを計算することによって単純な問題に直面しています:次の状態に対して最適なアクションが最も高いQ値を持つアクションであることをどのように確信できるのでしょうか?
Q値の正確さは、私たちが試したアクションと試した隣接する状態に依存することを知っています。
したがって、訓練の初めには、最適なアクションについて十分な情報を持っていません。そのため、最大のQ値(ノイズが含まれている)を最適なアクションとして取ることは、誤検出につながる場合があります。非最適なアクションが最適な最適なアクションよりも定期的に高いQ値を与えられる場合、学習は複雑になります。
解決策は、Q値の選択をアクションの選択からターゲットQ値の生成に切り離すために2つのネットワークを使用することです:
- 次の状態のために取る最適なアクション(最も高いQ値を持つアクション)を選択するためにDQNネットワークを使用する
- そのアクションを次の状態で取る場合のターゲットQ値を計算するためにターゲットネットワークを使用する
したがって、ダブルDQNはQ値の過大評価を減らし、その結果、より速くトレーニングを行い、より安定した学習を行うのに役立ちます。
これらのDeep Q-Learningの3つの改善の他に、Prioritized Experience ReplayやDueling Deep Q-Learningなどが追加されています。これらはこのコースの範囲外ですが、興味がある場合は、リーディングリストに記載されているリンクを確認してください。 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit3/README.md
Deep Q-Learningの理論を学んだので、AtariゲームをプレイするためのDeep Q-Learningエージェントをトレーニングする準備が整いました。Space Invadersから始めますが、好きなAtariゲームを使用できます🔥
私たちは、RL-Baselines-3 Zooの統合、Double-DQN、Dueling-DQN、およびPrioritized Experience Replayなどの拡張機能を持たないバニラ版のDeep Q-Learningを使用しています。
ここからチュートリアルを開始します👉 https://colab.research.google.com/github/huggingface/deep-rl-class/blob/main/unit3/unit3.ipynb
クラスメートとの結果を比較するリーダーボード 🏆 👉 https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard
この章の終了おめでとうございます!情報がたくさんありました。そして、チュートリアルの終了おめでとうございます。あなたは初めてのDeep Q-Learningエージェントをトレーニングし、それをHubで共有しました🥳。
これらの要素についてまだ混乱しているのは普通です。私自身やRLを学んだすべての人々にとっても同じでした。
次に進む前に、材料を本当に理解するために時間をかけてください。
Pong、Seaquest、QBert、Ms Pac Manなどの他の環境でエージェントをトレーニングすることを躊躇しないでください。学ぶ最良の方法は自分で試してみることです!
もしもっと深く掘り下げたい場合、シラバスに追加の参考文献を掲載しました👉https://github.com/huggingface/deep-rl-class/blob/main/unit3/README.md
次のユニットでは、ポリシーグラジェントの手法について学びます。
学びたい友人と共有するのを忘れないでください🤗!
最後に、フィードバックをもとにコースを改善し、更新していきたいと思っています。もしご意見がありましたら、このフォームに記入してください👉https://forms.gle/3HgA7bEHwAmmLfwh9
学び続けて、素晴らしい人生を送ってください!
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles