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 にアップロードされておりますので、ご興味があればご覧ください。恐れ入りますが、細かい文字も多い箇所なので、こちらのスライド必携となっております。

Yoshitaka Ushiku
PRO

May 02, 2020
Tweet

More Decks by Yoshitaka Ushiku

Other Decks in Education

Transcript

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

    View Slide

  2. 1.1.2. 推論と探索

    View Slide

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

    View Slide

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


    View Slide

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










    View Slide

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










    View Slide

  7. 迷路の探索=グラフの探索



















    エッジ ノード

    View Slide

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









    View Slide

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










    View Slide

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











    View Slide

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













    View Slide

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














    View Slide

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
















    View Slide

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
















    View Slide

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


















    View Slide

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


















    View Slide

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


















    View Slide

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



























    View Slide

  19. 幅優先探索









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

    View Slide

  20. 幅優先探索









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

    View Slide

  21. 幅優先探索









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


    View Slide

  22. 幅優先探索









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




    View Slide

  23. 幅優先探索









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





    View Slide

  24. 幅優先探索









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






    View Slide

  25. 幅優先探索









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








    View Slide

  26. 幅優先探索









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








    View Slide

  27. 幅優先探索









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








    View Slide

  28. 幅優先探索









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








    View Slide

  29. 幅優先探索









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










    View Slide

  30. 幅優先探索









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










    View Slide

  31. 幅優先探索









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










    View Slide

  32. 幅優先探索









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




















    View Slide

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

    View Slide

  34. 無駄な行き来を減らすには
    • 最短何歩でゴールまでつけるか

    • ()スタートから現在地までの最適経路での歩数(コスト)の総和
    • ℎ() 現在地からゴールまでの最適経路での歩数(コスト)の総和
    • �
    , �
    ℎ () それらの推定値



















    1歩
    4歩 2歩
    2歩 4歩 6歩
    2歩 3歩
    1歩 2歩

    View Slide

  35. 最適探索









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

    View Slide

  36. 現在地からゴールまでの最適経路の歩数ℎ()?



















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

    View Slide

  37. 最良優先探索









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

    View Slide

  38. A*探索









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

    ℎ()が小さい順に並べる

    View Slide