Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI基礎講座 第3話 第1次AIブーム 推論と探索 (1)

AI基礎講座 第3話 第1次AIブーム 推論と探索 (1)

株式会社Ridge-i内の2019年度インターンシッププログラムで行った基礎講座。

第3話は人工知能第1次ブームの花形ともいえる推論/探索について。迷路を解くという課題を例に、古典的な探索アルゴリズムをさらっと紹介します。

対応する動画が https://youtu.be/8bqMeqLHL1A にアップロードされておりますので、ご興味があればご覧ください。恐れ入りますが、細かい文字も多い箇所なので、こちらのスライド必携となっております。

Be0f86176276318b4b9775d795278f7e?s=128

Yoshitaka Ushiku

May 02, 2020
Tweet

Transcript

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

    牛久 祥孝
  2. 1.1.2. 推論と探索

  3. 推論=(ほぼ)探索 • 推論と探索は基本的に同じ • 本小節では、探索として以下の項目について解説する – 深さ優先探索 – 幅優先探索 –

    最適探索 – 最良優先探索 – A*探索 – 動的計画法 – ミニマックス法 – アルファ・ベータ法 – モンテカルロ木探索
  4. 迷路 • からまでロボットが到達 するような問題を考える

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

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

    行き止まり • 行き来可能なマーク同士を 線で結ぶ
  7. 迷路の探索=グラフの探索 エッジ ノード

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    今のノードから辿れてリストにないノード をすべてオープンリストの末尾に追加 オープンリスト クローズドリスト:辿った順番
  33. 深さ優先探索と幅優先探索 • 深さ優先探索 オープンリストに記憶されるノード数が比較的少なくて済むので、 大きなグラフの探索に適している  仮にスタートの近くにゴールがあっても、深さを優先して無駄な探索を 続ける可能性がある • 幅優先探索

    初期ノードに近いところから探索するので、スタートから近いゴールを 発見するのに有効  グラフが横に大きいとオープンリストに多くのメモリが必要 • 共通すること – 未知の迷路でも動くが、無駄な行き来が多い
  34. 無駄な行き来を減らすには • 最短何歩でゴールまでつけるか • • ()スタートから現在地までの最適経路での歩数(コスト)の総和 • ℎ() 現在地からゴールまでの最適経路での歩数(コスト)の総和 •

    � , � ℎ () それらの推定値 1歩 4歩 2歩 2歩 4歩 6歩 2歩 3歩 1歩 2歩
  35. 最適探索 初期化:オープンリストにを入れる(コスト0) クローズドリストを空にする オープンリストに何かある限り以下を繰り返す 1. オープンリストから先頭のノードを取り出 し、クローズドリストの先頭に追加 2. 今のノードがであればゴール 3.

    今のノードから辿れてリストにないノード をすべてオープンリストに追加し、から 今のノードまでのコストの総和 � ()が小さ い順に並べる
  36. 現在地からゴールまでの最適経路の歩数ℎ()? まだ探索中なのに最適な 経路なんてわからない! 別の情報があれば 推定はできるかも? 例:座標が分かれば 最小歩数は出る ℎ(2 )=2+3=5

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

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

    今のノードから辿れてリストにないノード をすべてオープンリストの追加し、今の ノードからまでのコストの総和 + � ℎ()が小さい順に並べる