Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,901 views

Published on

AlphaGo ( アルファ碁, アルファご ) の中身はどうなってるのかを調べるために色々ブログや記事などを読んでいたのですが、当時は難しいアルゴリズム説明がドンとくる不親切な情報しか見あたらなかったです。私みたいにゲームAIの背景知識が無い人にはとても理解出来ない。何を説明しているのか全く分からなかったので、結局AlphaGoの論文を直接読むことになりました。そこで分かったのが、これはゲームAIの背景知識が無いと理解しにくいことでした。AlphaGoがモンテカルロ木検索とDLを使って強くなったとは理解しましたが、これって何がすごいのかが全く伝わらないのです。

突然AlphaGoのアルゴリズムをドンと説明されても困る。そもそもなぜAlphaGoが今の形になったのか、従来のアルゴリズムと何が違うのか、性能はどれくらい上がったのかが全く見えなかったです。
結局私はゲームAIの歴史を含め、他の木探索系のアルゴリズムを調査しその違いを比較することになりました。
その背景知識を得た後にやっとなぜAlphaGoが今の形になったのか、どこがすごいのかが理解できたのです。

本資料の狙い

この資料は私のように、ゲームAIに関する背景知識は無いがAlphaGoの中身が知りたい人のための資料です。単純にアルゴリズムを説明するのではなく、古典的なゲームAIに比べAlphaGoはどう発展してきたのか、何がすごいのかを説明していきます。
この資料に書いている古典的ゲームAIは全てのゲームAIではないですが、AlphaGoの発展の方向性を理解するには十分だと思っています。本資料ではディープラーニングや強化学習の詳細については触れませんが、その詳細が知りたい人はAlphaGoの論文を直接読んだ方が絶対に分かりやすいと思いますので、論文をお勧めします。

本資料の目次

AlphaGo簡略紹介
ゲームAIの基層知識紹介
ゲーム木
完全ゲーム木
部分ゲーム木
効果的にゲーム木を計算するためのポイント
ミニマックス法 (1949年)
アルファ・ベータ法 (1958年)
古典的アルゴリズムの成功と失敗
チェスでの成功:Deep Blue、1997年
囲碁での失敗
モンテカルロ木検索 (1993年)
囲碁での進歩
AlphaGoのベースになるアルゴリズム
Deep Learningの登場 (2012年)
AlphaGoの登場 (2016年)
モンテカルロ木検索の改良
Policy Network
Value Network
Rollout Policy
強化学習
AlphaGoのアーキテクチャ
性能比較

まとめ

本資料は2016年の論文をベースにしてますが、現在のAlphaGoは仕組みがかなり変わったらしいですね。2017年末新しい論文が出るらしいですがすごく楽しみです。その論文が出る前に、この資料がたくさんの人の役に立てればと思っています。

ちなみに、技術職ではない私のかわいい妻に見せたら、何の問題もなく理解してくれたので、背景知識が無くても全然読めると思います。

では、また新しい論文がでるまで、みなさんお元気に!

Published in: Technology
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2u6xbL5 ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ♥♥♥ http://bit.ly/2u6xbL5 ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/qtsf9ud } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/qtsf9ud } ......................................................................................................................... Download Full doc Ebook here { https://tinyurl.com/qtsf9ud } ......................................................................................................................... Download PDF EBOOK here { https://tinyurl.com/qtsf9ud } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/qtsf9ud } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/qtsf9ud } ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ...................................ALL FOR EBOOKS................................................. Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×