【Project Bonsai】AIの知識ゼロでAIラジコンを作ってみる - 概要編
【2022/07/23 追記&宣伝】
BonsaiCarでTECK PLAYに登壇しました!
そのうちアーカイブが配信されると思いますので、興味があればご覧ください!
こんにちは、アバナード関西オフィスの寺岡です!
今回は、Project BonsaiというマイクロソフトのAIサービスを使って、
「自分で考えて動くラジコン」を作る過程を紹介していきたいと思います。
「Project Bonsai」ってなに?
上記が公式の紹介ページです。色々書かれておりますが、一言でいうと、
「AIを知らなくてもAIが作れるサービス」
です。
また、筆者自身もAIについてドのつく素人です。
なので、この記事には小難しい数式や強化学習、JupyterNotebookとかTensorFlowとか、そういったワードは一切出てきません。
なので、初学者の方、ご安心ください。
何を作るの?
Project Bonsaiで動くAIラジコン、その名も「BonsaiCar」を作ります。
上記、先日記事にさせて頂いていた内容と同じになります。
こちら、アバナード社内で実施された、ハッカソン形式のコンテストで作成したものが発端となっております。
今回は、一度作成したBonsaiCarを、更にアップグレードすることを予定しているため、その過程に沿いながら、「Project Bonsaiを用いた開発の流れ」を記事にしていこうと思います。
どうやって作っていくの?
AIを知らない人間からすると、そもそも「AIを作る」プロセスがよく分からないですよね。
Webアプリケーションなら、HTMLで画面を作成し、裏側でやり取りするWebサーバー処理を作ればよいと思いますが、「人のように考えて振る舞う機能」を作れと言われても、どういったステップを踏んで開発するのかイメージが湧きません。
筆者もド素人なため、それに関して一切解説することができません。
しかし、冒頭で触れた通り、BonsaiはAIを知らなくても開発可能なサービス。ならば、どのようにBonsaiを使ってAIを構築していくのでしょうか?
そのイメージを、簡単に解説していきます。
まずは人の頭で考えてみる
スーツを着た男の人は、白い車を運転しています。彼はせっかちなので、もうすぐ青信号に変わるのを見て、あんまり減速せずに走りたいと考えていました。
ここで一つクイズです。なぜ、「もうすぐ青信号に変わる」と分かったのでしょうか?
…はい。そうですね、交差する道路側が黄色信号になっているからです。
では、次になぜ「減速せずに走れる」と判断したのか考えてみましょう。
それは、様々な環境情報より複合的に判断しているから、と考えられます。
具体的には、
①現在の車速
②交差点までの距離
③信号機の状態
などです。
現在の車速で進んだ際、青信号に変わるまでの数秒間で、交差点までたどり着かなければ、ブレーキを踏む必要はないでしょう。
逆に車速が遅い場合は、アクセルを踏み込んで加速を始めてもよいかもしれません。
上記のように、現在の状態より判断された結果に基づき、運転手は、アクセルまたはブレーキを踏んだり、踏まなかったりという行動を行います。
また、当然ですが、踏む強さによって減速や加速の度合いも変わってきますね。
Bonsaiでやってみる
交差点に差し掛かる運転手の思考について、整理したここまでの内容を、以下に纏めてみました。
【目的】
出来る限り、減速せずに走りたい
【環境】
・信号機の状態
・現在の車速
・交差点までの距離
【行動】
・アクセルを踏むか、ブレーキを踏むか。
また、その強度(強く踏むか、弱く踏むか、踏まないか)
実は、これをそのままBonsaiで表現することが出来ます。
上記イメージは、Microsoft社公式のBonsaiアーキテクチャ概要図に対して、私なりに解釈を行い、Bonsaiを用いた学習のイメージ図を起こしたものです。
図に沿って細かく学習の流れを見ていきましょう。
1. 評価が高い行動の実行
学習中、ブレインは現時点で一番評価が高い行動を行います。
今回の事例では、運転手が行う行動と同様になります。アクセルを踏むか、ブレーキを踏むか、またその強さですね。
「一番評価が高い」というのは、目的を満たすうえで一番あるべき行動のことです。学習の始めたばかりは、「何が評価が高いとするのか」の判断が出来ないため、ランダムに近い行動を行います。
2. 現在の環境状態を更新
シミュレーターは、プログラム上で、現在の環境状態を表現するものです。
つまり、現実世界の環境情報をプログラムに落とし込む必要があり、場合により物理法則を意識した実装をする必要があります。
、、と、少し分かりづらいので、今回の事例を元に実装例を記載します。
・信号機の状態
⇒ブレインから「1. 行動のランダム実行」が呼び出される度に、進行する時間を仮に1/60フレーム(0.017秒)とした場合、信号機の状態をその時間分進める。
・現在の車速
⇒元々の速度に対し、ブレインから指定された「最大のアクセル」で1/60フレームの時間だけ、加速した場合の速度を算出、更新する。
・交差点までの距離
⇒現在の車速で車の位置を更新したのち、車と交差点までの距離を算出、更新する。
3. 目標にどれだけ近づいたか評価
目標(Inkling)は、現在のシミュレーターの状態を受け取り、目指す状態にどれだけ近づいたかを評価します。
今回の事例では、「出来る限り、減速せずに走りたい」ことを目指しているので、もちろん車速が早ければ早いほどよい評価を行います。
ですが、他にも様々な条件が潜んでいます。例えば、
・赤信号の状態で交差点に進入する
・制限速度を超過する。
・前を走る車に衝突する
のような項目が挙げられます。
これらの条件は、重大事故につながるため、一度の違反も許されない禁止事項になるでしょう。
そのほか、「前を走る車との車間距離を○m空ける」や「急ブレーキを踏まない」などの条件も考えられます。こちらは、状況により避けられない場面もありますので、出来る限り守ってほしい事項となると考えられます。
目標(inkling)では、それぞれの条件を以下のような選択肢で設定することが出来ます。
・出来る限り早く、その状態に移行し、また維持すること(drive)
・絶対に行ってはならないこと(avoid)
・出来る限り、その状態の維持を多く/少なくすること(max/min)
「絶対に行ってはならないこと」に違反していない場合、目標に設定された項目より、シミュレーターの状態に対して評価を行います。
その後、再度「1. 評価が高い行動の実行」に遷移し、学習サイクルを繰り返します。
「1. 評価が高い行動の実行」での行動は、サイクルを繰り返す中で、より高い評価につながる内容に変化していきます。
ある既定の回数分学習サイクルが実行されるか、学習サイクルを回すことによる、行動の変化が一定時間発生しない場合、学習は終了となります。
また、「絶対に行ってはならないこと」に違反した場合、学習のサイクルは1からやり直しになります。
今回の事例では、車の位置や速度、および信号機の状態などをリセットした状態で、再度「1. 行動のランダム実行」から学習を再開することになります。
やり直しとなった場合でも、学習状態がリセットされるわけではありません。
学習サイクルの3要素
ここまで、学習イメージを具体的に紹介しました。結論としては、実現したいことをこの3要素に落とし込むことが出来れば、Bonsaiを利用して学習することが出来ます。
この3要素は、Bonsaiの学習アーキテクチャの中で以下のキーワードで表現されます。
・「1. 評価が高い行動の実行」⇒アクション(Action)
・「2. 現在の環境状態を更新」⇒ステート(State)
・「3. 目標にどれだけ近づいたか評価」⇒報酬(Reword)
まとめ
BonsaiはAIを知らなくてもAIが作れるサービス
Bonsaiの学習アーキテクチャには、ブレイン、シミュレーター、目標の3つが存在する。
アクション、ステート、評価の3要素で学習を行う。
今後もいくつかBonsaiCar絡みの記事を上げる予定です。
次回は、環境構築編を予定しています。
【2022/07/25 追記】
次回記事を公開しました。
さいごに
最後まで見ていただき、ありがとうございました。
記事が皆さんのお役に立てましたらいいねやフォローをお願いします!
内容に関するご指摘や、その他何かございましたら下記までご連絡ください。
アバナード関西オフィス 寺岡優 / Masaru Teraoka
masaru.teraoka@avanade.com
この記事が気に入ったらサポートをしてみませんか?