こんにちは､ そして自動運転車モジュールへようこそ｡
このチュートリアルでは､ 人工知能を実装するための環境について説明します｡
環境には､ もちろん､ 自動運転や障害物回避を訓練するための車と､
車が移動するための道路とブロックを描画します｡
そこで､ この人工知能を構築して､ このクルマを訓練し､ 制限を超えないように道路を走行させ､
道路内に設置した障害物を回避させるようにするのです｡
だから､ これはかなりエキサイティングな挑戦です｡
そして実は､ 2つのファイルが別々に存在します｡
ご覧の通り､ AIのpythonファイルがあります｡
それが私たちの人工知能で､ 車を訓練するためにすべてのトレーニングを行い､ どのように自動運転するか､ 運転します｡
そして､ この環境をすべて作るコードであるマップ､ そのpファイルがあります｡
これがそのコードです｡ 実際には200行のコードですが､ もう少し増やしてください｡
ですから､ このコードは一般的にAIとは関係なく､ あくまでマップを作るための環境を作るためのコードです｡
そこで､ 1つ1つのセクションを説明していきますが､ 今回は人工知能に焦点を当てたいので､
このコードを1行ずつゼロから実装するわけではありません｡
それでも､ 何が起こっているのかを理解するために､ 一つひとつのセクションを見ていきましょう｡
そこでまず､ 必要なライブラリをインポートします｡
それはどんなコードに対してもです｡
ある作業をより効率的に行うためにいくつかのライブラリが必要なので､ 次にすべてのアーカイブパッケージをインポートします｡
だから､ これはすべてアーカイブに特化したものなので､ あまり重要ではありません｡
KBを使って地図を作るので､ この地図を作ることができるように､ たくさんのクラスやオブジェクトをインポートして､
地図にツールを追加しているのです｡
よし､ それならこの線が重要だ｡
この行はAIに関連していて､ 基本的にここで私たちの脳､ つまり車の脳をインポートします｡ これはこのduneクラスのオブジェクトになります｡
そして､ デューンクラスは我々の人工知能そのものなのです｡
次のチュートリアルでは､ クラスでVQを実装する様子をご覧いただけます｡
そして､ ご推察の通り､ DCNはDeep Q Networksの略です｡
そこで､ ディープQラーニングネットワークを実装し､ 準備ができたら､ AIからこの行でここにインポートする予定です｡
そして､ AIはもちろん私たちのAI pythonファイルです｡
いいかい？
だから､ 早く実装したい｡
これはかなりの旅になりそうですが､ AIのおかげでクルマが自分で運転できるようになるので､ とてもエキサイティングなことだとおわかりいただけると思います｡
わかりました｡
そして､ 次のセクションに進む前に､ このクルマをどのように調教していくかを説明しなければなりません｡
今､ ニューラルネットワークの説明はしませんが､ 車が自分で運転したり､ 障害物を避けたりできるように訓練するための考え方を説明します｡
では､ 現実の世界で､ 本物の自動車に壁や障害物を避ける訓練をさせようと思ったら､ どうすればいいでしょうか｡
本物の壁や大きな障害物に車をぶつけるようなことは､ 絶対にしない｡
そうなるとコストがかかる｡
それよりも､ 壁や障害物にぶつかったときではなく､ 砂の上に乗ったときに罰を与えるほうが､ より知的な発想になるのではないでしょうか｡
つまり､ フィールドを持っているようなものですね｡
このフィールドには､ 車が滞在しなければならない道路があり､ その道路はいくつかの砂で区切られています｡
そして､ 車が砂の上に行くたびに､ 障害物の上に行くようなもので､ 車が砂の中に入ってしまえば､
スピードが落ちてしまうので､ 必ずペナルティを科すことにしています｡
その分､ 罰が当たります｡
そして､ それが人工知能のひとつの本質的なポイントです｡
砂地に入って速度が落ちるたびに､ 悪い報酬が発生する｡
わかりました｡
そこで､ ここでは､ 地図上に砂を描くときに､ メモリ上の最後の点の座標であるlast
Xとlast Yを紹介します｡
わかりました｡
そして､ 脳と呼ばれる人工知能ができ､ その中には神経ネットワークが含まれています｡
これは車の脳であり､ 神経回路網を含んでいるからです｡
わかりました｡
このコードでは､ ご覧のように dune クラスのオブジェクトを作成しています｡
クラスとオブジェクトが何であるかを思い出しますが､ 脳はオブジェクトです｡
DCNは､ クラスと5つの3と0です｡ 9はクラスの入力です｡
だから､ とてもシンプルなんです｡
5は､ 5次元のベクトルを符号化した状態に相当する｡
彼らが完璧に描写していること､ 環境で何が起こっているかを地図上で確認します｡
そうすると､ 3がアクションの数になります｡
左へ行く､ 直進する､ 右へ行く､ 0の3つのアクションが考えられます｡ 9は深層学習アルゴリズムにおけるガンマパラメータである｡
わかりました｡
そして､ アクション2回転です｡
つまり､ アクション2の回転は､ 0､ 20､ -20の3つの要素からなるベクトルです｡
というのも､ アクションは3つの数字0.1でエンコードされているからです｡
2であり､ このアクション2回転ベクトルのインデックスに相当する｡
ですから､ 例えば時刻Tで選択されているアクションがゼロであれば､ まあゼロはこのアクションの回転ベクトルに対するインデックスに相当し､
インデックスゼロの値はゼロですから､ 直進することになります｡
そして､ 選択されたアクションが1であれば､ このアクションのインデックスが回転ベクトルに対応し､ インデックス1を持つこのベクトルの値は20となる｡
つまり20は20度の回転に相当し､ コアは右に20度進むということです｡
そして､ 選択されたアクションが2であれば､ 2はインデックスに対応し､ このアクションの2が回転ベクトルに対応します｡
したがって､ コアは-20度の回転を行い､ したがって左に進みます｡
それでは､ 各状態で最後の報酬を得ることになるので､ 最後の報酬変数を導入します｡
だから､ カードが何かの砂に入らなければ､ その報酬はプラスになると覚えておいてください｡
そして､ そのカードがある意味上に行くと､ まあ､ 悪い報酬を得ることになるのです｡
そして､ 各時刻でこの変数には､ その都度得られる報酬が格納されます｡
T そして､ このコースを初期化します｡ これは報酬を含むベクトルで､ すべてではありませんが､ 時間に対する報酬の平均スコアの曲線を作ることができるように､
報酬をスライディングウィンドウに配置します｡
では､ このコードセクションで､ マップを初期化します｡ 例えば､ cen変数を初期化します｡
だから､ それが大事なんです｡
この変数は実際には配列になり､ その中のセルがマップのピクセルになります｡
そして､ それぞれのセルには､ センスがあれば1を､ センスがなければ0を入れ､ 最初は何も描かないことにします｡
そのため､ センスは全くなく､ したがって送信配列のすべてのセルが0になります｡
だから､ どこにでもゼロがあることになる｡
そして､ 砂を描くと同時に､ センスを描いたセルには1が入り､ 配列はここにあるすべてのゼロで初期化されます｡
そして､ この大切なもの､ それが「目標」です｡
つまりゴールとは､ 地図上で車を訓練して到達させる地点のことです｡
だから､ 目的地みたいなものなんです｡
では､ この目標はどうなるのでしょうか？
さて､ これがマップの左上になります｡
そこで､ マップの左上に行くように車を調教します｡
そして､ 地図の左上隅に到達したら､ 次は地図の右下隅に行くように訓練します｡
そこで､ 次のようなシナリオが考えられる｡
地図の左上には都市の空港､ 右下には都市の繁華街が描かれています｡
そして､ 空港とダウンタウンを往復するために､ TaxiやUberに頼ることになるのです｡
もちろん､ このタクシーが空港からダウンタウンまで行けるかどうか､ もっともっと難しい道路を描いたり､
路上に障害物を置いたりして､ テストを難しくしていきます｡
だから､ これは楽しくて仕方がない｡
そのため､ ここでは最初のゴールの座標を設定しています｡
それが､ 画面左上にある空港です｡
だから､ 地図はこのように正方形のようになります｡
そして､ 原点の座標､ つまりゼロゼロはここにあります｡
そして､ もっと大きいのが､ この距離です｡
そのため､ 座標が20と大きく､ -20はちょうどここ､ 地図の左上隅になります｡
そして､ なぜゼロではなく､ 20を選んだのか｡
まあ､ それは車を鍛えたいからであって､ 壁に突進したいわけではないのですが｡
壁を避ける訓練もしたいんですよね｡
したがって､ クルマが壁に触れてはいけないから､ ゴールはゼロであってはならないのです｡
ゴールに触れたい｡
だから､ ここに置くしかないんです｡
そして､ 最後のdistance変数を導入します｡ これは､ 車からゴールまでの現在の距離を示すもので､
0に初期化します｡
わかりました｡
そして､ いよいよ車とゲームを作る時が来た｡
そこで､ 車用のクラスとゲーム用のクラスの2つを作ることにします｡
そして､ これらの授業の内部では､ すでに目とのつながりができていることでしょう｡
そこで､ 次のチュートリアルでそれを行うことにします｡
そしてそれまで､ お楽しみに｡
I.