SlideShare a Scribd company logo
1 of 126
AlphaGo解説
李 碩根
1
AlphaGo簡略紹介
• GoogleのDeepMindが開発
• 2016年、囲碁の伝説イ・セドルに勝利
• 2017年、囲碁の世界ランク1位コジェに勝利
• 囲碁で人間を超えた初めての人工知能
2
AlphaGo簡略紹介
• Game Tree (ゲーム木)を探索するMonte Carlo Tree
Search (MCTS) を、Convolution Neural Network
(CNN)と強化学習を利用し、大幅に強化したアルゴリ
ズム。
説明を分かりやすくするとともに、
なぜAlphaGoが今の形になったかを説明するため、
ゲームAIの発達を順に説明していきます。
3
作者紹介
• 名前:李 碩根
• 会社:フューチャーアーキテクト
• 部署:データ分析チーム
• 役割:AI / 機械学習エンジニア
4
目次①
• AlphaGo簡略紹介
• ゲームAIの基層知識紹介
– ゲーム木
– 完全ゲーム木
– 部分ゲーム木
• 効果的にゲーム木を計算するためのポイント
• ミニマックス法 (1949年)
• アルファ・ベータ法 (1958年)
• 古典的アルゴリズムの成功と失敗
– チェスでの成功:Deep Blue、1997年
– 囲碁での失敗
5
目次②
• モンテカルロ木検索 (1993年)
– 囲碁での進歩
– AlphaGoのベースになるアルゴリズム
• Deep Learningの登場 (2012年)
• AlphaGoの登場 (2016年)
– モンテカルロ木検索の改良
– Policy Network
– Value Network
– Rollout Policy
– 強化学習
– AlphaGoのアーキテクチャ
– 性能比較
6
こんな人におすすめ
• ゲームAIに関する背景知識は無いがAlphaGoの中
身が知りたい人のための資料です。
• 単純にアルゴリズムを説明するのではなく、古典的
なゲームAIに比べAlphaGoはどう発展してきたのか、
何がすごいのかを説明していきます。
7
本資料の特徴
• 説明を分かりやすくするために、○×ゲームをベー
スに説明を進めます。
• 本資料で紹介するゲームAIの発達の歴史は
AlphaGoの説明のためのものであり、綿密なゲーム
AIの歴史ではございません。
8
本資料の特徴
9
赤い色の吹き出しは従来の
アルゴリズムの説明になり
ます。
緑色の吹き出しはAlphaGoの
説明になります。
水色の吹き出しは定義にな
ります。
ゲームAIのベース
Game Tree (ゲーム木)
図:http://www.owlnet.rice.edu/~comp210/02fall/Labs/Lab15/
ゲームAIの基層になる部分。
AIはゲーム木を参照し、一番適切な戦略
を立てていく
10
Wikipedia: ゲームの盤面を有向グラフ
のノードで、手をエッジで表したもの
絶対に負けないゲームAIに必要なもの
Complete Game Tree (完全ゲーム木)
11
Wikipedia: ゲームの最初から指せる全
ての手を含んだゲーム木
これがあればゲームの全てのパターン
が分かるため、絶対負けない戦略を立
てることが可能になる。
つまり、絶対負けないゲームAIが出来る。
しかし、完全ゲーム木は膨大なため、現
実的に計算不可能
完全ゲーム木を計算しようとすると…
• 可能なゲームの流れの数
– チェス:35^80 = 3E+123個
– 囲碁:250^150 = ???
• チェスの一つのゲーム流れ計算に1E-10秒がかかる
とする。
• チェスの完全ゲーム木計算に必要な時間
– 3E+113 (秒) = 9.5E+105 (年)
これでは宇宙が終わるまで
計算が終わらない
12
ゲームをプレイするAIを作る
Partial Game Tree (部分ゲーム木)
完全ゲーム木は計算不可能のため、部
分ゲーム木を使って戦略を立てるしか
ない。
つまり、ゲームAIの強さはどれだけ効率
よく質が良い部分ゲーム木を手に入れ
るかである。
13
Wikipedia:一般に現在の盤面から指せ
る手を時間内に探索できるぶんだけ含
んだもの
ゲームAIの目的
• より効率よく、より質が良い部分ゲーム木を計算す
ること
14
効果的に部分ゲーム木を
計算するためのポイント
• 無駄な計算を減らす
• 良い手を重点的に計算する
この目標を達成するためゲームAIは
進化していく
15
• 相手は自分の利益を最小にする(Min)ために行動す
る
• 自分の利益を最大にする(Max)ために行動する
• 上記の二つを前提にし、前提とマッチしない手は計
算はしない
計算を減らすための努力1(1949年)
Minimax Search (ミニマックス法)
○×ゲームを使って説明する
16
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
これが現在の盤面。
次の×の手を予測したい。
17
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
可能な×の全ての手。
相手(×)が勝つには?
つまり、自分(○)の利益を最小
にするには?
18
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
これを選ぶしかない
(なぜ分かる?)
つまり、残りの三つは考えなく
て良い
19
〇 〇 ×
× × 〇
〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
次は×のターン
可能な○の全ての手。
自分(○)が勝つには?
つまり、○の利益を最大にする
には?
20
〇 〇 ×
× × 〇
〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
次は×のターン
これを選ぶしかない
(なぜ分かる?)
つまり、残りの二つは考えなく
て良い
21
〇 〇 ×
× × 〇
〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
次は×のターン
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 ×
次は〇のターン
可能な×の全ての手。
相手(×)が勝つには?
つまり、自分(○)の利益を最小
にするには?
22
〇 〇 ×
× × 〇
〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
次は×のターン
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 ×
次は〇のターン
左を選ぶ
どっちでも同じ
(なぜ分かる?)
23
〇 〇 ×
× × 〇
〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
次は×のターン
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 ×
次は〇のターン
〇 〇 ×
× × 〇
〇 × 〇
ドロー
最終的に残る部分ゲーム木。
でも残る疑問点が…
24
〇 〇 ×
× × 〇
〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
× ×
〇 〇
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
次は×のターン
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 ×
次は〇のターン
〇 〇 ×
× × 〇
〇 × 〇
ドロー
これを選ぶしかない
(なぜ分かる?)
これを選ぶしかない
(なぜ分かる?)
どっちでも同じ
(なぜ分かる?)
25
〇 〇 ×
×
〇 ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇
〇 〇 ×
×
〇 ×
〇 〇 ×
×
〇
自分:〇
相手:×次は×のターン
次は〇のターン
各ノードが良いか悪いかを評価
するには、結局最後まで計算す
るしかない!
〇 〇 ×
○ × ×
〇
〇 〇 ×
○ ×
〇 ×
〇 〇 ×
○ ×
〇 ×
26
計算を減らすための努力1(1949年)
Minimax Search (ミニマックス法)
この時点では何が良い手か分からない
疑問点
1. 次の手が良いか悪いかを分かるに
は結局最後まで計算するしかない
2. 深くなればなるほど計算数が爆発的
に増える
27
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
解決策
1. Evaluation Function(静的評価関数)
で各ノードの評価値を計算する
2. 計算する深さに制限をかける
静的評価関数は、評価したいノー
ドを現在の盤面の情報だけで評
価すること。現在の盤面から動か
ないから「静的」評価になる!
28
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
自分:〇
相手:×
現在の盤面。次の×の手は?
計算深さ制限は「2」!
覚えてね!
29
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
自分:〇
相手:×
×の全ての手
計算深さ制限は「2」なので、
もう一層入る!
30
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
自分:〇
相手:×
2層目の手に「静的評価関数」を利
用し、現在の盤面の情報だけで評
価する
3 02 …
31
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
自分:〇
相手:×
自分(○)は自分の利益を最大にす
る手を選ぶ。今回は最大の利益が
3だとする
3 02 …
32
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
自分:〇
相手:×
すると、一番左のノードの評価値
は「3」になる
3 02 …
3
この作業を全ての×の手について
計算する。
33
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
3 02
3
自分:〇
相手:×
4 9 5 6 8 9 5 4
×は○の利益を最初にするため、
一番評価値が小さい「3」を選ぶ
34
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
3
自分:〇
相手:×
予想される次の×の手
次の○の手を予測する
と?
35
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
3
自分:〇
相手:×
全ての○の手
深さ制限が2なのでもう
一層入ると
36
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
3
自分:〇
相手:×
静的評価関数で評価
37
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
計算する深さ:2
5 87
3
自分:〇
相手:×
×は○の利益を最小にするため、
一番評価値が小さい「5」を選ぶ
38
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
計算する深さ:2
5 87
3
自分:〇
相手:×
5
すると、一番左のノードの評価値
は「5」になる この作業を全ての○の手について
計算する。
39
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
5 87
3
自分:〇
相手:×
5 9 3
自分(○)は自分の利益を最大にす
る手を選ぶ。今回は最大の利益が
9だとする
40
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
3
自分:〇
相手:×
9
予想される次の○の手
41
Minimax Search (ミニマックス法)
Static Evaluation (静的評価)
残る疑問点
1. Evaluation Function(静的評価関数)は
どう決める?
2. まだ計算数が多い
42
• Minmax Searchを行う時に、明らかに計算する必要
がない場合の数は計算をしない。
計算を減らすための努力2(1958年)
Alpha-Beta Pruning (アルファ・ベータ法)
○×ゲームを使って説明する
43
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
次は×のターン
〇 〇 ×
〇 ×
〇 〇 ×
〇 ×
〇 〇 ×
〇 ×
〇 〇 ×
〇 ×
〇 〇 ×
〇 ×
今からは盤面そのものを表すの
ではなく、評価値で表す
44
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4
次は×のターン
×は○の利益を最初にするため、
一番評価値が小さい「3」を選ぶ
45
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4
次は×のターン 3
46
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4 4 2
次は×のターン 3
×は最小の評価値を選ぶため、「2」
が出た瞬間、このノードの評価値は
必ず3より小さくなることが分かる。
つまり、3より小さい2が出た瞬間、こ
れ以上計算する必要が無くなる
47
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4 4 2 5 6 9 7
次は×のターン 3 2
全てのノードが「3」より大き
いため、全部計算する必要
がある。
×は○の利益を最初にするため、
一番評価値が小さい「5」を選ぶ
48
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4 4 2 5 6 9 7
次は×のターン 3 2 5
49
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4 4 2 5 6 9 7 7 3
次は×のターン 3 2 5
×は最小の評価値を選ぶため、「3」
が出た瞬間、このノードの評価値は
必ず5より小さくなることが分かる。
つまり、5より小さい3が出た瞬間、こ
れ以上計算する必要が無くなる
50
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4 4 2 5 6 9 7 7 3 4
次は×のターン 3 2 5 3
×は最小の評価値を選ぶため、「4」
が出た瞬間、このノードの評価値は
必ず5より小さくなることが分かる。
つまり、5より小さい4が出た瞬間、こ
れ以上計算する必要が無くなる
51
〇 〇 ×
×
〇
〇 〇 ×
〇 ×
〇 〇 ×
× 〇
〇 〇 ×
×
〇
〇 〇 ×
×
自分:〇
相手:×
次は〇のターン
次の手を計算したい
計算する深さ:2
〇 〇 ×
×
〇
5 3 8 4 4 2 5 6 9 7 7 3 4
次は×のターン 3 2 5 3 4
このノードが一番評価
値が高いため、選ばれ
る
52
• Alpha-beta pruning
• 手作りのEvaluation Function(静的評価関数)
• スーパーコンピュータの登場
チェスでの成功
Deep Blue、1997年
Deep BlueはAlpha-Beta pruningを
使って人間を超えることになる。
しかし、その中身はチカラワザだった。
まだ人工知能と呼ぶには…
53
• 場合の数の桁数が違う
– チェス:35^80 = 3E+123
– 囲碁:250^150 = ???
• 手作りのEvaluation Function(静的評価関数)
– チェスより複雑な囲碁では手作りが難しい
• スーパーパソコン
– パソコンの性能に頼るのも限界がある
囲碁での失敗
チェスで成功したアルゴリズムを囲碁
に適応できない。なぜ?
囲碁はゲーム流れの数がチェスとは
桁数が違う!
Alpha-Beta Pruningで出来ない…
違う方法はないのか?
54
• 囲碁の場合、場合の数が多すぎるため、静的評価関数を用
いたツリー検索方法では効率よく検索できない。
• そもそも、静的評価関数を手作りするのも難しい
• その代わりに、いっぱいランダムなシミュレーションを行って、
その中で一番良いと思われる手を選ぼう!(モンテカルロ法)
Monte Carlo Tree Search
モンテカルロ木探索の活用、1993年
ランダムでシミュレーションする
ため静的評価関数が必要ない
モンテカルロ木検索は
「AlphaGo」のベースになるアル
ゴリズム!
55
Monte Carlo Tree Search (モンテカルロ木探索)
Simulation
1. 静的評価関数は使用しない
2. ゲームが終わるまでランダムで次の
手を選択し、その結果をUCB1関数を
利用して評価する(シミュレーション)
勝ち:1 ドロー:0
負け:-1
勝ち:1
負け:-1
ドロー:0
負け:-1
56
Monte Carlo Tree Search (モンテカルロ木探索)
詳細
MCTSのステップ
1. Selection
2. Expansion
3. Rollout
4. backup
このアルゴリズムを
ループさせる
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値
が最大の子ノード
現在ノード
の訪問カウン
ト == 0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
57
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
v:評価値
n:訪問カウント(何回評価
値をアップデートしたか)
N:親ノードの訪問カウント
ノードS0 の評価値は0.6で
訪問カウントは1だと想定
58
〇 ×
×
現在ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
現在のゲーム盤面を現在
ノードに設定する
59
〇 ×
×
現在ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
現在ノード(S0)が葉ノードで、
訪問カウント(n0)が0ではない。
なので、新しい子ノードを追加
この例では二つの子ノー
ドのみを追加する
60
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
子ノード:𝑆1
𝑣1 = 0
𝑛1 = 0
子ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
新しい子ノード追加後。
全ての評価値(v)と訪問カウン
ト(n)が0に初期化されている
61
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
現在ノード:𝑆1
𝑣1 = 0
𝑛1 = 0
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
現在ノードを新しい子ノードに
設定。左から選択していく
62
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
現在ノード:𝑆1
𝑣1 = 0
𝑛1 = 0
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
〇 〇 ×
×
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
〇 × ×
〇 ×
シミュレーション結果:
〇の勝
𝑣 𝑡 = 1
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
現在ノードからRollout(シミュレー
ション)を行い、どれくらい良い手
かを評価する。
シミュレーションはゲームが終わ
るまでランダムで次の手を選択
する。ゲームの結果が現在ノー
ドの評価値になる
63
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
現在ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
〇 〇 ×
×
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
〇 × ×
〇 ×
シミュレーション結果:
〇の勝
𝑣 𝑡 = 1
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
シミュレーション結果を反映する。
現在ノードはもちろん、その親
ノードまで更新されることに注目。
親ノードの訪問カウントが2に
なった!
64
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
現在ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
〇 〇 ×
×
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
〇 × ×
〇 ×
シミュレーション結果:
〇の勝
𝑣 𝑡 = 1
ループ1回目
次の〇の手を
計算
1回目のループ終了
二回目のループを始めよう
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation 65
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
66
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
以前と同じく、現在のゲーム盤面
を現在ノードに設定する
67
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
現在ノードは葉ノードで
はない。
現在ノードの子ノードのUCB1関
数値を計算し、その数値が最大
の子ノードを現在ノードに設定す
る。
68
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
𝑈𝐶𝐵1 𝑆1 = 𝑣1 + 2
ln 𝑁
𝑛1
= 1 + 2
ln 2
1
𝑈𝐶𝐵1 𝑆2 = 𝑣2 + 2
ln 𝑁
𝑛2
= 0 + 2
ln 2
0
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
各子ノードのUCB1関数値
の計算
訪問カウントが少ない方
がUCB1関数値が大きくな
ることが多い。
つまり、なるべく新しいノー
ドを現在ノードに設定して
いく 69
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
𝑈𝐶𝐵1 𝑆1 = 2.67 𝑈𝐶𝐵1 𝑆2 = ∞
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
訪問カウントが0だとその
ノードを現在ノードに設定、
評価する
70
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
現在ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
𝑈𝐶𝐵1 𝑆1 = 2.67 𝑈𝐶𝐵1 𝑆2 = ∞
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
このように、なるべく新しい
ノードを選択することで広い
検索が可能になる
71
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
現在ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
訪問カウントが0のため、
Rollout(シミュレーション)を
通じてそのノードの評価を
行う
72
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 1.6
𝑛0 = 2
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
現在ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
〇 ×
〇 ×
×
〇 ×
〇 ×
× 〇
〇 ×
〇 ×
× × 〇
シミュレーション結果:
〇の負け
𝑣 𝑡 = −1
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
現在ノードのシミュレーショ
ンの結果、負けてしまった
73
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
現在ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ2回目
次の〇の手を
計算
〇 ×
〇 ×
×
〇 ×
〇 ×
× 〇
〇 ×
〇 ×
× × 〇
シミュレーション結果:
〇の負け
𝑣 𝑡 = −1
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
シミュレーション結果を現在
ノードから一番上の親たち
に反映していく
74
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
現在ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ2回目
次の〇の手を
計算
〇 ×
〇 ×
×
〇 ×
〇 ×
× 〇
〇 ×
〇 ×
× × 〇
シミュレーション結果:
〇の負け
𝑣 𝑡 = −1
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
2回目のループ終了
3回目のループを始めよう
75
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
76
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
以前と同じく、現在のゲーム盤面
を現在ノードに設定する
77
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
現在ノードは葉ノードで
はない。
現在ノードの子ノードのUCB1関
数値を計算し、その数値が最大
の子ノードを現在ノードに設定す
る。
78
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
現在ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
𝑈𝐶𝐵1 𝑆1 = 𝑣1 + 2
ln 𝑁
𝑛1
= 1 + 2
ln 3
1
𝑈𝐶𝐵1 𝑆2 = 𝑣2 + 2
ln 𝑁
𝑛2
= −1 + 2
ln 3
1
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
各子ノードのUCB1関数値
の計算
79
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
現在ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
𝑈𝐶𝐵1 𝑆1 = 2.67 𝑈𝐶𝐵1 𝑆2 = 1.10
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
S1のUCB1値が大きいた
め、S1を現在ノードに設
定
80
現在ノード(S0)が葉ノードで、
訪問カウント(n0)が0ではない。
なので、新しい子ノードを追加
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
現在ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
この例では二つの子ノー
ドのみを追加する
81
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
現在ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
〇 〇 ×
× ×
〇 〇 ×
×
×
子ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
子ノード:𝑆3
𝑣3 = 0
𝑛3 = 0
新しい子ノード追加後。
全ての評価値(v)と訪問カウン
ト(n)が0に初期化されている
82
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
現在ノード:𝑆3
𝑣3 = 0
𝑛3 = 0
現在ノードを新しい子ノードに
設定。左から選択していく
83
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 3
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 1
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
現在ノード:𝑆3
𝑣3 = 0
𝑛3 = 0
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 × ×
シミュレーション結果:
ドロー
𝑣 𝑡 = 0
現在ノードのシミュレーショ
ンの結果、ドロー
84
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 4
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 2
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
現在ノード:𝑆3
𝑣3 = 0
𝑛3 = 1
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 × ×
シミュレーション結果:
ドロー
𝑣 𝑡 = 0
シミュレーション結果を現在
ノードから一番上の親たち
に反映していく
85
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 4
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 2
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
ループ3回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = UCB1関数値が最大の子
ノード
現在ノード
の訪問カウント ==
0?
新しい子ノードたちを追加
現在ノード =
新しい子ノード
Rollout
(シミュレーション)
yes
yes
no
no
Backpropagation
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
現在ノード:𝑆3
𝑣3 = 0
𝑛3 = 1
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 × ×
シミュレーション結果:
ドロー
𝑣 𝑡 = 0
3回目のループ終了
ここでタイムアウト!
今までの計算結果を元に次の手を選ぶ!
86
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 4
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 2
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
選択
次の〇の手を
計算
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
ノード:𝑆3
𝑣3 = 0
𝑛3 = 1
S0の子ノードから、vが大き
い方を選択。
今回はS1を選ぶこと!
これでMCTSの説明終了。
でも、ここに置くと負けるの
では??
87
• 計算する手の候補の質が悪い
– もっと良い手を見逃す場合がある
• シミュレーション結果がいまいち
– ランダムでシミュレーションするため、実際のゲーム結果にならない
良い次の手を予測するための努力1
MCTSの改善
88
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 4
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 2
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
選択
次の〇の手を
計算
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
ノード:𝑆3
𝑣3 = 0
𝑛3 = 1
ここに置いたら負ける
〇 ×
×
〇
これがベストチョイス。
しかし、この手は候補に
無い!
89
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 4
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 2
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
対策
次の〇の手を
計算
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
ノード:𝑆3
𝑣3 = 0
𝑛3 = 1
計算候補の質を上げる
色んなルールや手作り
ロジックで計算候補の
質を上げた
90
• 計算する手の候補の質が悪い
– もっと良い手を見逃す場合がある
• シミュレーション結果がいまいち
– ランダムでシミュレーションするため、実際のゲーム結果にならない
良い次の手を予測するための努力1
MCTSの改善
91
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
現在ノード:𝑆1
𝑣1 = 0
𝑛1 = 0
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
〇 〇 ×
×
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
〇 × ×
〇 ×
シミュレーション結果:
〇の勝
𝑣 𝑡 = 1
シミュレーション
の質
本当のゲームな
ら負けてるはず
予測される正しい結果。
シミュレーションの質が悪く、正
しい評価が出来ない!
〇 〇 ×
×
×
色んな方法でシミュレー
ションの質を上げた
92
• 計算する候補の質を上げる
• シミュレーションの質を上げる
• その結果、2012年、AIは囲碁の五段のレベルまで進歩する。
MCTSの発達
囲碁の五段のレベルまでたどり着く(2012年)
93
• Convolution Neural network (CNN)
• 今までは違うレベルでイメージを判別するアルゴリズム
– 例:写真を見てこれは猫、これは犬など判別できる
良い次の手を予測するための努力2
Deep Learningの登場(2012年)
Deep Learning(DL)をMCTSに使う
ともっと強力なAIが作れるかも?
94
• DLを使って計算する候補の質を上げる
• DLを使ってシミュレーションの質を上げる
AlphaGoの登場(2016年)
今までのアルゴリズムの総合体
実際にDLを使ってみました。
それがAlphaGo!
95
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 4
𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2
ln 𝑁
𝑛𝑖
ノード:𝑆1
𝑣1 = 1
𝑛1 = 2
ノード:𝑆2
𝑣2 = −1
𝑛2 = 1
対策
次の〇の手を
計算
〇 〇 ×
× ×
〇 〇 ×
×
×
ノード:𝑆4
𝑣4 = 0
𝑛4 = 0
ノード:𝑆3
𝑣3 = 0
𝑛3 = 1
計算候補の質を上げる
Policy Networkで予測性能
を上げる
96
AlphaGo 詳細
Policy Networkとは
• 13層のConvolution Neural Network
• 現状の石の配置から人の次の手を予測する
– 57.0%予測率
• KGS Go サーバーから人がプレイした3千万個の配
置データから学習(教師あり学習)
– 石の配置を含めた48種類のデータ利用
• 3ms 計算時間
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
90% 5%
人ならこの手を90%の確率
で選ぶよと教えてくれる
97
AlphaGo 詳細
Policy Network
①ゲームの盤面を見て
②次の候補を推薦。
一番確率が高い手が濃い
緑に表現されている
比較的確率が低い次の手
98
• DLを使って計算する候補の質を上げる
• DLを使ってシミュレーションの質を上げる
AlphaGoの登場(2016年)
今までのアルゴリズムの総合体
99
〇 〇 ×
×
〇 ×
〇 ×
〇 ×
×
ノード:𝑆0
𝑣0 = 0.6
𝑛0 = 1
現在ノード:𝑆1
𝑣1 = 0
𝑛1 = 0
ノード:𝑆2
𝑣2 = 0
𝑛2 = 0
〇 〇 ×
×
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
〇 × ×
〇 ×
シミュレーション結果:
〇の勝
𝑣 𝑡 = 1
対策
本当のゲームな
ら負けてるはず
Rollout Policyを利用し
シミュレーション質を上
げる
Value Networkを利用し、
勝つ学率を計算する
100
AlphaGo 詳細
Rollout Policy
• Linear Softmax Regression
• 現状の石の配置から人の次の手を予測する
– 予測率:24.2%
• KGS Go サーバーから人がプレイした3千万個の配
置データから学習(教師あり学習)
– 石の配置を簡単化したデータ利用
• 2 μs 計算時間
– 予測性能はPolicy Networkより落ちるが、早い計算が可
能 〇 〇 ×
×
〇 〇 ×
× ×
〇 〇 ×
× ×
〇
〇 〇 ×
× ×
〇 ×
〇 〇 ×
〇 × ×
〇 ×
シミュレーションを早く計算す
るため、予測性能より計算速
度重視した。
Policy Networkより予測性能
は落ちるが、速度は速い
101
AlphaGo 詳細
Value Network
• 13層のConvolution Neural Network
– Policy Networkと同様
• 現状の石の配置から勝つ確率を予測する
• KGS Go サーバーから人がプレイした3千万個の配
置データから学習(教師あり学習)
– 石の配置を含めた48種類のデータ利用
〇 ×
×
5%Policy NetworkやRollout
Networkは次の手を予測す
るが、Value Networkは盤面
の「勝つ学率」を計算する
102
AlphaGo 詳細
Value Network
①現在の盤面
の情報から
②勝つ確率を計
算する
Policy Networkと
の違いに注目
103
AlphaGo
詳細
MCTSのステップ
1. Selection
2. Expansion
3. Rollout
4. Backup
このアルゴリズムを
ループさせる
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーショ
ン、Value Network(CNN)、
Policy Network(CNN)の結
果を総合的に見て(Q + u)決
める
現在ノード
の訪問カウン
ト == 0?
Policy Network (CNN)で新し
い子ノードたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
104
赤いところがAlphaGoで
変わったポイント
〇 ×
×
ノード:𝑆0
𝑄0 = 0.1
𝑛0 = 1
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
ノードS0 の評価値は0.1で
訪問カウントは1だと想定
Q:評価値
n:訪問カウント
105
〇 ×
×
現在ノード:𝑆0
𝑄0 = 0.1
𝑛0 = 1
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
現在のゲーム盤面を現在
ノードに設定する
106
〇 ×
×
現在ノード:𝑆0
𝑄0 = 0.1
𝑛0 = 1
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
現在ノード(S0)が葉ノードで、
訪問カウント(n0)が0ではない。
なので、新しい子ノードを追加
この例では二つの子ノードのみ
を追加する
107
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
現在ノード:𝑆0
𝑄0 = 0.1
𝑛0 = 1
子ノード:𝑆1
𝑄1 = 0
𝑛1 = 0
子ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
Policy Networkで候補の質
を上げる
人なら90%の確率でここ
を選ぶよ
人なら5%の確率でここ
を選ぶよ
108
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.1
𝑛0 = 1
現在ノード:𝑆1
𝑄1 = 0
𝑛1 = 0
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
現在ノードを新しい子ノードに設
定。確率が高いノードを選択
109
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.1
𝑛0 = 1
現在ノード:𝑆1
𝑄1 = 0
𝑛1 = 0
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
〇 ×
×
〇
〇 ×
× ×
〇
〇 ×
× × 〇
〇
〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 × ×
シミュレーション結果:
ドロー
𝑧𝑡 = 0
勝つ確率:20%
Rollout Policyを利用し
シミュレーション質を上
げる
Value Networkで現在ノード
の勝利確率を計算する
𝑄 𝑠, 𝑎 =
1
𝑁 𝑠, 𝑎
𝑖=1
𝑛
1 𝑠, 𝑎, 𝑖 𝑉(𝑠 𝐿
𝑖
)
訪問カウントとQは反比例、
Vはシミュレーション結果と
Value Networkの勝つ確率
を利用している。
110
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
現在ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
〇 ×
×
〇
〇 ×
× ×
〇
〇 ×
× × 〇
〇
〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 × ×
シミュレーション結果:
ドロー
𝑧𝑡 = 0
勝つ確率:20%
Qを計算するために、Value Network
の勝つ確率、Rollout Policyのシミュ
レーション結果を利用する。Q値は
訪問カウントと反比例するため、訪
問カウントが上がるとQは小さくなる
𝑄 𝑠, 𝑎 =
1
𝑁 𝑠, 𝑎
𝑖=1
𝑛
1 𝑠, 𝑎, 𝑖 𝑉(𝑠 𝐿
𝑖
)
111
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
現在ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ1回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
〇 ×
×
〇
〇 ×
× ×
〇
〇 ×
× × 〇
〇
〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 ×
〇 〇 ×
× × 〇
〇 × ×
シミュレーション結果:
ドロー
𝑧𝑡 = 0
勝つ確率:20%
1回目のループ終了
2回目のループを始めよう
Policy Network
Rollout Policy
Value Network
𝑄 𝑠, 𝑎 =
1
𝑁 𝑠, 𝑎
𝑖=1
𝑛
1 𝑠, 𝑎, 𝑖 𝑉(𝑠 𝐿
𝑖
)
112
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
113
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
現在ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
現在のゲーム盤面を現在
ノードに設定する
114
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
現在ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
𝑢 𝑠, 𝑎 ∝
𝑃 𝑠, 𝑎
1 + 𝑁(𝑠, 𝑎)
現在ノードは葉ノードで
はない。
現在ノードの子ノードのQ+u値を
計算し、その数値が最大の子
ノードを現在ノードに設定する。
PはPolicy Networkで予測され
た次の手(各ノード)の確率、N
は訪問カウント
115
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
現在ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
𝑢 𝑠, 𝑎 ∝
𝑃 𝑠, 𝑎
1 + 𝑁(𝑠, 𝑎)
この数値は適当な数値…
𝑄1 + u1 ∝ 0.2 +
0.9
1 + n1
= 0.65 𝑄2 + u2 ∝ 0 +
0.05
1 + n2
= 0.05
Q+uが最大のS1を
現在ノードに設定
116
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
現在ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
𝑢 𝑠, 𝑎 ∝
𝑃 𝑠, 𝑎
1 + 𝑁(𝑠, 𝑎)
ここでタイムアウト!
今までの計算結果を元に
次の手を選択する
117
〇 ×
×
〇
〇 〇 ×
×
〇 ×
×
ノード:𝑆0
𝑄0 = 0.25
𝑛0 = 2
ノード:𝑆1
𝑄1 = 0.2
𝑛1 = 1
ノード:𝑆2
𝑄2 = 0
𝑛2 = 0
ループ2回目
次の〇の手を
計算
Start
現在ノード = 𝑆0
現在ノード
==葉ノード?
現在ノード = シミュレーション、Value
Network(CNN) Policy Network(CNN)の
結果を総合的に見て(Q + u)決める
現在ノード
の訪問カウント ==
0?
Policy Network (CNN)で新しい子ノー
ドたちを追加
現在ノード =
確率が高いノード
Rollout policy &
Value Network
yes
yes
no
no
Backpropagation
90% 5%
𝑢 𝑠, 𝑎 ∝
𝑃 𝑠, 𝑎
1 + 𝑁(𝑠, 𝑎)
AlphaGoは訪問カウントが一
番多い手を選択する。
これで説明終了!
でも、強化学習は??
118
AlphaGo 人を超える
Policy Network & Value Network
• 現状の石の配置から一番良い手を計算する
– Policy Network
• 現状の石の配置から勝つ確率を計算する
– Value Network
• 自分自身でプレイし、そのデータで学習させる
– 強化学習(Policy gradient method)
• 人が考えられない手をプレイするように
119
①人間のプレイデータを利用
しRollout policyとPolicy
Networkを作る
②AlphaGo vs AlphaGo対決で
新しいデータを作成
③新しいデータでPolicy Network
とValue Networkを作成
120
自分自身と戦って、人よりはる
かに強くなる。
APV – MCTS
(asynchronous policy and value MCTS algorithm)
Master
Machine
MCTS 管理
Worker
CPU
Rollout Policy
Worker
GPU
Policy Network
Value Network
Single Machine
• 40 Search Threads
• 48 CPU
• 8 GPU
Distributed
• 40 Search Threads
• 1202 CPU
• 176 GPU
121
122
従来の囲碁AI
ヨーロッパ囲碁
チャンピオン
AlphaGo
各囲碁AIの強さを
囲碁の段系にて表示
色んな囲碁AIとのトーナメント結果グ
ラフ。(2015年?)
従来の囲碁AIは5段レベルだが、
AlphaGoはヨーロッパのチャンプを超
えていることが分かる。現在の
AlphaGoは当グラフよりはるかに強く
なっている。
123
Rollout Policy, Value Network, Policy
Networkの組み合わせでどう性能が変わ
るかを見せるグラフ。
三つの部品を組み合わせることで一番の
性能を出していることが分かる。
124
スケーラビリティを見せる
グラフ。GPUとスレッドが増
えると性能が上がるのが
見える。
まとめ
• AlphaGoとはGame Tree (ゲーム木)を探索する
Monte Carlo Tree Search (MCTS) のSelection &
Evaluationフェーズを、Convolution Neural Network
(CNN)と強化学習を利用し、大幅に強化したアルゴリ
ズム。
• この資料のAlphaGoは2015年に公開されたもの。最
近はまた違うらしい。(2017年末に新しい論文が出る
らしい)
• 何か間違った情報があったらコメントしてください
125
参考文献
• AlphaGo論文
– https://www.nature.com/nature/journal/v529/n7
587/full/nature16961.html
• 使用した図
– http://www.owlnet.rice.edu/~comp210/02fall/La
bs/Lab15/
• 従来のアルゴリズム
– Wikipedia 及び AlphaGo論文のReference
126

