Slide 1

Slide 1 text

Ridge-i インターンシッププログラム 人工知能・機械学習(AI/ML)基礎講座 第3話 第1次AIブーム 推論と探索 (1) Chief Research Officer 牛久 祥孝

Slide 2

Slide 2 text

1.1.2. 推論と探索

Slide 3

Slide 3 text

推論=(ほぼ)探索 • 推論と探索は基本的に同じ • 本小節では、探索として以下の項目について解説する – 深さ優先探索 – 幅優先探索 – 最適探索 – 最良優先探索 – A*探索 – 動的計画法 – ミニマックス法 – アルファ・ベータ法 – モンテカルロ木探索

Slide 4

Slide 4 text

迷路 • からまでロボットが到達 するような問題を考える

Slide 5

Slide 5 text

迷路 • からまでロボットが到達 するような問題を考える • 迷路の次の位置にマークを おく – 分岐 – 行き止まり

Slide 6

Slide 6 text

迷路 • からまでロボットが到達 するような問題を考える • 迷路の次の位置にマークを おく – 分岐 – 行き止まり • 行き来可能なマーク同士を 線で結ぶ

Slide 7

Slide 7 text

迷路の探索=グラフの探索 エッジ ノード

Slide 8

Slide 8 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 9

Slide 9 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 10

Slide 10 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 11

Slide 11 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 12

Slide 12 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 13

Slide 13 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 14

Slide 14 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 15

Slide 15 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 16

Slide 16 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 17

Slide 17 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト

Slide 18

Slide 18 text

深さ優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの先頭に追加 オープンリスト クローズドリスト:辿った順番

Slide 19

Slide 19 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 20

Slide 20 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 21

Slide 21 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 22

Slide 22 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 23

Slide 23 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 24

Slide 24 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 25

Slide 25 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 26

Slide 26 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 27

Slide 27 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 28

Slide 28 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 29

Slide 29 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 30

Slide 30 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 31

Slide 31 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト

Slide 32

Slide 32 text

幅優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト:辿った順番

Slide 33

Slide 33 text

深さ優先探索と幅優先探索 • 深さ優先探索 オープンリストに記憶されるノード数が比較的少なくて済むので、 大きなグラフの探索に適している  仮にスタートの近くにゴールがあっても、深さを優先して無駄な探索を 続ける可能性がある • 幅優先探索 初期ノードに近いところから探索するので、スタートから近いゴールを 発見するのに有効  グラフが横に大きいとオープンリストに多くのメモリが必要 • 共通すること – 未知の迷路でも動くが、無駄な行き来が多い

Slide 34

Slide 34 text

無駄な行き来を減らすには • 最短何歩でゴールまでつけるか • • ()スタートから現在地までの最適経路での歩数(コスト)の総和 • ℎ() 現在地からゴールまでの最適経路での歩数(コスト)の総和 • � , � ℎ () それらの推定値 1歩 4歩 2歩 2歩 4歩 6歩 2歩 3歩 1歩 2歩

Slide 35

Slide 35 text

最適探索 初期化:オープンリストにを入れる(コスト0) クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストに追加し、から 今のノードまでのコストの総和 � ()が小さ い順に並べる

Slide 36

Slide 36 text

現在地からゴールまでの最適経路の歩数ℎ()? まだ探索中なのに最適な 経路なんてわからない! 別の情報があれば 推定はできるかも? 例:座標が分かれば 最小歩数は出る ℎ(2 )=2+3=5

Slide 37

Slide 37 text

最良優先探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの追加し、今の ノードからまでのコストの総和� ℎ()が小 さい順に並べる

Slide 38

Slide 38 text

A*探索 初期化:オープンリストにを入れる クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3. 今のノードから辿れてリストにないノード をすべてオープンリストの追加し、今の ノードからまでのコストの総和 + � ℎ()が小さい順に並べる