C_PUCTの調整

要約

 C_{PUCT}は2.5としたとき一番性能が良かった。

背景

 今までMiacisは探索の選択ステップにおいてScience版AlphaZeroと同様の係数C(s)を用いていた。

$$ a_t = \mathrm{argmax}_a \left( Q(s_t, a) + C(s) P(s, a) \frac{\sqrt{N(s)}}{1 + N(s, a)} \right) $$

$$ C(s) = \log\left(\frac{1 + N(s) + c_{base}}{c_{base}}\right) + c_{init} $$

 しかし実際にはQ(s_t, a)の代わりに違う値を用いているのもあり、係数も調整し直した方が良い可能性がある。

 さらに以前の記事

では、初期局面について探索を行うと探索回数が偏っていることがわかった。根拠のない感覚的な話だが、初期局面におけるPolicy,Valueの値の感じからするともう少し探索回数はバラける方が自然に思えたため、係数Cを現在の値よりも多少大きい値に変更して実験を行った。

実験

実験設定

 係数Cを変更してAlphaZeroと同様の強化学習を100kステップ行い、学習した際の値と同じCのまま技巧(深さ2)と検証対局を行った。

 係数Cとして次の3通りを試した。

  • C_s : AlphaZero(Science版)と同様の式
  • C_PUCT=2.5 : AlphaZero(Arxiv版)、AlphaGoZeroと同様にCを定数として扱い、その値を2.5としたもの
  • C_PUCT=5 : 上に同じで値を5としたもの

実験結果

検証損失

 floodgateの棋譜を用いた検証損失は次のようになった。

f:id:tokumini:20190527145905p:plainf:id:tokumini:20190527145907p:plain
検証損失 左:Policy損失 右:Value損失

 C_PUCT=2.5と5ではあまり差が見られないが、C_sではPolicyの損失があまり下がっていない。

学習損失

 普段学習損失は重視していないのだが、今回は顕著な差が見られたので学習損失も示す。

f:id:tokumini:20190527152838p:plainf:id:tokumini:20190527152841p:plain
学習損失 左:Policy損失 右:Value損失

 C_sにおけるPolicy損失の下がり方が急激過ぎるように見える。また学習損失が下がっている間にはあまり検証損失が下がっておらず、むしろ800kステップあたりで学習損失が上がりつつ検証損失が下がっていることから、良くない指し手に行動が偏ってしまっているのではないかと思われる。

検証対局

 技巧2(深さ2)と1手1秒で300局対局を行った結果は次のようになった。

係数 勝率 Eloレート差
C_s 51.2% +8.3
C_PUCT=2.5 64.5% +103.7
C_PUCT=5 56.7% +46.6

 C_PUCT=2.5が一番勝率が高かった。C_sと比べてEloレートに換算すると約+100ほどの伸びとなっている。

 初期局面の分布を見ると

係数 ▲2六歩(Policy) ▲7六歩(Policy) ▲2六歩(探索後) ▲7六歩(探索後)
C_PUCT=2.5 45.2% 48.9% 66.7% 32.9%
C_PUCT=5 47.7% 38.9% 59.1% 25.4%

となっており、ほぼ▲2六歩と▲7六歩で確率の大部分を占める形になっていた。バラけさせる効果が有効に働いていたかどうかはわからず、C_sとの性能差は上手く▲2六歩と▲7六歩を見つけられるかという偶然性による可能性もある。強化学習なのでそれぞれ1回の試行で結論付けるのも怖いところではあるが、一応今後はC_PUCT=2.5でやっていこうと思う。