自己対戦を通じて単純なゲームをマスターするエージェントのトレーニング

エージェントのトレーニング:自己対戦で単純なゲームをマスターする

ゲームをシミュレーションして結果を予測します。

A robot computing some additions. Image by the author, with help from DALL-E 2.

はじめに

完全情報ゲームで優れるために必要なすべてが、ゲームのルールにすべて公開されていることは驚くべきことではありませんか?

残念ながら、私のような凡人にとっては、新しいゲームのルールを読むことは、複雑なゲームをプレイするための旅のごく一部に過ぎません。ほとんどの時間は、理想的には同じくらいの強さを持つプレーヤー(または私たちの弱点を露呈させるのに十分な忍耐力を持つより優れたプレーヤー)と対戦することに費やされます。頻繁に負け、できれば時々勝つことは、私たちが徐々に上手くプレイするように導く心理的な罰と報酬を提供します。

おそらく、それほど遠くない将来、言語モデルがチェスなどの複雑なゲームのルールを読み、最初から最高のレベルでプレイすることができるようになるでしょう。それまでの間に、私はより控えめな挑戦を提案します:自己対戦による学習。

このプロジェクトでは、以前のバージョンの自身がプレイした試合の結果を観察することで、エージェントをトレーニングして、完全情報の2プレーヤーゲームをプレイするように学習させます。エージェントは、任意のゲームの状態に対して値(ゲームの予想結果)を近似します。さらなる挑戦として、複雑なゲームには管理できないため、エージェントは状態空間のルックアップテーブルを保持することは許されません。

SumTo100の解決

ゲーム

今回取り上げるゲームはSumTo100です。このゲームの目標は、1から10の数値を足して合計が100になることです。以下がルールです:

  1. 合計を0に初期化します。
  2. 最初のプレーヤーを選択します。2人のプレーヤーが交互にプレイします。
  3. 合計が100未満の間:
  • プレーヤーは1から10までの数値を選択します。選択した数値は100を超えないように合計に追加されます。
  • 合計が100未満の場合、もう一方のプレーヤーがプレイします(つまり、ポイント3の最初に戻ります)。

4. 最後の数値を追加したプレーヤー(合計が100に到達)が勝ちます。

Two snails minding their own business. Image by the author, with help from DALL-E 2.

このようなシンプルなゲームから始めることには多くの利点があります:

  • 状態空間には101個の可能な値しかありません。
  • 状態は1Dグリッド上にプロットすることができます。この特異性により、エージェントが学習した状態価値関数を1D棒グラフとして表現することができます。
  • 最適な戦略が既知です:n ∈ {0, 1, 2, …, 9} に対して合計が11n + 1になるようにする

最適戦略の状態価値を視覚化することができます:

Figure 1: The optimal state values for SumTo100. Image by the author.

ゲームの状態は、エージェントがターンを終えた後の合計です。値が1.0の場合、エージェントは勝つことが確実です(または勝ちました)、-1.0の場合、エージェントは負けることが確実です(対戦相手が最適にプレイすると仮定した場合)。中間の値は推定されたリターンを表します。たとえば、状態値が0.2の場合、わずかにプラスの状態を示し、状態値が-0.8の場合は、負ける可能性が高いことを示します。

コードに入りたい場合、全体のトレーニング手順を実行するスクリプトは、このリポジトリ内のlearn_sumTo100.shです。そうでない場合は、エージェントが自己対戦によって学習する方法の高レベルな説明をご覧ください。

ランダムプレーヤーによってプレイされるゲームの生成

エージェントには、それ自体の以前のバージョンによってプレイされたゲームから学習してもらいたいのですが、最初のイテレーションでは、エージェントはまだ何も学んでいないため、ランダムプレーヤーによってプレイされるゲームをシミュレートする必要があります。各ターンで、プレーヤーはゲームのルールをエンコードするゲーム権限(ゲームルールをエンコードするクラス)から現在のゲーム状態を与えられ、合法な手のリストを受け取ります。ランダムプレーヤーは、このリストからランダムに手を選択します。

