強化学習で無効な動きを処理する方法は?


20

5列/五目並べをプレイできるAIを作りたい。タイトルで述べたように、これには強化学習を使用します。

私は、使用ポリシー勾配すなわちベースラインと、補強、方法。値とポリシー関数の近似には、ニューラルネットワークを使用します。畳み込み層と完全に接続された層があります。出力を除くすべてのレイヤーが共有されます。ポリシーの出力層には、(ボードのサイズ)出力ユニットとsoftmaxがあります。したがって、確率的です。しかし、ネットワークが無効な移動の可能性が非常に高い場合はどうでしょうか?無効な移動とは、エージェントが1つの「X」または「O」を含む正方形をチェックしたい場合です。私はそれがそのゲーム状態で立ち往生できると思います。8×8=64

この問題の解決策をお勧めしますか?

私の推測では、俳優と批評家の方法を使用することです。無効な動きについては、負の報酬を与え、相手にターンを渡す必要があります。

回答:


10

無効な動きを無視してください。

探索の場合、最も高い確率で移動を実行するだけでなく、出力された確率に基づいてランダムに移動を選択する可能性があります。違法な動きのみを処罰する場合、それらはある程度の確率を保持します(しかし、わずかですが)ため、時々実行されます(しかし、めったにありません)。したがって、あなたは常に違法な動きをするエージェントを常に保持します。

私にとっては、すべての違法な動きの確率をゼロに設定し、動きを選択する前に出力ベクトルを再正規化する方が理にかなっています。


ありがとうございました。おそらく私ははっきりしていなかったが、出力された確率によってランダムに動きを選んだ。違法な動きの可能性をゼロに設定し、何が起こるかを確認するためにあなたのアドバイスを試みます。良い一日を。
モルナーイストヴァン

8

aθϕsA

πθa=eθϕsabAeθϕsb

LegalA

πθa=eθϕsabLegalAeθϕsbaLegalA

擬似コードでは、式は次のようになります。

action_probs = Agent.getActionProbs(state)
legal_actions = filterLegalActions(state, action_probs)
best_legal_action = softmax(legal_actions)

線形関数近似または非線形関数近似(ニューラルネットワーク)を使用するかどうかにかかわらず、アイデアは、ソフトマックスを計算するときに合法的な動きのみを使用することです。この方法は、有効な動きのみがエージェントによって与えられることを意味します。これは、後でゲームを変更したい場合に適しています。また、アクションの制限された選択の価値の違いは、エージェントによって識別しやすくなります。また、可能なアクションの数が減るにつれて高速になります。


非常に便利。方程式と擬似コードの両方を投稿していただきありがとうございます!
デューク

1
数学と擬似コードはここでは一致しません。リーガルムーブの確率に対するSoftmaxは、相対的な確率を調整します。たとえば、最初と3番目のアイテムを削除してフィルター処理した(0.3、0.4、0.2、0.1)は、数式では(0.0、0.8、0.0、0.2)になりますが、擬似コードを使用すると(0.0、0.57、0.0、0.42)になります。疑似コードは、アクションの確率を計算する前にロジットを取る必要があります。
ニールスレーター

4
Softmaxのフィルターバージョンの勾配をどのように計算しますか?バックプロパゲーションが正常に機能するには、これが必要なようです。
ブライアンバーンズ

@brianberns答えを見つけることができましたか?...それは私にケースになるように思えるが、unfiliteredソフトマックスのログ確率を使用するときに何とか私のおもちゃの例では、私が唯一の正しい答えを得ている
tryingtolearn

5

私見では、無効な動きのアイデア自体は無効です。座標に「X」を配置することを想像してください(9, 9)。あなたはそれを無効な動きであると考え、それに負の報酬を与えることができます。不条理?もちろん!

しかし、実際には、無効な動きは表現の遺物にすぎません(それ自体は簡単で素晴らしいです)。それらの最善の処理は、計算から完全に除外することです。

これはチェスでより明らかになります:

  • 位置表現ではa1-a8、ルークまたはクイーンがいるa1(および他の条件が満たされている)場合にのみ、ゲームに属するmoveを考慮することができます。

  • 別の表現では、移動を検討できますQb2。繰り返しますが、これはゲームに属する場合とそうでない場合があります。現在のプレイヤーにクイーンがいない場合、それは確かにありません。

無効な動きはゲームではなく表現に関連しているため、まったく考慮すべきではありません。


1
素晴らしい点。数独でプレイされる[M]ゲームでは、制約により、最初の配置後に多くの位置(座標+値)が違法になります。プレースメントの観点からこれらの違法なポジションを考慮することは価値がありません、重要な戦略的レイヤーは、どのプレースメントが残りのプレイされていないポジションの価値を最小にするかを認識することです。(つまり、私はブロック私の相手は、その行、列または地域で8を配置するから、それをここに8を配置する場合は基本的に、「どのように多くの戦略的な位置は、ゲームボードから、この配置削除しますか?」。)
DukeZhou

5

最近、マインスイーパで同様の問題に直面しました。

私がそれを解決したのは、違法/無効な動きを完全に無視することでした。

  1. Qネットワークを使用して、すべてのアクション(有効および無効)のQ値を予測します
  2. すべての無効な移動をゼロ/負数のQ値に設定して、Q値を前処理します(シナリオによって異なります)
  3. 選択したポリシーを使用して、洗練されたQ値(貪欲またはボルツマン)からアクションを選択します。
  4. 選択したアクションを実行し、DQNロジックを再開します

お役に立てれば。


1
これに追加する唯一のことは、違法な(s、a)ペアのQ値を大きな負の値に設定するときにDQNでbackpropを実行することを覚えておく必要があることです。次回ペア。
SN

しかし、損失-エラー関数の連続性または形状に大きな-veターゲットQ値を設定するとどうなるのかと思います(それによって勾配検索に影響します)。あなたの経験はどうでしたか?
SN

1
@SNあなたの主張がわかります。考えは、無効なアクションではない最高のQ値を持つアクションを選択することです。次に、そのアクションを実行し、更新ルールでそのアクションを使用します(つまり、長期的にこのアクションを優先するようにDQNをトレーニングします)。これにより、選択したアクションの将来のQ値が高くなり、より有利になります。ただし、不正なアクションのQ値を低くすることはありません。これは、常に除外される(考慮されない)ため重要ではありません。例を挙げて詳しく説明してほしい場合はお知らせください。:)
Sanavesa

1
@Sanavesaは確かに理にかなっています。あなたは本質的にDQNを頼りにして、最終的にハードノックの学校を通して正しい選択が何であるかを学びます。しかし、法的選択が1つまたは少数の状況では、学習が非常に遅くなります。私が提案しているアプローチは、ドメインKを問題に組み込んでその学習をスピードアップする方法です。また、「ゼロ/負の数のQ値に無効な移動を設定する」について書いた元の投稿であなたがやっていたと思ったこと
SN

1
@SNPrecisely!どちらのアプローチにもメリットがあります。法的動きを簡単に習得できるか、まったく無視するかは、アプリケーションに依存します。大規模で複雑なアプリケーションの場合、無効な動きを無視するほうが、エージェントが学習するのがはるかに速いと感じますが、そのことを引用しないでください。
サナベサ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.