Edited at

DCNNigo論文概要(個人的メモ)

More than 3 years have passed since last update.

Teaching Deep Convolutional Neural Networks to Play Goの概要

(囲碁もコンピュータ囲碁もよくわかってないので、間違っている可能性大)

使われている手法の概要はPFIの海野さんの"Statistical Semantic入門 ~分布仮説からword2vecまで~"が非常に参考になる


Motivation


  • brute forceではなくて、もっと人間的な直感的な指し方ができないと強くなれないのではないか

  • それを実現するためにDCNN(Deep Convolutional Neural Networks)を使用


Contribution


  • Edge Encodingなどの新しい手法を導入したこと


Introduction


  • コンピュータ囲碁で難しい部分は以下の2点

  • (1)選択肢が非常に多い(19*19=361), (2) 勝利につながるヒューリスティックが見つかっていない

  • アルゴリズムの基本は次の一手の予測

  • 囲碁のエキスパートは非常に複雑な思考をしているため、non-linearでnon-smoothな方法が求められる

  • これらを加味してDeep Learningを用いるのが良いと判断


Previous Work


  • 予め石の配置の形状のパターンを用意しておいて、それを特徴として利用する方法で最良のモデルで指し手のaccuracyは41%

  • ニューラルネットワークで学習させたものも過去にあったが、accuracyは25%

  • 一手前の指し手を特徴量に加える場合もあるが、我々は加えていない

  • 理由として、(1)一手前に置いた石の近くを候補にしたがる傾向が出やすくなる, (2)デーム理論では一手前の手には影響を受けないとされており、情報として不要だと判断

  • また、一手前の指し手を考慮することはパフォーマンスの低下につながるという研究も出ている


Approach


Data Representation


  • 盤面は19*19

  • コウの制約をルール(simple-ko constraints)として適用

  • 評価に関しては、盤面を7チャネルに分割

  • 分割は自由度の数、または空のスペースを基準に行う

  • channel1-3はプレイヤー石の数が1~3,またはそれ以上の自由度があるもの

  • channel4-6は敵プレイヤーと同数の石があるもの

  • channel7はsimple-ko制約のみが課されるもの(?)


Basic Archtecture


  • 各畳み込み層にzero埋めを施す

  • これにより、深い層のoutputのサイズを小さくする

  • 経験的に活性化関数としてrectifier functionを使った方がtanh functionを使うより性能がよい


Addidional Design Features


Edge Encoding


  • 0埋めすると1層目で空のグリッドなのか、境界なのかがわからない

  • それを回避するために1チャネル増やして8チャネルとする

  • 第8チャネルの周辺では空を1で表す


Masked Training


  • コウなどで石が置けない部分をマスクする

  • top layerのoutputsでzeroにする


Other


  • 左右反転して同じ配置の場合、weightも同じになる

  • そこに拘束条件をつける(weight tying)


Experiments

詳細割愛


  • 2つのgameデータの棋譜を使用

  • GoGoD(Games of Go on Disk), KGS Go

  • データセットは各81,000、86,000games分の棋譜

  • vanilla gradient descentが効果的であることを発見した

  • l2, l1正則化項はつけていない

  • dropoutは行っていない

  • accuracyは40%を超えている


Future Work


  • もっと層の数やデータを増やして学習

  • パラメタ調整を細微に行う