Translate

2019年1月31日木曜日

ブログ記事「Supervised Racing」を翻訳してみた

以下の文章は ブログ記事 Supervised Racing  を勝手に翻訳したものです。

-----

Supervised Racing (監視されたレース)


前回の記事では、物理世界のマシンの制御からどのようにしてコンピュータに渡ってくるかについて解説しました。今回はさらに知性をあたえようとする話をします。もし人工知能が運転学習をやめるのではなく、継続してパーツをオンラインで組み付け指示することを学び、そして複製を始めるなら..まあそれについては、うん..

それがどれほど素晴らしいことであっても、そのような知性はありません。

Donkeycar AI (DonkeycarのAI)

デフォルトで搭載されている Donkeycar AIは、教師あり学習ベースのもので、CNNを使用しています。教師あり学習は、画像認識のような実用的なアプリケーションで現在使用されているおそらく最も一般的なタイプの深層学習です。

これは、ニューラルネットワークが入力とそれに対応する正しい出力からなるトレーニングデータを使用してトレーニングされることを意味します。Donkeycarのコンテキストでは、単一の入力(与えられた画像)に対して2つの出力(スロットルとアングル)を予測するようにソフトウェアを訓練することを意味します。

実際の実装は、内部でTensorFlowを呼び出す高レベル深層学習ライブラリKerasを使っています。



Recording (記録)

AIをトレーニングするための最初のステップはデータ収集です。Donkeycarソフトウェアには、カメラ画像とコントローラデータの両方を記録する機能が組み込まれています。渡しの場合は Bluetooth コントローラですべて設定しており、トレーニングは単一のボタンの背後にあります。記録モードが有効になっていると、カースピーカーからナイトライダーのテーマが再生されるようになっています。このようにしておけば、運転手は車の準備が整って録音中であることを確認できます。

記録モードがオンになっているとき、人間が手動運転します。通常では、手動運転の走行記録は速くてきれいな周回となっているでしょう。しかし私はは他のスタイルでも実験しました。通常は、最大スロットルを50%くらいにするために自動車側の設定でスロットル制限を使っているとおもいます。これは、想定外の急速な走行を防止したいという理由だけではなく、AIの運転方法が人間とまったく同じではないためです。トレーニングデータの低いながらも安定したスロットルは、より速い加速とコーナーへの惰行でトレーニングされた場合よりも速くAIを運転することにつながります。

トレーニングの結果、1分あたり約1200レコードを記録しました。1つの記録データは、車載カメラからの1フレームと、正確な瞬間から保存された値を含む1つのJSONファイルで構成されます。デフォルトでは、これらの値はステアリングアングルとスロットルですが、IMUからの加速度測定のような他のデータも含むように拡張することができます。


Training (トレーニング)

 十分なトレーニングデータが収集できたら、次は物理世界から離れてコンピューティングを行う時間です。デフォルト Donkeycar 環境では、データはニューラルネットワークをトレーニングするために直接使用されます。モデルのトレーニングと検証のためにデータが Keras に渡されます。トレーニングが開始されたら、私達はただ待つだけです。

このトレーニングステップは非常に不思議ですが、あなたが本当に理解しなければならないものではありません。そうだとしても、良いモデルを生み出すことができます。最新のGPUを使用している場合は、適切量のデータでモデルをトレーニングするのにそれほど長い時間はかかりません。また、CPUだけを使用していても、数時間でモデルのトレーニングを受けることができます。

トレーニング監視でも面白いこともあります。Kerasの出力内容を監視し、何が起こっているのかを把握することもできます。コマンドラインからの出力を見ることができますし、Tensorflow付属のTensorboardというグラフィカルツールもあります。Tensorboardの場合は、Webサーバが起動されるので、ブラウザでUIを開いて、何が起きているのかを確認できます。

