TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

将棋でディープラーニングする その51(ディリクレノイズ)

電王トーナメント版のdlshogiでは、Policyの読み漏れを回避するために、自分の手番の局面だけ、Policyの予測するそれぞれの手について1/1000の確率で値を1.5倍にするということを行っていた。
自分の手番の局面だけにしたのは、相手の局面にもノイズを入れると、相手番で楽観的な手を選びやすくなり頓死しやすくなる傾向があったためである。
MCTSは並列で探索するため探索する各スレッドの探索する手をばらけさせる効果もあり、ノイズなしより少しノイズを入れた方が強くなることを確認していた。

その後、ルート局面のみ1/500の確率でランダムでノイズを付加して、
(1-\epsilon)*p(a) + \epsilon * 1.0, \epsilon=0.5
という式で、ランダムで全ての手が選ばれやすくすることを行っていた。
これもGPSfish相手に勝率を上げる効果があった。

AlphaGo Zeroでは、ルート局面のみにディリクレノイズを加えることを行っている。
そこで、ルート局面のノイズの付加方法をディリクレノイズに変更して、GPSfish相手に勝率が上がるか試してみた。

変更前

前に発見したブートストラップ項のバグを改修したバージョンで、elmoで生成した5.8億局面を学習したモデルで、GPSfishと1手3秒50回対局で勝率47%となっている。

対局数50 先手勝ち17(36%) 後手勝ち29(63%) 引き分け4
dlshogi
勝ち22(47%) 先手勝ち7(33%) 後手勝ち15(60%)
GPSfish 0.2.1+r2837 gcc 4.8.1 osl wordsize 32 gcc 4.8.1 64bit
勝ち24(52%) 先手勝ち10(40%) 後手勝ち14(66%)

ディリクレノイズに変更後

定数にAlphaZeroの論文と同じ値を使用し、
P(x,a)=(1-\epsilon)p_a + \epsilon \eta_a, \eta \sim Dir(0.15), \epsilon=0.25
として、GPSfishと対局させた結果は以下の通り。

対局数17 先手勝ち10(62%) 後手勝ち6(37%) 引き分け1
dlshogi
勝ち4(25%) 先手勝ち3(37%) 後手勝ち1(12%)
GPSfish 0.2.1+r2837 gcc 4.8.1 osl wordsize 32 gcc 4.8.1 64bit
勝ち12(75%) 先手勝ち7(87%) 後手勝ち5(62%)

明らかに弱くなったので、対局を途中で打ち切った。

次に、\epsilon=0.1として、対局を行った結果は以下の通り。

対局数20 先手勝ち9(47%) 後手勝ち10(52%) 引き分け1
dlshogi
勝ち10(52%) 先手勝ち5(50%) 後手勝ち5(55%)
GPSfish 0.2.1+r2837 gcc 4.8.1 osl wordsize 32 gcc 4.8.1 64bit
勝ち9(47%) 先手勝ち4(44%) 後手勝ち5(50%)

20回対局で、GPSfishに52%の勝率となった。

今度は、\epsilon=0にして対局を行った結果は以下の通り。

対局数20 先手勝ち10(52%) 後手勝ち9(47%) 引き分け1
dlshogi
勝ち5(26%) 先手勝ち3(30%) 後手勝ち2(22%)
GPSfish 0.2.1+r2837 gcc 4.8.1 osl wordsize 32 gcc 4.8.1 64bit
勝ち14(73%) 先手勝ち7(77%) 後手勝ち7(70%)

勝率が下がった。

考察

\epsilonを増やしすぎても、減らしすぎても勝率は低くなっている。
AlphaZeroの論文と同じ値だと勝率は低くなった。
1手3秒という試行時間では、ノイズにより探索の幅が広がったのに対して深さが足りなくなったためと思われる。
これは、「探索と活用のジレンマ」という問題で説明できる。
幅と深さはどちらかを増やせば、どちらかが減る関係にある。
UCTアルゴリズムでは理論的には適切なバランスに調整されるはずだが、現実的な思考時間では、深さを優先した探索が必要になる。
PUCTアルゴリズムではPolicyの遷移確率に従って優先度を調整する。
Policyの精度は完全ではないため、浅いトラップのあるゲームでは読み漏れがあると、すぐに頓死する。
ノイズを加えることで、ある程度読み漏れを防ぐことができる。
ノイズを増やしすぎると幅に対して深さが足りなくなるため、行動価値の予測精度が落ちる。
思考時間に応じた適切なバランスを見つける必要がある。

今回の結果で、モデルの精度だけではなく探索のハイパーパラメータの調整によっても勝率が大きく変わることが分かったので、今後調整していきたい。
ベイズ最適化まで行おうとすると相当な対局数が必要になるので、気長にやっていくことにする。