図2は、2人のランダムプレーヤーによってプレイされたゲームの例です:

Figure 2: Example of a game played by random players. Image by the author.

この場合、2番目のプレーヤーが100の合計に到達して勝ちました。

エージェントは、ゲームの状態を入力とし、このゲームの予想されるリターンを出力するニューラルネットワークにアクセスできるようにします。エージェントは、与えられた状態(エージェントがプレーする前の状態)に対して、合法な行動とそれらに対応する候補状態のリストを取得します(確定的な遷移を持つゲームのみ考慮します)。

図3は、エージェント、対戦相手(移動選択メカニズムが不明な相手)、およびゲーム権限の相互作用を示しています:

Figure 3: Interactions between the agent, the opponent, and the game authority. Image by the author.

この設定では、エージェントは回帰ニューラルネットワークに依存してゲームの状態の予測されるリターンを予測します。ニューラルネットワークがどの候補手が最も高いリターンをもたらすかを予測できるほど良い場合、エージェントのプレイはより良くなります。

ランダムにプレイされた対戦のリストは、最初のトレーニングのデータセットを提供します。図2の例のゲームを取ると、プレーヤー1が行った手を罰することが目的です。なぜなら、その行動が敗北につながったからです。最後のアクションによって生じる状態は-1.0の値を持ちます。なぜなら、それが相手に勝つことを許したからです。その他の状態は、エージェントが到達した最後の状態との距離dに応じて、γᵈという割引率で負の値を割り引かれます。γ(ガンマ)は割引率であり、[0, 1]の範囲内の数値であり、ゲームの進化における不確実性を表します。初期の決定を最後の決定ほど厳しく罰することはしたくありません。図4は、プレーヤー1が行った決定に関連する状態値を示しています:

Figure 4: The state values, from the point of view of player 1. Image by the author.

ランダムなゲームは、その目標となる予想リターンを持つ状態を生成します。たとえば、合計が97に達すると、目標となる予想リターンは-1.0であり、合計が73になると、目標となる予想リターンは-γ³です。状態の半分はプレーヤー1の視点を持ち、もう半分はプレーヤー2の視点を持ちます(ただし、SumTo100の場合は関係ありません)。エージェントが勝利で終わるゲームでは、対応する状態は同様に割引された正の値を取得します。

ゲームのリターンを予測するエージェントのトレーニング

トレーニングを開始するために必要なものはすべて揃っています:ニューラルネットワーク(2層のパーセプトロンを使用します)と(状態、予測されるリターン)のペアのデータセット。予測される予想リターンの損失の進化を見てみましょう:

図5:エポックの関数としての損失の進化。著者による画像。

ランダムなプレイヤーによって行われたゲームの結果に対して、ニューラルネットワークがあまり予測力を示さないことに驚く必要はありません。

ニューラルネットワークは何も学んでいないのでしょうか?

幸いにも、状態は0から100の間の数値の1次元グリッドとして表現することができるため、最初のトレーニングラウンド後のニューラルネットワークの予測リターンをプロットし、図1の最適な状態値と比較することができます:

図6:ランダムなプレイヤーによるゲームのデータセットでトレーニング後の予測リターン。著者による画像。

実際には、ランダムなゲームの混沌の中で、ニューラルネットワークは2つのことを学びました:

  • 合計が100に達することができるなら、それを行いなさい。それはゲームの目標であるため、良い知識です。
  • 合計が99になると、必ず負けます。実際、この状況では、相手は唯一の合法的な行動を持ち、その行動はエージェントにとっての敗北につながります。

ニューラルネットワークは基本的にゲームを終了することを学びました。

もう少し上手にプレイするためには、エージェントのコピー同士でプレイされたゲームをシミュレーションして、データセットを再構築する必要があります。同じゲームが生成されないように、プレーヤーは少しランダムにプレイします。うまく機能するアプローチは、ε-グリーディアルゴリズムを使用してムーブを選択し、最初のムーブではε = 0.5、ゲームの残りではε = 0.1を使用することです。

