これが、スーパーマリオブラザーズをプレイするエージェントをトレーニングするための私のPythonソースコードです。非同期アドバンテージを使用することにより、深い強化学習論文のために紙の非同期方法で導入されたActor-Critic(A3C)アルゴリズムを使用します。



















サンプル結果
このプロジェクトを実装する前に、Tensorflow、Keras、Pytorchなどのさまざまな一般的な深い学習フレームワークで、論文の結果を非常によく再現するいくつかのリポジトリがあります。私の意見では、それらのほとんどは素晴らしいです。ただし、画像の前処理、環境のセットアップ、重量の初期化など、多くの部分で過度に複雑になっているようで、より重要な問題からユーザーの注意をそらします。したがって、私は重要でない部分を簡素化するクリーナーコードを書くことにしましたが、それでも紙を厳密に続けます。ご覧のとおり、アルゴリズムを正しく実装する限り、最小限のセットアップとSimple Networkの初期化を使用して、エージェントは環境と対話する方法を教え、徐々に最終目標に到達する方法を見つけます。
一般的に学習を補強すること、特にA3Cに既に馴染みがある場合は、この部分をスキップできます。 A3Cアルゴリズムとは何か、どのように、なぜそれが機能するか、A3Cや私の実装に興味があるか興味がある人に説明しているが、背後にあるメカニズムを理解していない人々に説明するために、この部分を書きます。したがって、この部分を読むために前提条件の知識は必要ありません
インターネットで検索すると、A3Cを導入または説明する記事が多数あり、サンプルコードを提供するものもあります。しかし、私は別のアプローチを取りたいと思います。非同期の俳優批判エージェントという名前を小さな部分に分解し、集約された方法で説明します。
エージェントには俳優と批評家と呼ばれる2つの部分があり、その目標は、環境を探索して悪用することで、時間の経過とともに両方のパートをより良くすることです。彼の父親(批評家)が彼を監督し、彼が危険なことをしないことを確認するために、彼の周りの驚くべき世界を発見している小さないたずらな子供(俳優)が想像してみましょう。子供が何か良いことをするたびに、彼の父親は賞賛し、将来その行動を繰り返すように勧めます。そしてもちろん、子供が有害なことをするとき、彼は父親から警告を受けます。子供が世界にやり取りし、さまざまな行動をとるほど、ポジティブとネガティブの両方のフィードバックが増えるほど、彼は父親から得られます。子供の目標は、父親からできるだけ多くの肯定的なフィードバックを収集することであり、父親の目標は息子の行動をより良く評価することです。言い換えれば、私たちは子供と彼の父親と同等に俳優と批評家の間に双方にとって有利な関係を持っています。
子供をより速く、より安定させるために、父親は息子に自分の行動がどれほど良いかを伝える代わりに、他の行動(または「仮想」の平均行動)と比較して彼の行動がどれほど良く、または悪化しているかを伝えます。例は千の言葉の価値があります。お父さんと息子の2組を比較しましょう。最初のお父さんは、学校のグレード1で10年生のキャンディーに10個のキャンディーを与えます。一方、2番目のお父さんは、息子に10年生の5つのキャンディーを与え、息子を「罰」し、1日1日、お気に入りのテレビシリーズを1日見てもらいませんでした。どう思いますか?二番目のお父さんは少し賢いようですよね?確かに、あなたがまだ小さな報酬でそれらを「奨励」する場合、あなたは悪い行動を防ぐことはめったにありません。
エージェントが環境だけを発見した場合、学習プロセスは遅くなります。さらに真剣に、エージェントはおそらく、望ましくない特定の準最適なソリューションにバイアスである可能性があります。環境のさまざまな部分を同時に発見し、新しい得られた知識を定期的に互いに更新するエージェントがたくさんある場合はどうなりますか?それはまさに非同期アドバンテージ俳優批判のアイデアです。今、幼稚園の子供と彼の仲間は、美しいビーチに旅行しています(もちろん、教師と一緒に)。彼らの仕事は、素晴らしい砂の城を建てることです。異なる子供は、教師が監督する城のさまざまな部分を建設します。それらのそれぞれには異なるタスクがあり、同じ最終目標は強力で人目を引く城です。確かに、先生の役割は、前の例の父親と同じです。唯一の違いは、前者が忙しいということです。
私のコードを使用すると、次のことができます。
スーパーマリオブラザーズA3Cトレーニングモデルでトレーニングした訓練を受けたモデルを見つけることができます
最初は、9つのステージを完了するためにエージェントを訓練することしかできませんでした。その後、 @Davincibjは、19のステージを完了し、訓練されたウェイトを送ってくれる可能性があることを指摘しました。発見していただきありがとうございます!