主な出力は損失(loss)値です。それはモデルがどれほど正確な予測をするかを示しています。理論的にはゼロになればあなたのモデルは完璧となるはずですが、実際には損失値が小さすぎると、モデルは過剰に適合状態になります。Donkeycarコンテキストにおける過剰適合は、単に「その靴が画像上隅にあるときには、スロットル0.5とアングル0.8を使用する」ような適切でない学習をしてしまいます。もしあなたが靴を動かしたり、何かがトラックの上に影を落としたり、あるいは他のほんの少し細部が変わったりすると、モデルは混乱します。そのため、損失値をゼロにするのではなく、ネットワークの一般化(generalization)に取り掛かりたいと思います。

一般化(generalization)を評価するために、もう1つの損失値 (val_loss) があります。検証の喪失には至りません。検証データは、トレーニングが始まる前にデータセット全体から自動的に取り出されるデータセットの一部です。これまでモデルが見たことがないデータセットを使用してモデルを検証するためのものです。それはモデルのトレーニングには決して使われないので、実際に運転方法を知っており、単に関係のない外観を暗記していないならば、 Keras がテストのために「テストトラック」でモデルを適用すると考えることができます。悪い例えでいうと、評価セットは車が運転方法を知っているならテストするための異なるトラックであるといえます。val_loss 値が下がるにつれて、あなたのモデルは実世界に適応するために良くなっていきます。


Driving (運転)


学校が夏休みになったら、モデルファイルを自動車のコンピュータに移して、運転ソフトウェアを起動しましょう。このステップに必要なのは、ほぼそれだけです。AIにミニチュアシートベルトを締めさせ、私達は邪魔にならないようにする時間がきましたよ。

ソフトウェアの内部で起こることは前の記事で解説しましたが、要約するとカメラから画像フレームを取得してAIに入力しステアリングアングルとスロットル値を出力する高速ループとして構成しています。これらの値はステアリングサーボとモータの制御に使用されます。

この時点で、トレーニング済みAIモデルがどれほどうまく機能しているかは、普通に驚きではありませんか?このプロジェクト全体がブラックボックスであるニューラルネットワークに制御を与えることなので、あなたは一般的にAIが動作する理由を推測することしかできません。もちろん、時間が経てば何かが起こるのではないかと推論することを学びますが、実際に確認できる場合は稀です。

この単純なアーキテクチャの優れた点の1つは、RCカーに縛られないということです。プロジェクトの初期段階で、コントローラの入力や画面イメージを記録するユーティリティをいくつか作成し、エミュレートされたコントローラを使ってPCでドライビングゲームをプレイするようにAIをトレーニングしました。私はこの段階では助手席に着かないでしょうが、AIの自動運転は想像以上にうまくいきました。



Next steps (次のステップ)


人を模倣するこの最も単純な形のAIは、かなりうまく機能するかもしれませんが、それでもやはりほんの始まりにすぎません。私たちは十分に長い改善のアイデアのリストを持っています。私たちがすでに試したことのあるものもあります。

データ増強は、あなたが少しの変化でそれをコピーすることによってデータ量を増やすことができることを意味します。それは過剰適合を減らし、AIをより動的な環境で動作させます。我々はそれを試みました、そして結果と実行の両方を後で共有します。それは本当に違いを生むものです。

記録データを再生して手動で分析するためのテストベンチも構築しました。これは、レコーディングで問題を発見するためにも、モデルを車内にうつす前にAIによる推論を確認するためにも使用できます。

そして最後に、現在のニューラルネットワークアーキテクチャは、1つの画像のみを使用し、トレーニングデータの背後にある人間とまったく同じ運転スタイルを最適化しようと試みることを考えると、かなり制限されています。RCカーの運転経験が限られている私たちのチームは、速くてきれいなラップを走ることが実際にどれだけ難しいかに少し驚いています。その一方で、私たちは訓練されたAIがどれほどうまく機能しているかに非常に驚いています。同時に、誰もが強化学習について話しているように見えます。つまり、AIは自分自身を訓練し、最終的にはスキルで人間を打ち負かすでしょう。


-----

DonkeycarのAI部分をどうやって数式や難しいAI用語を使わないで説明するか頑張っているのがうかがえますが..

..やっぱりmanage.pyからソースを読むのが一番手っ取り早いでしょうね..

0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...