より良くなるためにトレーニングループを繰り返す

両方のプレーヤーは今や100に達する必要があることを知っているため、90から99の間の合計は罰せられるべきです。なぜなら、相手はその機会を利用して試合に勝つことができるからです。この現象は、2回目のトレーニング後の予測状態値で見ることができます:

図7:2回のトレーニング後の予測状態値。90から99の合計は-1に近い値を示します。著者による画像。

パターンが浮かび上がっています。最初のトレーニングラウンドはニューラルネットワークに最後のアクションについて情報を提供し、2回目のトレーニングラウンドはその前のアクションについて情報を提供します。ゲーム内のアクションの数だけ、ゲームの生成と予測へのトレーニングのサイクルを繰り返す必要があります。

以下のアニメーションは、25回のトレーニングラウンド後の予測状態値の進化を示しています:

図8:トレーニングラウンドごとに学習された状態値のアニメーション。著者による画像。

予測リターンの信頼区間はゲームの終わりから始まる方向に指数的に減少しています。これは問題ですか?

この現象には2つの要素が寄与しています:

  • γはゲームの終わりから離れるにつれて、目標の期待リターンを直接減衰させます。
  • ε-グリーディアルゴリズムはプレーヤーの行動にランダム性を導入し、結果を予測しにくくします。非常に高い損失の場合に備えてゼロに近い値を予測するインセンティブがあります。ただし、ランダム性は望ましいです。ニューラルネットワークが単一のプレイラインを学習することは望ましくありません。エージェントと相手の両方からのミスや予期しない良いムーブを目撃させたいのです。

実際には、ゲームSumTo100において、与えられた状態の合法な手の中で、比較可能なスケールを共有する値を比較するため、これは問題ではないはずです。値のスケールは、貪欲な手を選択する際には問題ではありません。

結論

私たちは、二人のプレイヤーが関与し、状態から次の状態への遷移が確定的で、アクションが与えられる完全情報のゲームをマスターできるエージェントを作成することに挑戦しました。手動での戦略や戦術のコーディングは許されませんでした:すべてはセルフプレイによって学習する必要がありました。

私たちは、エージェント同士を対戦させ、生成されたゲームの予測されるリターンを予測するための回帰ニューラルネットワークのトレーニングを行うことで、SumTo100というシンプルなゲームを解決することができました。

得られた洞察は、ゲームの複雑さの次の段階に向けて私たちをよく準備してくれましたが、それについては次の投稿でお話しします! 😊

お時間いただき、ありがとうございました。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AIニュース

ウィンブルドンがAIによる実況を導入

テニス愛好家にとって素晴らしいニュースです!世界で最も権威のあるテニストーナメントの一つであるウィンブルドンは、最新...

機械学習

Learning to build—Towards AI コミュニティニュースレター第1号

私たちは最新のニュースレターをお知らせすることをとても楽しみにしています!それは私たちの共同体についてのすべてですコ...

データサイエンス

「Jaro-Winklerアルゴリズムを使用して小規模言語モデル(SLM)を構築し、スペルエラーを改善・強化する」

「Jaro-Winklerアルゴリズムを使って、小さな固定定義データセットでSmall Language Model(SLM)を構築し、システムのスペル...

機械学習

クラウドストライクは、Fal.Con 2023におけるAI駆動のセキュリティに関するビジョンを概説します

「クラウドネイティブアーキテクチャを使用し、AIと統合データを活用して、ますます速い攻撃に対する検出と対応を加速する」

AIニュース

オープンAIのファンクションコーリング入門

Forbesによると、AI市場は2030年までに$1,811.8 billionに到達すると予想されています。Davinci、GPT Turbo、GPT Turbo 3.5、...

機械学習

「2024年のソフトウェア開発のトレンドと予測18」

2024年のソフトウェア開発の世界は、急速な技術の進歩と同時に進化するセキュリティの課題に備えています