AlphaZeroに対するTDLeaf(λ)の適用 ~実験編~

 前回はTDLeaf(\lambda)の理屈からAlphaZeroにおいて探索した値を用いる方法を検討した。今回はそれを基に強化学習を行った結果を記す。

損失による評価

 floodgate2016年・R2800以上同士の棋譜に対する損失計算によって評価を行った。

f:id:tokumini:20190413151233p:plain f:id:tokumini:20190413151246p:plain

 \lambda = 0.95, 0.925, 0.9の3つの値について試してみたが、どの値についても傾向は概ね似たものとなった。

 まずPolicy損失については\lambda = 1とするよりも速く減少したが、最終的な値はほぼ変わらなかった。それぞれ1回しか学習を試せていないので、単純に\lambda = 1のときの学習で良くない乱数を引いたというだけの問題かもしれない。

 Value損失もまた\lambda = 1とするよりも速く減少したが、途中から徐々に上がり始め、最終的な値は悪くなってしまった。

 TDLeaf(\lambda)は探索した値を使うブートストラップ手法なので、終盤から学習が進んでいき徐々に序盤へ伝播していく。実際に\lambda = 0.9とした場合と\lambda = 1.0の場合について、1万局目に生成した対局の評価値グラフを示す。評価値は状態価値を1000倍したものであり、[-1000, 1000]の範囲で表される。

f:id:tokumini:20190413161911p:plainf:id:tokumini:20190413161915p:plain
左:\lambda = 0.9 右:\lambda = 1.0

 \lambda = 0.9とした場合では序盤はほぼ0の値となっているが、\lambda = 1.0の場合は序盤からいくらか値がついていることがわかる。

 \lambdaを1未満にした場合、学習初期では終盤だけが信頼度の高い教師情報によって少し学習されることになり、損失はなだらかな減り方をするものと考えられる。逆に\lambda = 1の場合は序盤についても最終的な結果から教師情報を与えるので学習初期でも値がつくが、それが適切であるとは限らないため損失が上がってしまうのだと予想される。

 最終的な性能差については、学習終わり頃の対局データを見てみたところ\lambda = 0.95, 0.9の場合初期局面に400など大きな値がついていた。ブートストラップの影響により一度偏った値になると修正が効かないのではないかと考えられる。しかし\lambda = 0.925の場合は初期局面における偏りは特に見られず、この説が正しいかどうかは疑わしい。

対局による評価

 損失が本当に棋力と相関しているかどうかはわからないため、実際に1手1秒で100局対局させることで性能を評価した。\lambda = 0.9で200kステップ学習したものを

  1. \lambda = 1.0で200kステップ学習したもの
  2. \lambda = 0.9で100kステップ学習したもの

の2つと対局させた。損失から見るとこれらは

学習内容 Policy損失 Value損失
\lambda = 0.9で200kステップ 3.26 0.94
\lambda = 1.0で200kステップ 3.27 0.88
\lambda = 0.9で100kステップ 3.28 0.89

となっており、Policy損失はおおむね同じでありValue損失に差があることから一番上のものよりも下二つの方が棋力が高いと予想される。

 \lambda = 0.9で200kステップ学習したものから見て対局結果は次のようになった。

対戦相手 勝率(%) 推測レート差
\lambda = 1.0で200kステップ 62 85.0
\lambda = 0.9で100kステップ 73 172.8

 予想に反してValue損失が大きいものが一番強い結果となった。学習が進むにつれて損失は悪化していたが性能は良くなっているようだ。また\lambda = 1とした場合よりも性能が良くなることもわかった。

 レート1200前後といったレベルでも損失が棋力を表す指標として信頼できないという事実は重大だ。自己対局はコストがかかるが、1手1秒ではなくノード数による制限などをしてでも対局から性能評価するべきかもしれない。