Policyの教師信号を分布にする

要約

 Policyの教師信号を探索回数の正規化した分布とした方が性能が向上した。

背景

 AlphaZero型の学習においてPolicyの教師信号にはルートノードから各行動について探索した回数をその総和で割った分布を利用している。MiacisではCPUのメモリ容量が足りないかと思って、実際に取った行動をOnehotベクトルとしたものを教師信号としていた。しかしちゃんと計算してみると問題はなかった。

 具体的には、Miacisでは通常2^{20} (=1M)局面分のサイズを持つリプレイバッファを用いて学習をしている。1局面分のPolicyの教師データが、今までは指した指し手のラベルを一つ持っていたので4Byteであったのが、合法手の数だけラベルとその行動の確率のペアとして保持すると合法手の数 × 8Byteとなる。合法手が平均100手とすると増加分は800MByteとなる。Policyの出力次元(81 × 27 = 2187)全て保持しておかなければならないかと思いこんでいたが、合法手のところだけ持っておき学習する時点で2187次元ベクトルに直せば良いだけの話であった。

実験

実験設定

 前回と同じ。

実験結果

 floodgateの棋譜に対する損失は次のようになった。教師信号を分布としたものがpropotionalである。

f:id:tokumini:20190519134937p:plainf:id:tokumini:20190519134943p:plain
左:Policy損失 右:Value損失

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

教師信号 勝率
onehot 79.0%
propotinal 81.0%

 ほとんど変わらないようにも思えるが、Policyの教師信号を探索回数を正規化した分布とした方が多少良い結果のように思える。

 また初期局面でのPolicyの出力分布を示す。

順位 onehot propotional
1 ▲2六歩(18.1%) ▲2六歩(32.2%)
2 ▲3八飛車(13.9%) ▲7八金(22.0%)
3 ▲5八玉(10.8%) ▲5八玉(17.0%)
4 ▲5八飛車(9.7%) ▲5八飛車(9.0%)
5 ▲2六歩(7.8%) ▲5六歩(6.0%)
その他 39.7% 13.8%

 教師信号を分布としたほうが手がばらけるかと思ったがこと初期局面に関しては単純にそうなるわけではなかった。またpropotinalは技巧との対局では中飛車が多くなったのだが、特にその傾向もこのPolicyからだけでは見られない。

 1秒探索した後の探索回数を正規化した分布についても調べた。

順位 onehot propotinal
1 ▲5八玉(52.5%) ▲7八金(74.0%)
2 ▲4八銀(21.2%) ▲2六歩(11.0%)
3 ▲7六歩(17.5%) ▲5八玉(5.5%)
4 ▲3八飛車(3.3%) ▲5八飛車(5.3%)
5 ▲5八飛車(0.9%) ▲5六歩(1.3%)
その他 4.6% 2.9%

 propotinalの▲7八金の後は読み筋で▲5八飛車と出るので、実質80%ほどが中飛車となると予想され、これは対局を見ていて受けた印象とも近い。

 また両者ともPolicyの偏りに比べて探索結果の偏りが大きすぎるのではないかと思われる。これはC(s)の値が小さいためだと考えられ、以前上げた記事では、AlphaZeroはValueを[0, 1]の範囲に直して探索しているという情報があり、そのままのC(s)では[-1,1]の範囲で探索しているMiacisにとっては小さすぎるのかもしれない。二つパラメータを調整するのは大変なのでC_{PUCT}に戻して実験してみたい。