株式会社Ridge-i内の2019年度インターンシッププログラムで行った基礎講座。
第3話は人工知能第1次ブームの花形ともいえる推論/探索について。迷路を解くという課題を例に、古典的な探索アルゴリズムをさらっと紹介します。
対応する動画が https://youtu.be/8bqMeqLHL1A にアップロードされておりますので、ご興味があればご覧ください。恐れ入りますが、細かい文字も多い箇所なので、こちらのスライド必携となっております。
Ridge-i インターンシッププログラム人工知能・機械学習(AI/ML)基礎講座第3話 第1次AIブーム 推論と探索 (1)Chief Research Officer牛久 祥孝
View Slide
1.1.2. 推論と探索
推論=(ほぼ)探索• 推論と探索は基本的に同じ• 本小節では、探索として以下の項目について解説する– 深さ優先探索– 幅優先探索– 最適探索– 最良優先探索– A*探索– 動的計画法– ミニマックス法– アルファ・ベータ法– モンテカルロ木探索
迷路• からまでロボットが到達するような問題を考える
迷路• からまでロボットが到達するような問題を考える• 迷路の次の位置にマークをおく– 分岐– 行き止まり
迷路• からまでロボットが到達するような問題を考える• 迷路の次の位置にマークをおく– 分岐– 行き止まり• 行き来可能なマーク同士を線で結ぶ
迷路の探索=グラフの探索 エッジ ノード
深さ優先探索初期化:オープンリストにを入れるクローズドリストを空にするオープンリストに何かある限り以下を繰り返す1. オープンリストから先頭のノードを取り出し、クローズドリストの先頭に追加2. 今のノードがであればゴール3. 今のノードから辿れてリストにないノードをすべてオープンリストの先頭に追加オープンリストクローズドリスト
深さ優先探索初期化:オープンリストにを入れるクローズドリストを空にするオープンリストに何かある限り以下を繰り返す1. オープンリストから先頭のノードを取り出し、クローズドリストの先頭に追加2. 今のノードがであればゴール3. 今のノードから辿れてリストにないノードをすべてオープンリストの先頭に追加オープンリストクローズドリスト:辿った順番
幅優先探索 初期化:オープンリストにを入れるクローズドリストを空にするオープンリストに何かある限り以下を繰り返す1. オープンリストから先頭のノードを取り出し、クローズドリストの先頭に追加2. 今のノードがであればゴール3. 今のノードから辿れてリストにないノードをすべてオープンリストの末尾に追加オープンリストクローズドリスト
幅優先探索 初期化:オープンリストにを入れるクローズドリストを空にするオープンリストに何かある限り以下を繰り返す1. オープンリストから先頭のノードを取り出し、クローズドリストの先頭に追加2. 今のノードがであればゴール3. 今のノードから辿れてリストにないノードをすべてオープンリストの末尾に追加オープンリストクローズドリスト:辿った順番
深さ優先探索と幅優先探索• 深さ優先探索オープンリストに記憶されるノード数が比較的少なくて済むので、大きなグラフの探索に適している 仮にスタートの近くにゴールがあっても、深さを優先して無駄な探索を続ける可能性がある• 幅優先探索初期ノードに近いところから探索するので、スタートから近いゴールを発見するのに有効 グラフが横に大きいとオープンリストに多くのメモリが必要• 共通すること– 未知の迷路でも動くが、無駄な行き来が多い
無駄な行き来を減らすには• 最短何歩でゴールまでつけるか•• ()スタートから現在地までの最適経路での歩数(コスト)の総和• ℎ() 現在地からゴールまでの最適経路での歩数(コスト)の総和• � , �ℎ () それらの推定値 1歩4歩 2歩2歩 4歩 6歩2歩 3歩1歩 2歩
最適探索 初期化:オープンリストにを入れる(コスト0)クローズドリストを空にするオープンリストに何かある限り以下を繰り返す1. オープンリストから先頭のノードを取り出し、クローズドリストの先頭に追加2. 今のノードがであればゴール3. 今のノードから辿れてリストにないノードをすべてオープンリストに追加し、から今のノードまでのコストの総和 �()が小さい順に並べる
現在地からゴールまでの最適経路の歩数ℎ()? まだ探索中なのに最適な経路なんてわからない!別の情報があれば推定はできるかも?例:座標が分かれば最小歩数は出るℎ(2)=2+3=5
最良優先探索 初期化:オープンリストにを入れるクローズドリストを空にするオープンリストに何かある限り以下を繰り返す1. オープンリストから先頭のノードを取り出し、クローズドリストの先頭に追加2. 今のノードがであればゴール3. 今のノードから辿れてリストにないノードをすべてオープンリストの追加し、今のノードからまでのコストの総和�ℎ()が小さい順に並べる
A*探索 初期化:オープンリストにを入れるクローズドリストを空にするオープンリストに何かある限り以下を繰り返す1. オープンリストから先頭のノードを取り出し、クローズドリストの先頭に追加2. 今のノードがであればゴール3. 今のノードから辿れてリストにないノードをすべてオープンリストの追加し、今のノードからまでのコストの総和 +�ℎ()が小さい順に並べる