TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

AlphaGo Zeroの論文を読む その2(ネットワーク構成)

前回に続いてAlphaGo Zeroの論文についてです。

ネットワーク構成

入力特徴

  • 19×19の2値画像を17枚
  • 8枚は現在のプレイヤーの石の座標を示す2値画像、8手分
  • 8枚は相手のプレイヤーの石の座標を示す2値画像、8手分
  • 1枚は現在のプレイヤーの石の色を示す全て0か1の画像

履歴を必要とするのは囲碁にはコウがあるため。
現在のプレイヤーの石の色が必要なのは囲碁にはコミがあるため。

以前(Fan Huiバージョン)のAlphaGoでは入力特徴に、呼吸点やシチョウなどの囲碁の知識を含む48の特徴を使用していましたが、石の座標情報のみになっています。

ニューラルネットワーク構成

入力層

1層の畳み込み層で以下の構成

  1. 畳み込み 3×3のフィルター、256
  2. Batch Normalization
  3. 活性化関数

以前のAlphaGoは5×5のフィルター192でしたが、より数が増えています。
Batch Normalizationも以前はありませんでした。
活性化関数には、具体的に何の関数を使っているか記載がありません。
以前はReLUだったので、同じと思われます。

中間層

19個、または39個の残差ブロック
1つの残差ブロックは以下の構成

  1. 畳み込み 3×3のフィルター、256
  2. Batch Normalization
  3. 活性化関数
  4. 畳み込み 3×3のフィルター、256
  5. Batch Normalization
  6. 残差入力の接続
  7. 活性化関数

図示すると以下のようになります。
f:id:TadaoYamaoka:20171021091056p:plain

オーソドックスなResNetのブロックです。
残差ブロックの数は、はじめは19個で自己対局を行い、最終的に39個としています。

出力層

ネットワークを分岐して、PolicyとValueを出力します。
Policyの出力は以下の構成

  1. 畳み込み 1×1のフィルター、2
  2. Batch Normalization
  3. 活性化関数
  4. 19×19(打ち石の座標)+1(pass)を示す362ノードの全結合層でlogit probabilitiesを出力

logit probabilitiesはsoftmax関数の入力となる値で、softmax関数の出力が打ち手の確率を示します。

以前のAlphaGoでは1×1のフィルター1の出力をlogit probabilitiesとしていましたが、全結合層が加わっています。

Valueの出力は以下の構成

  1. 畳み込み 1×1のフィルター、1
  2. Batch Normalization
  3. 活性化関数
  4. 256ノードの全結合層
  5. 活性化関数
  6. tanh関数で勝率を示すスカラー値を出力する1ノードの全結合層

Batch Normalization以外は、以前のAlphaGoと同じ構成です。

将棋AIに応用する際の考察

入力特徴について

将棋AIに応用する際には、将棋には駒の取り合いや千日手があるので、入力特徴の履歴の情報は有用と思われます。
現在のプレイヤーの石の色の情報は、将棋にはコミがないので不要かもしれません。

ニューラルネットワーク構成について

ResNetが将棋でも有用であることは、以前の実験で確かめています。
私の実験では5ブロックで192のフィルターでしたが、39層で256のフィルターはかなりの規模です。
試そうと思うと学習時間は相当かかるので覚悟が必要そうです。

PolicyとValueの同時出力について

将棋でもマルチタスク学習が有用であることも以前の実験で確かめています。

出力層の構成について

Policyの出力に全結合層が加わっています。
この構成にした理由は書かれていませんが、この方が精度が上がるということでしょうか。
将棋でも有用か試してみようと思います。
1×1のフィルターを出力としていると、移動できない座標もラベルとする必要がありましたが、全結合を使うなら、出力ラベル数は減らせるのでその効果もでるかもしれません。

Valueには以前のAlphaGoと同様にtanh関数が使われていますが、コンピュータ将棋では評価関数の出力にsigmoidを使う方が主流ですね。
sigmoidでも大差はないと思っていますが、tanh関数を使った方がよい理由とかあるのでしょうか。
分かる人がいらっしゃたら教えてもらえると助かります。

続く