Tensorflowユーザから見た
Alpha(Go)Zero, Ponanza
Katsuki Ohto 2018/1/29 @TFUG #7
本日の目標
•事前知識なしで最強になった Alpha (Go) Zero
のメカニズムを伝える
•ゲームAIの流れと今後の未来についてイメージ
を膨らむようにする
自己紹介
• 大渡 勝己(おおとかつき)
• 経歴
~ 2014.3 大学生 (認知神経科学)
~ 2015.3 無職
~ 2015.8 事務職員
~ 2017.9 大学院生 (ゲームAI)
2017.10 ~
HEROZ株式会社 エンジニア
Machine Learning 15 minutes!発表時
http://ainow.ai/2017/08/07/119456/
自己紹介
• 「強い」ゲームAIについて研究
• 大富豪、カーリング
(2年前のTensorflow勉強会で少し話しました)
などのAIを作成
• 大富豪で「空場」(流れた後の自分から出せる場)
でパスをした方がいい局面を解析する論文を出しました
自己紹介
• 12種類のゲームのAI大会に参加
• 2017.6~2017.11
将棋 Ponanzaのディープラーニング部分を担当
• 現在は囲碁ウォーズ「棋神」を開発
本日の内容
• ゲームAIという分野の過去、今 (AlphaZeroなど)、未来について
• 自分が参加したPonanzaでTensorflowを使ってトライしたこと
• Ponanza … 2017春にプロ棋士のトップ(佐藤名人)を倒したプログラム
• AlphaZero ... 知識なしで囲碁、将棋、チェスで世界一になった
Alpha Zeroの衝撃と技術的失業 (山本一成さんより)
ゲームAIのこれまで(プログラマ視点)
• 過去の強いプログラムの成り立ち
• 「人手でのルールの記述」「機械学習モデル」がどちらも重要だった
• ルールの記述 … 将棋なら将棋盤、囲碁なら囲碁盤をどう実装するか
• 機械学習モデル … ある局面の勝ちやすさや最善手の予測など、ルール
から自明でないので機械学習等で構築する評価モデル
ゲームAIのこれまで(プログラマ視点)
• 「ルールの記述」が簡単ではないという例
• 将棋における右の局面(相手の手番)
と金を動かして一手詰み(勝ち)
• 全ての手を調べれば一手詰みの手が
あるかわかるが、それでは遅いので
一手詰み計算専用のアルゴリズムが
書かれている
• 金で王手のパターン、離れた飛車で王手の
パターン…などの羅列、プログラマが頑張る
現在のゲームAIの流れ
• ① DQN (2013) とその後継モデル
ルールを記述することなくニューラルネットで一人ゲームをプレイ
Human-level control through deep reinforcement learning (Mnih et al., 2015)
現在のゲームAIの流れ
• ②AlphaGoZero, AlphaZero
ニューラルネットの最善手の予測と勝率の予測をベースに、
モンテカルロ木探索を使って予備知識や上級者の棋譜なしで0から学習
Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm
(Silver et al., 2017a, arxiv)
現在のゲームAIの流れ
• ③Libratus, DeepStack
不完全情報ゲームのポーカーにおいても人間を圧倒
両者全く違うアルゴリズムを使う (DeepStackはニューラルネットを利用)
DeepStackの
アルゴリズム
DeepStack: Expert-Level
Artificial Intelligence in
No-Limit Poker (Moravčík
et al., 2017)
現在のゲームAIの流れ
• 人間がコーディングする部分が減っている
• ニューラルネットの表現能力が勝敗を分けることが増えている
ボードゲームのニューラルネットへの入力
• 囲碁の盤面 ... 黒か白の2色 石がある場所に1、それ以外が0
= +
ボードゲームのニューラルネットへの入力
• 将棋の盤面 ... 色数が多い
持ち駒などのスカラ値は1つの色全体に1を立てるなど
= + +…
AlphaZeroの作り(ニューラルネット)
• 盤面の履歴 (8手分)を入力し、
最善手の予測 (policy)
勝率の予測 (value)
を同時に行うニューラルネット
• 複数の値を同時に出力するマルチタスク学習
Mastering the game of Go without human
knowledge (Silver et al., 2017b)
AlphaZeroの作り(モンテカルロ木探索)
• サイコロを振って最後まで
https://en.wikipedia.org/wiki
/Monte_Carlo_tree_search
(クラシックな)モンテカルロ木探索
AlphaZeroの作り(モンテカルロ木探索)
• ゲームのように閉じた環境においては、
先の状態を考えることでより質の高い行動決定ができる
Silver et al. (2017b)
AlphaGo Zeroのモンテカルロ木探索
AlphaZeroの強化学習アルゴリズム
• 前提①
AlphaZero = 「ニューラルネット」「探索(先読み)アルゴリズム」
• 前提②
ニューラルネット単体でもプレーしたり勝ち負けを予測したりできるが、
先読みを行うともっと強くなる
• 前提③
質の高いニューラルネットがあれば、
より質の高い先読みが行えて強くなる
AlphaZeroの強化学習アルゴリズム
• 学習手順
探索ありで
試合棋譜を作成
棋譜の手/結果から
教師あり学習で
ニューラルネットを学習
繰り返し
Silver et al. (2017b)
AlphaZeroの強化学習アルゴリズム
• 強さの向上の概念図
• まずランダムの状態での
勝ち負けを学び、それを使って
探索すれば少し強くなる
• 探索の結果の手は
ニューラルネットそのままより
強いので、それを教師とする
• 強くなれば勝ち負けの評価も
妥当になり勝率予測も精度向上
棋譜から学習
将棋PonanzaにおけるTensorflowの利用
• Ponanzaは大会出場する上位プログラムの中では
最も早くニューラルネットを実用化
(2017.5 世界コンピュータ将棋選手権での
Ponanza Chainer)
「手の予測」を行い、外部サーバで動かして通信
• その後ニューラルネット部分の担当が自分になり、
使用ライブラリがTensorflowに変更
• 勝率予測も一緒に学習 (AlphaZero と同じ)
• Ponanza側のコードも書き換えて、
C++から直接Tensorflowを呼び出す
Ponanza
Chainer のNN
Ponanza
(Tensoflow)
のNN
将棋PonanzaにおけるTensorflowの利用
• AlphaZeroとの比較 (将棋ドメイン: 利用部分)
AlphaZero Ponanza with Tensorflow
ネットワーク入力 9 x 9 x 362
(7手前までの履歴)
9 x 9 x 86
(現局面のみ)
ネットワーク構成 ResNet20ブロック(40層)?
256フィルタ
CNN に工夫を加えたもの
(PFNの方発案のアーキテクチャ)
12層 256フィルタ
学習方法 ゼロから探索ありの強化学習 過去のPonanzaの着手・評価・勝敗
1500万試合から教師あり学習
(着手の一致率 56% 弱)
製作使用リソース TPUv1 5000枚(対戦)
v2 15枚(学習)
elmo 超えまで 2h 弱
これまでさくらインターネットさんから
お借りしたCPU等 最大数十台 (対戦)
GPU1枚 (学習) 1ヶ月
将棋PonanzaにおけるTensorflowの利用
• AlphaZeroとの比較 (将棋ドメイン)
AlphaZero Ponanza with Tensorflow
利用法 ニューラルネットだけで
モンテカルロ木探索
既存の評価関数によるアンサンブル
ミニマックス系探索
対戦利用リソース TPU v2 4枚 GPU GTX-1080 1枚
(第5回将棋電王トーナメント本番)
探索速度 40,000 局面 / 秒
(=ニューラルネットの計算回数)
6,000,000 局面 / 秒
(ニューラルネットの計算は
5,000 局面 / 秒)
大人の知能と子どもの知能の融合
• 既存の探索部 (秒間 600万局面) … 理詰めで解決する
「大人の知能」
• ニューラルネット ... 計算局面数が少ないが、鋭い感性を持つ
「子供の知能」
• 大会に向けて、2つの「知能」をどう協調させるかを考えて製作した
• (子どもだけに絞った方がいいのかもしれなかったが…)
大人は慎重。子どもは素直
〜大人の知能と子どもの知能の融合〜
• 既存の探索は相対的な良し悪し
しか見ていなかったり、
慎重な評価を返したりする
• 一方ニューラルネットは
絶対評価かつ大胆に評価する
(その分ブレやポカも多い)
ニューラルネットの
予測勝率: 72 %
(既存の探索+評価関数:
深さ1で59%, 深さ32で61%)
大人はあれもこれも気になる。
子どもは大事なものが見える
〜大人の知能と子どもの知能の融合〜
• 既存の探索では、人間から見て「盤上この一手」の状態でも
丁寧に多くの手を調べていた
• ニューラルネットは手の予測もはっきり物を言う
ので、ニューラルネットの出した確率が低い手は
そもそも探索しないようにできる
ニューラルネットの
予測最前手: 2四同歩
over 99.99 %
Ponanza with Tensorflow の手法 (概略)
• Policyの確率で探索順序決定
確率の和によって探索打ち切り判定
• 探索深さが増えると打ち切り閾値を大きくする
• Valueの予測勝率と
探索の予測勝率を混ぜる
(ただし元が相対評価なら相対評価として返す)
• 探索深さが深ければそちらの重みを大きくする
95% 2%
3%
95 + 3 = 98% > 閾値
打ち切り!
探索 80 %
NN 60%
→70%
探索 < 80 %
NN 70%
→ < 75 %
Tensorflowにおける学習
• Ponanzaのコードは現在非公開ですが、NN部分で元になったコードが
自分のリポジトリにあります。
https://github.com/YuriCat/apery/tree/nn/python
• ビッグデータからの学習…NNの入力画像を保存すると物凄い容量になる
①棋譜など最小の情報を持った状態で保存
②C++側に入力画像行列作成コードを書く
③pybind11でpythonから学習時に呼び出して入力画像・教師値を得る
のが良かった
現在のゲームAI開発事情
• 計算資源をどう確保するかの問題
• 有志の計算資源を募ることが行われている
平岡拓也氏の Apery (将棋)
https://github.com/HiraokaTakuya/apery-machine-learning
Gian-Carlo Pascutto 氏の LeelaZero (囲碁)
https://github.com/gcp/leela-zero
未来の(ゲームAI)アーティストに向けて
・勝ち負け以外の評価による学習 (好奇心だけで行動するマリオ) など、
人間のように「未知の事柄を知るためにどう行動するか」という側面から研究が進
んでいる
Curiosity-driven
Exploration by
Self-supervised
Prediction (Pathak
et al., 2017)
未来の(ゲームAI)アーティストに向けて
・「ゲームのAIを書く」ことがゲームAI開発のメインではなくなっていく
・できる限り人間はコードを書かない姿勢
(「詰みを絶対に逃したくない」など書かざるを得ない場合もあるが、
細かい最適化に留まらずに常に広い視野を持って欲しい)
・複数のドメインを扱う強化学習(マルチタスク)
・自然言語処理、画像や動画の自由な入力(マルチモーダル)
未来の(ゲームAI)アーティストに向けて
シンギュラリティを起こしましょう!
Alpha Zeroの衝撃と技術的失業 より

Tensorflowユーザから見た Alpha(Go)Zero, Ponanza (TFUG #7)