AlphaGo と AlphaGo Zero の自己対戦による学習部分の違い

流し読みだとちゃんと分からなかったのでメモ。

準備(AlphaGo)

  • policy network : 盤面とその特徴量を入力として受け取り、各マスに打つ確率を返すニューラルネット
  • value network: 盤面とその特徴量を入力として受け取り、その盤面での勝率を返すニューラルネット

AlphaGo ではまず policy network をプロの棋譜データから教師あり学習で事前学習させ、その後自己対戦による強化学習によってさらに改善させていく。

AlphaGo の強化学習パート

  • 教師あり学習後の policy network のパラメータ ρ0 から学習をスタートする。自己対戦の結果から policy network のパラメータは随時更新されていく。それらを ρ1,ρ2, とする。t 回目の自己対戦では、現在のパラメータ ρt と、それより以前のパラメータ ρt と対戦が行われる。
    • 実際には、毎試合ごとにパラメータを保存していたら量が膨大になって大変なので、パラメータの保存は一定反復ごとに行われる。
  • パラメータの更新は REINFORCE アルゴリズムによって行われる。パラメータの更新幅 Δρ は以下の式で表される。ここで、α は学習率、T は自己対戦が終了するまでにかかったステップ数、aisi はそれぞれ自分が i ステップ目に取った行動値と状態、pρ()ρ をパラメータとする policy network の出力値、z はその対局で自分が勝利したなら +1、敗北したなら 1 となるような報酬値、bi は分散を小さくするために用いられるベースラインと呼ばれる値。

Δρ=αi=1Tlogpρ(aisi)ρ(zbi)

  • 自己対戦中に打つ手は、policy network での確率をからそのままサンプリングしている:aipρ(si). つまり、自己対戦中には探索を行っていない。
  • REINFORCE により policy network が学習できた後は、自己対戦の棋譜データを元に value network を教師あり学習の要領で学習させる。
  • テスト時には、MCTS による探索中の評価関数としてこれらの policy network と value network を用いる。

Zero の学習方法

次に Zero について。自己対戦部分に関連する違いとして、AlphaGo では policy network と value network は別々のものだったが、Zero ではこれらが1つのネットワークに統一され、ニューラルネットの構成に変更が加えられている。したがって、AlphaGo では policy network と value network の訓練は別々の段階で行われたのに対して、Zero では同一の訓練ループ内で最適化される。

Zero でも自己対戦を行うが、以下のような点が AlphaGo と異なっている。

  • 自己対戦中にも MCTS による探索を行う。これにより、MCTS による各マスに打つ確率値のベクトル π が得られる。
  • パラメータを更新する際の更新式が変わっている。ニューラルネットの出力値を (p,v) とする。以下の要素をロス関数としてパラメータを最適化する。

考察

ちょっと自信が無いけど次のような理解で合っているだろうか?

  • AlphaGo では自己対戦中に打つ手はサンプリングによるものだったため更新時の分散が大きそうだったが、Zero では探索結果を直接教師データみたいにして p を学習しているため分散が小さそう。これにより、安定したパラメータの更新をするのに必要なサンプル数が少なくて済みそう。
  • v の学習についても、サンプリングよりも探索結果の方が判断としての質が高いので、初期の段階から確度の高い情報を教師データに用いられるというメリットがありそう。
  • AlphaGo では policy network の学習部分と探索アルゴリズム部分は分離していた(研究の流れ的にも、根本となるアルゴリズムMCTS がありその評価関数としてできるだけ質の良いものを作りたいというモチベだったように思う)が、Zero になって学習の過程に探索アルゴリズムが直接入るようになった。これにより、よりテスト時に一貫性のある方策を取れるようになってそう。

余談

「Zero は4つの TPU だけを使って学習された」と言われているのを見かけるがこれはテスト時の話であり、学習時には 64 個の GPU と 19 個の CPU パラメータサーバーが使用されたと書かれている。"""Each neural network fθi is optimized on the Google Cloud using TensorFlow, with 64 GPU workers and 19 CPU parameter servers."""