Accelerating Self-Play Learning in Goを読んだ

出典

 David J. Wu, "Accelerating Self-Play Learning in Go," arXiv preprint, arXiv:1902.10565v2[cs.LG], 2019

概要

 AlphaZeroを高速化した。32GPU(V100)を使って1週間でトッププロレベルの性能を実現。

手法の詳細

ニューラルネットワークの学習(4章)

  • 価値関数にまつわる補助ターゲットを追加
    • 各マスが最終的にどちらのプレイヤーの地になるか予測
    • 各スコアになる確率を予測
  • 方策関数にまつわる補助ターゲットを追加
    • 次の対戦相手の応手を予測
  • ボードサイズを横断して重み共有をする
    • 小さいボードサイズが入力されるときはConv後にマスクを入れていくことで同じNNで学習可能に
  • CNN同士の接続途中でGlobal Poolingを利用
    • 各チャンネルについて平均、ボードサイズでスケールした平均、最大の3つを出力する(W\times H \times C \to 3 C)
    • 畳み込み層にグローバルな文脈を与えられることが重要(参考:Squeeze-Excite architecture[18,22])
  • ネットワークのブロック数、チャンネル数を徐々に段階的に大きくしていく
    • サイズを大きくするときはパラメータを転送するのではなく次サイズを並行して学習し始めて閾値を超えたらそっちへ切り替える
    • 自己対局のに比べて学習のコストは大したことないので大きな損失にはならない
  • その他設定
    • バッチサイズは256,学習率は\alpha_0 (\lambda T + 1) ^{-4/3}
    • パラメータを250Kごとに保存して1Mごとに0.75で指数移動平均を取ったものを評価
    • リプレイバッファのサイズは徐々に大きくしていく

探索とターゲット生成(5章)

  1. First-play urgency: N = 0のときの推測値を親ノードの価値と兄弟ノードへの方策から推定 $$V(c) = V(n) - c_{\mathrm{FPU}}\sqrt{\sum_{c'}I(N(c') \gt 0) P(c')}$$
  2. ディリクレノイズ付加時に元の方策自体にも温度付きソフトマックスをかける
  3. 方策が大きい手に対してある程度の探索回数を強制的に与える
    • 最大探索回数を超えないものについてはPUCT順序が逆転しないように探索回数を割り引く
  4. スコアの差を最大化する項も加える
    • u_{\mathrm{score}}(x) = c_{\mathrm{score}} f(\frac{x - x_0}{B})
  5. 探索木のターンを超えた再利用
    • AlphaZero→前ターンの木を再利用し、1ターンには一定の探索を行う(playout cap)根拠
    • Leela Zero→前ターンの木を再利用し、1ターンには木がある大きさになるまで探索を行う(visit cap)
    • KataGo→前ターンの木は捨てて、1ターンには木がある大きさになるまで探索を行う

自己対局(6章)

  1. 25%の確率で600回(など)の長い探索を行い、学習データに入れる。残りの75%では100回(など)の短い探索を行い、学習データには入れない(木のデータも次ターンへ引き継ぐ)
  2. その他の違い
    • 補助ターゲットの兼ね合いがあるので早期の投了はなし。代わりに勝勢付近では探索回数を減らす
    • 局面に多様性をもたらすために小さい確率で生の方策からランダムに進めて枝分かれさせる
    • 囲碁ドメイン知識を用いて終局付近を高速化するなど
    • パラメータをアップデートするときに検証対局を導入

実験(7章)

 Ablation(除去)実験によりそれぞれの工夫の寄与を評価。x軸は累積の自己対局コストであることに注意。

補助タスク

探索数のランダム変動

Global Poolingとドメイン知識の入力

気になった参考文献

  • multi-valued predictions

    • [6] F. Morandin, G. Amato, R. Gini, C. Metta, M. Parton, G. C. Pascutto. SAI, a Sensible Artificial Intelligence that plays Go. arXiv preprint, arXiv:1809.03928v1 [cs.AI], 2018-09-11.
  • 補助ターゲット(auxiliary prediction targets)の利用

    • [12] Yuandong Tian and Yan Zhu. Better Computer Go Player with Neural Network and Long-term Prediction. In International Conference on Learning Representations, 2016. arXiv:1511.06410
    • [13] Ti-Rong Wu, I-Chen Wu, Guan-Wun Chen, Ting-han Wei, Tung-Yi Lai, Hung-Chun Wu, LiCheng Lan. Multi-Labelled Value Networks for Computer Go. IEEE Transactions on Games, Vol. 10, No. 4, pp. 378-389, December 2018. arXiv:1705.10701

所感

  • 実践では用いなくとも学習時にサブタスクを考えることで学習性能が良くなることはいくらか見聞きする。将棋だと駒割の情報を、入力ではなくタスクとして与えることで性能が良くなるかもしれない? もちろんドメイン知識を入力として与えることでも性能の向上は大きいとのことなのでその方向もありだと思う。
  • 探索数をランダム変動させて高速化するテクニックは興味深い。Valueの教師情報が1ゲームにおいては1種類しか得られず、局数を増やすことが重要という考察から来ているようだ。しかしValueもブートストラップを使って1ゲームの中でも教師情報が多様になれば大丈夫なのではないかと思ってしまうが。
  • 乱数を使って探査を促進したり、誤った評価を反駁するのはやはり時間がかかってしまうように思える。評価値の推移や探索数の分布から1局のターニングポイントを上手く発見できたりしないかと考えているが、今の所よくわかっていない。