More Related Content

What's hot

[DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions [DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions Deep Learning JP
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?Fumihiko Takahashi
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)Kota Matsui
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方joisino
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoderSho Tatsuno
 
SHAP値の考え方を理解する(木構造編)
SHAP値の考え方を理解する(木構造編)SHAP値の考え方を理解する(木構造編)
SHAP値の考え方を理解する(木構造編)Kazuyuki Wakasugi
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係についてDeep Learning JP
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知Chika Inoshita
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化gree_tech
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
 
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language SupervisionDeep Learning JP
 
三次元点群を取り扱うニューラルネットワークのサーベイ
三次元点群を取り扱うニューラルネットワークのサーベイ三次元点群を取り扱うニューラルネットワークのサーベイ
三次元点群を取り扱うニューラルネットワークのサーベイNaoya Chiba
 
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Yoshitaka Ushiku
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!TransformerArithmer Inc.
 
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual FeaturesARISE analytics
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜Jun Okumura
 
Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩Hiroto Honda
 
Graph convolution (スペクトルアプローチ)
Graph convolution (スペクトルアプローチ)Graph convolution (スペクトルアプローチ)
Graph convolution (スペクトルアプローチ)yukihiro domae
 

What's hot (20)

[DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions [DL輪読会]Understanding Black-box Predictions via Influence Functions
[DL輪読会]Understanding Black-box Predictions via Influence Functions
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
 
SHAP値の考え方を理解する(木構造編)
SHAP値の考え方を理解する(木構造編)SHAP値の考え方を理解する(木構造編)
SHAP値の考え方を理解する(木構造編)
 
ResNetの仕組み
ResNetの仕組みResNetの仕組み
ResNetの仕組み
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
 
三次元点群を取り扱うニューラルネットワークのサーベイ
三次元点群を取り扱うニューラルネットワークのサーベイ三次元点群を取り扱うニューラルネットワークのサーベイ
三次元点群を取り扱うニューラルネットワークのサーベイ
 
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜
 
Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩
 
Graph convolution (スペクトルアプローチ)
Graph convolution (スペクトルアプローチ)Graph convolution (スペクトルアプローチ)
Graph convolution (スペクトルアプローチ)
 

Viewers also liked

AlphaGo Zero 解説
AlphaGo Zero 解説AlphaGo Zero 解説
AlphaGo Zero 解説suckgeun lee
 
ニューラルネットワークの仕組みを学ぶ 20170623
ニューラルネットワークの仕組みを学ぶ 20170623ニューラルネットワークの仕組みを学ぶ 20170623
ニューラルネットワークの仕組みを学ぶ 20170623Hiroki Takahashi
 
Atlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのか
Atlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのかAtlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのか
Atlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのかアトラシアン株式会社
 
Dots deep learning部_20161221
Dots deep learning部_20161221Dots deep learning部_20161221
Dots deep learning部_20161221陽平 山口
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」fukuoka.ex
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」fukuoka.ex
 
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較Ryota Suzuki
 
[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video Generation
[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video Generation[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video Generation
[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video GenerationDeep Learning JP
 
Kerasで深層学習を実践する
Kerasで深層学習を実践するKerasで深層学習を実践する
Kerasで深層学習を実践するKazuaki Tanida
 
Tokyo webmining 2017-10-28
Tokyo webmining 2017-10-28Tokyo webmining 2017-10-28
Tokyo webmining 2017-10-28Kimikazu Kato
 
Pythonを使った機械学習の学習
Pythonを使った機械学習の学習Pythonを使った機械学習の学習
Pythonを使った機械学習の学習Kimikazu Kato
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017Carol Smith
 

Viewers also liked (15)

AlphaGo Zero 解説
AlphaGo Zero 解説AlphaGo Zero 解説
AlphaGo Zero 解説
 
AlphaGoのしくみ
AlphaGoのしくみAlphaGoのしくみ
AlphaGoのしくみ
 
ニューラルネットワークの仕組みを学ぶ 20170623
ニューラルネットワークの仕組みを学ぶ 20170623ニューラルネットワークの仕組みを学ぶ 20170623
ニューラルネットワークの仕組みを学ぶ 20170623
 
Atlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのか
Atlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのかAtlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのか
Atlassian Japan Forum 2017 The Information Ageの現実 なぜ組織が構造改革を進めなければならないのか
 
Dots deep learning部_20161221
Dots deep learning部_20161221Dots deep learning部_20161221
Dots deep learning部_20161221
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
 
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較
 
[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video Generation
[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video Generation[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video Generation
[DL輪読会] MoCoGAN: Decomposing Motion and Content for Video Generation
 
Kerasで深層学習を実践する
Kerasで深層学習を実践するKerasで深層学習を実践する
Kerasで深層学習を実践する
 
Pycon2017
Pycon2017Pycon2017
Pycon2017
 
Tokyo webmining 2017-10-28
Tokyo webmining 2017-10-28Tokyo webmining 2017-10-28
Tokyo webmining 2017-10-28
 
Pythonを使った機械学習の学習
Pythonを使った機械学習の学習Pythonを使った機械学習の学習
Pythonを使った機械学習の学習
 
10 facts about jobs in the future
10 facts about jobs in the future10 facts about jobs in the future
10 facts about jobs in the future
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
 

Similar to 古典的ゲームAIを用いたAlphaGo解説

ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用Shogo Takeuchi
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
組合せゲーム理論の基本
組合せゲーム理論の基本組合せゲーム理論の基本
組合せゲーム理論の基本Tomohiro Nakayoshi
 
DeNA TechCon2018 ゲーム体験を支えるための強化学習
DeNA TechCon2018 ゲーム体験を支えるための強化学習DeNA TechCon2018 ゲーム体験を支えるための強化学習
DeNA TechCon2018 ゲーム体験を支えるための強化学習Jun Okumura
 
GSGL 2012 さくらソフト
GSGL 2012 さくらソフトGSGL 2012 さくらソフト
GSGL 2012 さくらソフトsakurasoft
 
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]DeNA
 

Similar to 古典的ゲームAIを用いたAlphaGo解説 (6)

ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用ゲーム木探索技術とコンピュータ将棋への応用
ゲーム木探索技術とコンピュータ将棋への応用
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
組合せゲーム理論の基本
組合せゲーム理論の基本組合せゲーム理論の基本
組合せゲーム理論の基本
 
DeNA TechCon2018 ゲーム体験を支えるための強化学習
DeNA TechCon2018 ゲーム体験を支えるための強化学習DeNA TechCon2018 ゲーム体験を支えるための強化学習
DeNA TechCon2018 ゲーム体験を支えるための強化学習
 
GSGL 2012 さくらソフト
GSGL 2012 さくらソフトGSGL 2012 さくらソフト
GSGL 2012 さくらソフト
 
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

古典的ゲームAIを用いたAlphaGo解説

  • 2. AlphaGo簡略紹介 • GoogleのDeepMindが開発 • 2016年、囲碁の伝説イ・セドルに勝利 • 2017年、囲碁の世界ランク1位コジェに勝利 • 囲碁で人間を超えた初めての人工知能 2
  • 3. AlphaGo簡略紹介 • Game Tree (ゲーム木)を探索するMonte Carlo Tree Search (MCTS) を、Convolution Neural Network (CNN)と強化学習を利用し、大幅に強化したアルゴリ ズム。 説明を分かりやすくするとともに、 なぜAlphaGoが今の形になったかを説明するため、 ゲームAIの発達を順に説明していきます。 3
  • 4. 作者紹介 • 名前:李 碩根 • 会社:フューチャーアーキテクト • 部署:データ分析チーム • 役割:AI / 機械学習エンジニア 4
  • 5. 目次① • AlphaGo簡略紹介 • ゲームAIの基層知識紹介 – ゲーム木 – 完全ゲーム木 – 部分ゲーム木 • 効果的にゲーム木を計算するためのポイント • ミニマックス法 (1949年) • アルファ・ベータ法 (1958年) • 古典的アルゴリズムの成功と失敗 – チェスでの成功:Deep Blue、1997年 – 囲碁での失敗 5
  • 6. 目次② • モンテカルロ木検索 (1993年) – 囲碁での進歩 – AlphaGoのベースになるアルゴリズム • Deep Learningの登場 (2012年) • AlphaGoの登場 (2016年) – モンテカルロ木検索の改良 – Policy Network – Value Network – Rollout Policy – 強化学習 – AlphaGoのアーキテクチャ – 性能比較 6
  • 11. 絶対に負けないゲームAIに必要なもの Complete Game Tree (完全ゲーム木) 11 Wikipedia: ゲームの最初から指せる全 ての手を含んだゲーム木 これがあればゲームの全てのパターン が分かるため、絶対負けない戦略を立 てることが可能になる。 つまり、絶対負けないゲームAIが出来る。 しかし、完全ゲーム木は膨大なため、現 実的に計算不可能
  • 12. 完全ゲーム木を計算しようとすると… • 可能なゲームの流れの数 – チェス:35^80 = 3E+123個 – 囲碁:250^150 = ??? • チェスの一つのゲーム流れ計算に1E-10秒がかかる とする。 • チェスの完全ゲーム木計算に必要な時間 – 3E+113 (秒) = 9.5E+105 (年) これでは宇宙が終わるまで 計算が終わらない 12
  • 13. ゲームをプレイするAIを作る Partial Game Tree (部分ゲーム木) 完全ゲーム木は計算不可能のため、部 分ゲーム木を使って戦略を立てるしか ない。 つまり、ゲームAIの強さはどれだけ効率 よく質が良い部分ゲーム木を手に入れ るかである。 13 Wikipedia:一般に現在の盤面から指せ る手を時間内に探索できるぶんだけ含 んだもの
  • 16. • 相手は自分の利益を最小にする(Min)ために行動す る • 自分の利益を最大にする(Max)ために行動する • 上記の二つを前提にし、前提とマッチしない手は計 算はしない 計算を減らすための努力1(1949年) Minimax Search (ミニマックス法) ○×ゲームを使って説明する 16
  • 18. 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 可能な×の全ての手。 相手(×)が勝つには? つまり、自分(○)の利益を最小 にするには? 18
  • 19. 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン これを選ぶしかない (なぜ分かる?) つまり、残りの三つは考えなく て良い 19
  • 20. 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 次は×のターン 可能な○の全ての手。 自分(○)が勝つには? つまり、○の利益を最大にする には? 20
  • 21. 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 次は×のターン これを選ぶしかない (なぜ分かる?) つまり、残りの二つは考えなく て良い 21
  • 22. 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 次は×のターン 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × 次は〇のターン 可能な×の全ての手。 相手(×)が勝つには? つまり、自分(○)の利益を最小 にするには? 22
  • 23. 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 次は×のターン 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × 次は〇のターン 左を選ぶ どっちでも同じ (なぜ分かる?) 23
  • 24. 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 次は×のターン 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × 次は〇のターン 〇 〇 × × × 〇 〇 × 〇 ドロー 最終的に残る部分ゲーム木。 でも残る疑問点が… 24
  • 25. 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × × 〇 〇 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 次は×のターン 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × 次は〇のターン 〇 〇 × × × 〇 〇 × 〇 ドロー これを選ぶしかない (なぜ分かる?) これを選ぶしかない (なぜ分かる?) どっちでも同じ (なぜ分かる?) 25
  • 26. 〇 〇 × × 〇 × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 〇 × × 〇 × 〇 〇 × × 〇 自分:〇 相手:×次は×のターン 次は〇のターン 各ノードが良いか悪いかを評価 するには、結局最後まで計算す るしかない! 〇 〇 × ○ × × 〇 〇 〇 × ○ × 〇 × 〇 〇 × ○ × 〇 × 26
  • 27. 計算を減らすための努力1(1949年) Minimax Search (ミニマックス法) この時点では何が良い手か分からない 疑問点 1. 次の手が良いか悪いかを分かるに は結局最後まで計算するしかない 2. 深くなればなるほど計算数が爆発的 に増える 27
  • 28. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 解決策 1. Evaluation Function(静的評価関数) で各ノードの評価値を計算する 2. 計算する深さに制限をかける 静的評価関数は、評価したいノー ドを現在の盤面の情報だけで評 価すること。現在の盤面から動か ないから「静的」評価になる! 28
  • 29. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 自分:〇 相手:× 現在の盤面。次の×の手は? 計算深さ制限は「2」! 覚えてね! 29
  • 30. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 自分:〇 相手:× ×の全ての手 計算深さ制限は「2」なので、 もう一層入る! 30
  • 31. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 自分:〇 相手:× 2層目の手に「静的評価関数」を利 用し、現在の盤面の情報だけで評 価する 3 02 … 31
  • 32. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 自分:〇 相手:× 自分(○)は自分の利益を最大にす る手を選ぶ。今回は最大の利益が 3だとする 3 02 … 32
  • 33. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 自分:〇 相手:× すると、一番左のノードの評価値 は「3」になる 3 02 … 3 この作業を全ての×の手について 計算する。 33
  • 34. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 3 02 3 自分:〇 相手:× 4 9 5 6 8 9 5 4 ×は○の利益を最初にするため、 一番評価値が小さい「3」を選ぶ 34
  • 35. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 3 自分:〇 相手:× 予想される次の×の手 次の○の手を予測する と? 35
  • 36. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 3 自分:〇 相手:× 全ての○の手 深さ制限が2なのでもう 一層入ると 36
  • 37. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 3 自分:〇 相手:× 静的評価関数で評価 37
  • 38. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 計算する深さ:2 5 87 3 自分:〇 相手:× ×は○の利益を最小にするため、 一番評価値が小さい「5」を選ぶ 38
  • 39. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 計算する深さ:2 5 87 3 自分:〇 相手:× 5 すると、一番左のノードの評価値 は「5」になる この作業を全ての○の手について 計算する。 39
  • 40. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 5 87 3 自分:〇 相手:× 5 9 3 自分(○)は自分の利益を最大にす る手を選ぶ。今回は最大の利益が 9だとする 40
  • 41. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 3 自分:〇 相手:× 9 予想される次の○の手 41
  • 42. Minimax Search (ミニマックス法) Static Evaluation (静的評価) 残る疑問点 1. Evaluation Function(静的評価関数)は どう決める? 2. まだ計算数が多い 42
  • 44. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 次は×のターン 〇 〇 × 〇 × 〇 〇 × 〇 × 〇 〇 × 〇 × 〇 〇 × 〇 × 〇 〇 × 〇 × 今からは盤面そのものを表すの ではなく、評価値で表す 44
  • 45. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 次は×のターン ×は○の利益を最初にするため、 一番評価値が小さい「3」を選ぶ 45
  • 46. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 次は×のターン 3 46
  • 47. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 4 2 次は×のターン 3 ×は最小の評価値を選ぶため、「2」 が出た瞬間、このノードの評価値は 必ず3より小さくなることが分かる。 つまり、3より小さい2が出た瞬間、こ れ以上計算する必要が無くなる 47
  • 48. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 4 2 5 6 9 7 次は×のターン 3 2 全てのノードが「3」より大き いため、全部計算する必要 がある。 ×は○の利益を最初にするため、 一番評価値が小さい「5」を選ぶ 48
  • 49. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 4 2 5 6 9 7 次は×のターン 3 2 5 49
  • 50. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 4 2 5 6 9 7 7 3 次は×のターン 3 2 5 ×は最小の評価値を選ぶため、「3」 が出た瞬間、このノードの評価値は 必ず5より小さくなることが分かる。 つまり、5より小さい3が出た瞬間、こ れ以上計算する必要が無くなる 50
  • 51. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 4 2 5 6 9 7 7 3 4 次は×のターン 3 2 5 3 ×は最小の評価値を選ぶため、「4」 が出た瞬間、このノードの評価値は 必ず5より小さくなることが分かる。 つまり、5より小さい4が出た瞬間、こ れ以上計算する必要が無くなる 51
  • 52. 〇 〇 × × 〇 〇 〇 × 〇 × 〇 〇 × × 〇 〇 〇 × × 〇 〇 〇 × × 自分:〇 相手:× 次は〇のターン 次の手を計算したい 計算する深さ:2 〇 〇 × × 〇 5 3 8 4 4 2 5 6 9 7 7 3 4 次は×のターン 3 2 5 3 4 このノードが一番評価 値が高いため、選ばれ る 52
  • 53. • Alpha-beta pruning • 手作りのEvaluation Function(静的評価関数) • スーパーコンピュータの登場 チェスでの成功 Deep Blue、1997年 Deep BlueはAlpha-Beta pruningを 使って人間を超えることになる。 しかし、その中身はチカラワザだった。 まだ人工知能と呼ぶには… 53
  • 54. • 場合の数の桁数が違う – チェス:35^80 = 3E+123 – 囲碁:250^150 = ??? • 手作りのEvaluation Function(静的評価関数) – チェスより複雑な囲碁では手作りが難しい • スーパーパソコン – パソコンの性能に頼るのも限界がある 囲碁での失敗 チェスで成功したアルゴリズムを囲碁 に適応できない。なぜ? 囲碁はゲーム流れの数がチェスとは 桁数が違う! Alpha-Beta Pruningで出来ない… 違う方法はないのか? 54
  • 55. • 囲碁の場合、場合の数が多すぎるため、静的評価関数を用 いたツリー検索方法では効率よく検索できない。 • そもそも、静的評価関数を手作りするのも難しい • その代わりに、いっぱいランダムなシミュレーションを行って、 その中で一番良いと思われる手を選ぼう!(モンテカルロ法) Monte Carlo Tree Search モンテカルロ木探索の活用、1993年 ランダムでシミュレーションする ため静的評価関数が必要ない モンテカルロ木検索は 「AlphaGo」のベースになるアル ゴリズム! 55
  • 56. Monte Carlo Tree Search (モンテカルロ木探索) Simulation 1. 静的評価関数は使用しない 2. ゲームが終わるまでランダムで次の 手を選択し、その結果をUCB1関数を 利用して評価する(シミュレーション) 勝ち:1 ドロー:0 負け:-1 勝ち:1 負け:-1 ドロー:0 負け:-1 56
  • 57. Monte Carlo Tree Search (モンテカルロ木探索) 詳細 MCTSのステップ 1. Selection 2. Expansion 3. Rollout 4. backup このアルゴリズムを ループさせる Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値 が最大の子ノード 現在ノード の訪問カウン ト == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 57
  • 58. 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation v:評価値 n:訪問カウント(何回評価 値をアップデートしたか) N:親ノードの訪問カウント ノードS0 の評価値は0.6で 訪問カウントは1だと想定 58
  • 59. 〇 × × 現在ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 現在のゲーム盤面を現在 ノードに設定する 59
  • 60. 〇 × × 現在ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 現在ノード(S0)が葉ノードで、 訪問カウント(n0)が0ではない。 なので、新しい子ノードを追加 この例では二つの子ノー ドのみを追加する 60
  • 61. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 子ノード:𝑆1 𝑣1 = 0 𝑛1 = 0 子ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 新しい子ノード追加後。 全ての評価値(v)と訪問カウン ト(n)が0に初期化されている 61
  • 62. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 現在ノード:𝑆1 𝑣1 = 0 𝑛1 = 0 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 現在ノードを新しい子ノードに 設定。左から選択していく 62
  • 63. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 現在ノード:𝑆1 𝑣1 = 0 𝑛1 = 0 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 〇 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × 〇 × × 〇 × シミュレーション結果: 〇の勝 𝑣 𝑡 = 1 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 現在ノードからRollout(シミュレー ション)を行い、どれくらい良い手 かを評価する。 シミュレーションはゲームが終わ るまでランダムで次の手を選択 する。ゲームの結果が現在ノー ドの評価値になる 63
  • 64. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 現在ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 〇 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × 〇 × × 〇 × シミュレーション結果: 〇の勝 𝑣 𝑡 = 1 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation シミュレーション結果を反映する。 現在ノードはもちろん、その親 ノードまで更新されることに注目。 親ノードの訪問カウントが2に なった! 64
  • 65. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 現在ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 〇 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × 〇 × × 〇 × シミュレーション結果: 〇の勝 𝑣 𝑡 = 1 ループ1回目 次の〇の手を 計算 1回目のループ終了 二回目のループを始めよう Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 65
  • 66. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 66
  • 67. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 以前と同じく、現在のゲーム盤面 を現在ノードに設定する 67
  • 68. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 現在ノードは葉ノードで はない。 現在ノードの子ノードのUCB1関 数値を計算し、その数値が最大 の子ノードを現在ノードに設定す る。 68
  • 69. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 𝑈𝐶𝐵1 𝑆1 = 𝑣1 + 2 ln 𝑁 𝑛1 = 1 + 2 ln 2 1 𝑈𝐶𝐵1 𝑆2 = 𝑣2 + 2 ln 𝑁 𝑛2 = 0 + 2 ln 2 0 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 各子ノードのUCB1関数値 の計算 訪問カウントが少ない方 がUCB1関数値が大きくな ることが多い。 つまり、なるべく新しいノー ドを現在ノードに設定して いく 69
  • 70. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 𝑈𝐶𝐵1 𝑆1 = 2.67 𝑈𝐶𝐵1 𝑆2 = ∞ 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 訪問カウントが0だとその ノードを現在ノードに設定、 評価する 70
  • 71. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 現在ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 𝑈𝐶𝐵1 𝑆1 = 2.67 𝑈𝐶𝐵1 𝑆2 = ∞ 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation このように、なるべく新しい ノードを選択することで広い 検索が可能になる 71
  • 72. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 現在ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 訪問カウントが0のため、 Rollout(シミュレーション)を 通じてそのノードの評価を 行う 72
  • 73. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 1.6 𝑛0 = 2 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 現在ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 〇 × 〇 × × 〇 × 〇 × × 〇 〇 × 〇 × × × 〇 シミュレーション結果: 〇の負け 𝑣 𝑡 = −1 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 現在ノードのシミュレーショ ンの結果、負けてしまった 73
  • 74. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 現在ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ2回目 次の〇の手を 計算 〇 × 〇 × × 〇 × 〇 × × 〇 〇 × 〇 × × × 〇 シミュレーション結果: 〇の負け 𝑣 𝑡 = −1 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation シミュレーション結果を現在 ノードから一番上の親たち に反映していく 74
  • 75. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 現在ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ2回目 次の〇の手を 計算 〇 × 〇 × × 〇 × 〇 × × 〇 〇 × 〇 × × × 〇 シミュレーション結果: 〇の負け 𝑣 𝑡 = −1 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 2回目のループ終了 3回目のループを始めよう 75
  • 76. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 76
  • 77. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 以前と同じく、現在のゲーム盤面 を現在ノードに設定する 77
  • 78. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 現在ノードは葉ノードで はない。 現在ノードの子ノードのUCB1関 数値を計算し、その数値が最大 の子ノードを現在ノードに設定す る。 78
  • 79. 〇 〇 × × 〇 × 〇 × 〇 × × 現在ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 𝑈𝐶𝐵1 𝑆1 = 𝑣1 + 2 ln 𝑁 𝑛1 = 1 + 2 ln 3 1 𝑈𝐶𝐵1 𝑆2 = 𝑣2 + 2 ln 𝑁 𝑛2 = −1 + 2 ln 3 1 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 各子ノードのUCB1関数値 の計算 79
  • 80. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 現在ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 𝑈𝐶𝐵1 𝑆1 = 2.67 𝑈𝐶𝐵1 𝑆2 = 1.10 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation S1のUCB1値が大きいた め、S1を現在ノードに設 定 80
  • 81. 現在ノード(S0)が葉ノードで、 訪問カウント(n0)が0ではない。 なので、新しい子ノードを追加 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 現在ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation この例では二つの子ノー ドのみを追加する 81
  • 82. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 現在ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 〇 〇 × × × 〇 〇 × × × 子ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 子ノード:𝑆3 𝑣3 = 0 𝑛3 = 0 新しい子ノード追加後。 全ての評価値(v)と訪問カウン ト(n)が0に初期化されている 82
  • 83. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 現在ノード:𝑆3 𝑣3 = 0 𝑛3 = 0 現在ノードを新しい子ノードに 設定。左から選択していく 83
  • 84. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 3 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 1 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 現在ノード:𝑆3 𝑣3 = 0 𝑛3 = 0 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × × シミュレーション結果: ドロー 𝑣 𝑡 = 0 現在ノードのシミュレーショ ンの結果、ドロー 84
  • 85. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 4 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 2 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 現在ノード:𝑆3 𝑣3 = 0 𝑛3 = 1 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × × シミュレーション結果: ドロー 𝑣 𝑡 = 0 シミュレーション結果を現在 ノードから一番上の親たち に反映していく 85
  • 86. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 4 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 2 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 ループ3回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = UCB1関数値が最大の子 ノード 現在ノード の訪問カウント == 0? 新しい子ノードたちを追加 現在ノード = 新しい子ノード Rollout (シミュレーション) yes yes no no Backpropagation 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 現在ノード:𝑆3 𝑣3 = 0 𝑛3 = 1 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × × シミュレーション結果: ドロー 𝑣 𝑡 = 0 3回目のループ終了 ここでタイムアウト! 今までの計算結果を元に次の手を選ぶ! 86
  • 87. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 4 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 2 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 選択 次の〇の手を 計算 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 ノード:𝑆3 𝑣3 = 0 𝑛3 = 1 S0の子ノードから、vが大き い方を選択。 今回はS1を選ぶこと! これでMCTSの説明終了。 でも、ここに置くと負けるの では?? 87
  • 88. • 計算する手の候補の質が悪い – もっと良い手を見逃す場合がある • シミュレーション結果がいまいち – ランダムでシミュレーションするため、実際のゲーム結果にならない 良い次の手を予測するための努力1 MCTSの改善 88
  • 89. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 4 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 2 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 選択 次の〇の手を 計算 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 ノード:𝑆3 𝑣3 = 0 𝑛3 = 1 ここに置いたら負ける 〇 × × 〇 これがベストチョイス。 しかし、この手は候補に 無い! 89
  • 90. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 4 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 2 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 対策 次の〇の手を 計算 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 ノード:𝑆3 𝑣3 = 0 𝑛3 = 1 計算候補の質を上げる 色んなルールや手作り ロジックで計算候補の 質を上げた 90
  • 91. • 計算する手の候補の質が悪い – もっと良い手を見逃す場合がある • シミュレーション結果がいまいち – ランダムでシミュレーションするため、実際のゲーム結果にならない 良い次の手を予測するための努力1 MCTSの改善 91
  • 92. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 現在ノード:𝑆1 𝑣1 = 0 𝑛1 = 0 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 〇 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × 〇 × × 〇 × シミュレーション結果: 〇の勝 𝑣 𝑡 = 1 シミュレーション の質 本当のゲームな ら負けてるはず 予測される正しい結果。 シミュレーションの質が悪く、正 しい評価が出来ない! 〇 〇 × × × 色んな方法でシミュレー ションの質を上げた 92
  • 93. • 計算する候補の質を上げる • シミュレーションの質を上げる • その結果、2012年、AIは囲碁の五段のレベルまで進歩する。 MCTSの発達 囲碁の五段のレベルまでたどり着く(2012年) 93
  • 94. • Convolution Neural network (CNN) • 今までは違うレベルでイメージを判別するアルゴリズム – 例:写真を見てこれは猫、これは犬など判別できる 良い次の手を予測するための努力2 Deep Learningの登場(2012年) Deep Learning(DL)をMCTSに使う ともっと強力なAIが作れるかも? 94
  • 96. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 4 𝑈𝐶𝐵1 𝑆𝑖 = 𝑣𝑖 + 2 ln 𝑁 𝑛𝑖 ノード:𝑆1 𝑣1 = 1 𝑛1 = 2 ノード:𝑆2 𝑣2 = −1 𝑛2 = 1 対策 次の〇の手を 計算 〇 〇 × × × 〇 〇 × × × ノード:𝑆4 𝑣4 = 0 𝑛4 = 0 ノード:𝑆3 𝑣3 = 0 𝑛3 = 1 計算候補の質を上げる Policy Networkで予測性能 を上げる 96
  • 97. AlphaGo 詳細 Policy Networkとは • 13層のConvolution Neural Network • 現状の石の配置から人の次の手を予測する – 57.0%予測率 • KGS Go サーバーから人がプレイした3千万個の配 置データから学習(教師あり学習) – 石の配置を含めた48種類のデータ利用 • 3ms 計算時間 〇 × × 〇 〇 〇 × × 〇 × × 90% 5% 人ならこの手を90%の確率 で選ぶよと教えてくれる 97
  • 100. 〇 〇 × × 〇 × 〇 × 〇 × × ノード:𝑆0 𝑣0 = 0.6 𝑛0 = 1 現在ノード:𝑆1 𝑣1 = 0 𝑛1 = 0 ノード:𝑆2 𝑣2 = 0 𝑛2 = 0 〇 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × 〇 × × 〇 × シミュレーション結果: 〇の勝 𝑣 𝑡 = 1 対策 本当のゲームな ら負けてるはず Rollout Policyを利用し シミュレーション質を上 げる Value Networkを利用し、 勝つ学率を計算する 100
  • 101. AlphaGo 詳細 Rollout Policy • Linear Softmax Regression • 現状の石の配置から人の次の手を予測する – 予測率:24.2% • KGS Go サーバーから人がプレイした3千万個の配 置データから学習(教師あり学習) – 石の配置を簡単化したデータ利用 • 2 μs 計算時間 – 予測性能はPolicy Networkより落ちるが、早い計算が可 能 〇 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 × 〇 〇 × 〇 × × 〇 × シミュレーションを早く計算す るため、予測性能より計算速 度重視した。 Policy Networkより予測性能 は落ちるが、速度は速い 101
  • 102. AlphaGo 詳細 Value Network • 13層のConvolution Neural Network – Policy Networkと同様 • 現状の石の配置から勝つ確率を予測する • KGS Go サーバーから人がプレイした3千万個の配 置データから学習(教師あり学習) – 石の配置を含めた48種類のデータ利用 〇 × × 5%Policy NetworkやRollout Networkは次の手を予測す るが、Value Networkは盤面 の「勝つ学率」を計算する 102
  • 104. AlphaGo 詳細 MCTSのステップ 1. Selection 2. Expansion 3. Rollout 4. Backup このアルゴリズムを ループさせる Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーショ ン、Value Network(CNN)、 Policy Network(CNN)の結 果を総合的に見て(Q + u)決 める 現在ノード の訪問カウン ト == 0? Policy Network (CNN)で新し い子ノードたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 104 赤いところがAlphaGoで 変わったポイント
  • 105. 〇 × × ノード:𝑆0 𝑄0 = 0.1 𝑛0 = 1 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation ノードS0 の評価値は0.1で 訪問カウントは1だと想定 Q:評価値 n:訪問カウント 105
  • 106. 〇 × × 現在ノード:𝑆0 𝑄0 = 0.1 𝑛0 = 1 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 現在のゲーム盤面を現在 ノードに設定する 106
  • 107. 〇 × × 現在ノード:𝑆0 𝑄0 = 0.1 𝑛0 = 1 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 現在ノード(S0)が葉ノードで、 訪問カウント(n0)が0ではない。 なので、新しい子ノードを追加 この例では二つの子ノードのみ を追加する 107
  • 108. 〇 × × 〇 〇 〇 × × 〇 × × 現在ノード:𝑆0 𝑄0 = 0.1 𝑛0 = 1 子ノード:𝑆1 𝑄1 = 0 𝑛1 = 0 子ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% Policy Networkで候補の質 を上げる 人なら90%の確率でここ を選ぶよ 人なら5%の確率でここ を選ぶよ 108
  • 109. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.1 𝑛0 = 1 現在ノード:𝑆1 𝑄1 = 0 𝑛1 = 0 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 現在ノードを新しい子ノードに設 定。確率が高いノードを選択 109
  • 110. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.1 𝑛0 = 1 現在ノード:𝑆1 𝑄1 = 0 𝑛1 = 0 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × × シミュレーション結果: ドロー 𝑧𝑡 = 0 勝つ確率:20% Rollout Policyを利用し シミュレーション質を上 げる Value Networkで現在ノード の勝利確率を計算する 𝑄 𝑠, 𝑎 = 1 𝑁 𝑠, 𝑎 𝑖=1 𝑛 1 𝑠, 𝑎, 𝑖 𝑉(𝑠 𝐿 𝑖 ) 訪問カウントとQは反比例、 Vはシミュレーション結果と Value Networkの勝つ確率 を利用している。 110
  • 111. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 現在ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × × シミュレーション結果: ドロー 𝑧𝑡 = 0 勝つ確率:20% Qを計算するために、Value Network の勝つ確率、Rollout Policyのシミュ レーション結果を利用する。Q値は 訪問カウントと反比例するため、訪 問カウントが上がるとQは小さくなる 𝑄 𝑠, 𝑎 = 1 𝑁 𝑠, 𝑎 𝑖=1 𝑛 1 𝑠, 𝑎, 𝑖 𝑉(𝑠 𝐿 𝑖 ) 111
  • 112. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 現在ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ1回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 〇 × × 〇 〇 × × × 〇 〇 × × × 〇 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × 〇 〇 × × × 〇 〇 × × シミュレーション結果: ドロー 𝑧𝑡 = 0 勝つ確率:20% 1回目のループ終了 2回目のループを始めよう Policy Network Rollout Policy Value Network 𝑄 𝑠, 𝑎 = 1 𝑁 𝑠, 𝑎 𝑖=1 𝑛 1 𝑠, 𝑎, 𝑖 𝑉(𝑠 𝐿 𝑖 ) 112
  • 113. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 113
  • 114. 〇 × × 〇 〇 〇 × × 〇 × × 現在ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 現在のゲーム盤面を現在 ノードに設定する 114
  • 115. 〇 × × 〇 〇 〇 × × 〇 × × 現在ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 𝑢 𝑠, 𝑎 ∝ 𝑃 𝑠, 𝑎 1 + 𝑁(𝑠, 𝑎) 現在ノードは葉ノードで はない。 現在ノードの子ノードのQ+u値を 計算し、その数値が最大の子 ノードを現在ノードに設定する。 PはPolicy Networkで予測され た次の手(各ノード)の確率、N は訪問カウント 115
  • 116. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 現在ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 𝑢 𝑠, 𝑎 ∝ 𝑃 𝑠, 𝑎 1 + 𝑁(𝑠, 𝑎) この数値は適当な数値… 𝑄1 + u1 ∝ 0.2 + 0.9 1 + n1 = 0.65 𝑄2 + u2 ∝ 0 + 0.05 1 + n2 = 0.05 Q+uが最大のS1を 現在ノードに設定 116
  • 117. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 現在ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 𝑢 𝑠, 𝑎 ∝ 𝑃 𝑠, 𝑎 1 + 𝑁(𝑠, 𝑎) ここでタイムアウト! 今までの計算結果を元に 次の手を選択する 117
  • 118. 〇 × × 〇 〇 〇 × × 〇 × × ノード:𝑆0 𝑄0 = 0.25 𝑛0 = 2 ノード:𝑆1 𝑄1 = 0.2 𝑛1 = 1 ノード:𝑆2 𝑄2 = 0 𝑛2 = 0 ループ2回目 次の〇の手を 計算 Start 現在ノード = 𝑆0 現在ノード ==葉ノード? 現在ノード = シミュレーション、Value Network(CNN) Policy Network(CNN)の 結果を総合的に見て(Q + u)決める 現在ノード の訪問カウント == 0? Policy Network (CNN)で新しい子ノー ドたちを追加 現在ノード = 確率が高いノード Rollout policy & Value Network yes yes no no Backpropagation 90% 5% 𝑢 𝑠, 𝑎 ∝ 𝑃 𝑠, 𝑎 1 + 𝑁(𝑠, 𝑎) AlphaGoは訪問カウントが一 番多い手を選択する。 これで説明終了! でも、強化学習は?? 118
  • 119. AlphaGo 人を超える Policy Network & Value Network • 現状の石の配置から一番良い手を計算する – Policy Network • 現状の石の配置から勝つ確率を計算する – Value Network • 自分自身でプレイし、そのデータで学習させる – 強化学習(Policy gradient method) • 人が考えられない手をプレイするように 119
  • 120. ①人間のプレイデータを利用 しRollout policyとPolicy Networkを作る ②AlphaGo vs AlphaGo対決で 新しいデータを作成 ③新しいデータでPolicy Network とValue Networkを作成 120 自分自身と戦って、人よりはる かに強くなる。
  • 121. APV – MCTS (asynchronous policy and value MCTS algorithm) Master Machine MCTS 管理 Worker CPU Rollout Policy Worker GPU Policy Network Value Network Single Machine • 40 Search Threads • 48 CPU • 8 GPU Distributed • 40 Search Threads • 1202 CPU • 176 GPU 121
  • 123. 123 Rollout Policy, Value Network, Policy Networkの組み合わせでどう性能が変わ るかを見せるグラフ。 三つの部品を組み合わせることで一番の 性能を出していることが分かる。
  • 125. まとめ • AlphaGoとはGame Tree (ゲーム木)を探索する Monte Carlo Tree Search (MCTS) のSelection & Evaluationフェーズを、Convolution Neural Network (CNN)と強化学習を利用し、大幅に強化したアルゴリ ズム。 • この資料のAlphaGoは2015年に公開されたもの。最 近はまた違うらしい。(2017年末に新しい論文が出る らしい) • 何か間違った情報があったらコメントしてください 125
  • 126. 参考文献 • AlphaGo論文 – https://www.nature.com/nature/journal/v529/n7 587/full/nature16961.html • 使用した図 – http://www.owlnet.rice.edu/~comp210/02fall/La bs/Lab15/ • 従来のアルゴリズム – Wikipedia 及び AlphaGo論文のReference 126