
ポーカーAI開発 part4 〜スタッツを元に報酬を設計する~
こんにちは!ナガメ研究所です。人を楽しませるポーカーAIの開発をしています。
今回は、part2の記事で話したスタッツ(プレイの特徴を表す様々な数値)を評価指標にして、AIのプレイスタイルをコントロールできないか試したのでその話をしたいと思います。
はじめに
現在開発しているポーカーAIは、AI同士が対戦することで強くなる”self-play”という学習方法をとっています。AIは報酬と呼ばれる、行動の結果が良かったのか悪かったのかを判断するための評価をもらいます。
最初はランダムな行動をとりますが、対戦を繰り返すことで徐々に報酬がもらえる行動を発見していくようになるのです。どのような行動の結果に対して報酬を与えるかは、人間が設定します。これを「報酬設計」といいます。

ポーカーAIにおける報酬設計
アプローチ1:勝利したとき
では、ポーカーにおいてはどのような報酬設計が考えられるでしょうか。
最もシンプルなのは、勝ったときでしょう。つまり、相手のBankRollをゼロにしたとき、報酬がもらえるように設計するのです。
part2で紹介したAIは、この報酬設計で学習が行われています。学習したAIとの対戦の様子はツイッターにあげてますので、ぜひご覧下さい。
AI同士で対戦しあって強くなったAIと戦ってみた!
— ナガメ研究所🎲🤖 (@Nagame_Lab) October 13, 2022
手札の強さに応じてベットサイズを変えてくるなど、それっぽく動いてきたんじゃないでしょうか!
前回上げた動画よりもAIへの入力パラメータや学習環境を工夫したので、noteにその内まとめます。#Unity #MLAgents #ポーカー #poker #AI #強化学習 pic.twitter.com/37iMHvYrwm
アプローチ1の考察
現在のポーカーAI「ナガメ」は、手札によらず全ハンドを降りませんし、べット・レイズサイズが大きいことから、かなりアグレッシブであることが分かります。foldはポットを相手に与えることになるため、忌避しているのでしょうか・・・?とにかく、もう少し人間らしいプレイをしてもらいたいので、工夫してみます。
アプローチ2:WTSDを報酬に加える
本題です。報酬は勝った・負けたときに与えますが、今度は報酬の量に手を加えていきます。
通常、報酬は勝ったときに1、負けたときに-1、という数値を与えます。AIはより大きな報酬が得られるような行動を探索するので、報酬の量を調整することでプレイスタイルをある程度コントロールできないか実験してみます。
アプローチ1の結果よりもう少しfoldの頻度をあげてもらいたいので、WTSDというスタッツの数値を報酬にしてみます。
WTSDとは、フロップまで進んだ場合に、ショーダウン(最後までゲームが進み、役の強さで勝負を決定する段階)になる割合です。WTSDが高いと、foldしていないことになります。part2でも述べましたが、今回はWTSDをフロップ以降にfoldした割合としてカウントし、この数値が高いほど勝ったときの報酬が高くなるように設定します。(※本来のWTSDと逆の事を言っているので注意してください)
具体的には、フロップ後のfoldを1回するごとに0.05加算し、最大0.5まで報酬を追加します。この値に、勝利した場合はさらに+0.5します。負けた場合は-1で固定です。
アプローチ2の実験結果
早速結果から言うと、イマイチでした(悲)。アプローチ1と2のWTSD値をグラフにしました。横軸が学習の進み具合で、縦軸がフロップ以降にfoldした値です。SBとBBのポジションごとに折れ線グラフを出しています。折れ線グラフからも分かる通り、特に大きな変化は見られません。予想ではある程度wtsdは向上する想定でしたが、報酬の値をみても勝利につながる行動は学習していましたが、WTSD値の改善は見られませんでした。

次に、作成したAI同士を対戦させてみました。二つのアプローチをポジションを交代して1万ゲームずつ(バンクロールがゼロになるまで)した結果が以下になります。
アプローチ1(SB) vs アプローチ2(BB) → 0.49531 : 0.50469
アプローチ1(BB) vs アプローチ2(SB) → 0.50373 : 0.49627
はい・・・ほとんど誤差ですね笑 アプローチによる差は見られず、ポジションによる差で80ゲームほどBBが勝利する結果となりました。
おわりに
WTSDを指標に報酬を設計する方法を試しましたが、いくつか課題が見つかりました。まず、どれくらいの回数をどれくらいの量の報酬にして与えるのかというパラメータを探索する必要があることです。
次に、そもそもアタックするスタッツとしてWTSDは難易度が高かったのではないかという点です。フロップ以降に適切にフォールドする回数が報酬につながるというのは、ルールを知っている人間からすればそれほど難しいことではないのかもしれません。しかし、ルールから手探りで学習を行う強化学習において、最初からこのルールを認識しろというのは酷だったのかもしれませんね・・・。なので、もっと簡単なスタッツやら指標で再度実験してみたいと思います。
報酬設計をさらに工夫し、より多彩なプレイをしてくれるよう目指しますので、モチベーションのためにぜひフォロー・スキをよろしくお願いします!
※続編書きました!