はじめに
新人研修にて AWS DeepRacer 研修がありました。
AWS DeepRacer研修では、仮想上でマシンの走行シミュレーションを行い、モデル作成します。
そのモデルを実際のレーシングカーに搭載し、コースを走行するタイムを競う研修でした。
今回、自律走行における強化学習について触れることで、AI技術に対する奥深さを体験することができました。
AWS DeepRacerについて
AWS DeepRacerでは、学習させるコース、学習時間、報酬関数、スピード、ハンドル角度などを設定し強化学習を行わせることでモデルを作成します。
そして作成したモデルをレーシングカーに搭載し、実際のコースを走行します。
本研修では、学習させるコース、学習時間、報酬関数、スピード、ハンドル角度などを私たちで考え、用意されたレーシングカーに搭載し走行させました。
AWS DeepRacerを学習させた結果と現実
シミュレーションでは、作成するモデルを以下のように設定しました。
- 学習させるコース:RL Speedway – Counterclockwise
- 学習時間:40分
- 報酬関数:follow the center line
- スピード: 0.5 m/s ~ 1.5 m/s
- ハンドル角度: -25° ~ 25°
ここで報酬関数には、センターラインからどれだけ離れているかによって報酬を変える関数を選択しました。
その結果、シミュレーション上では、コースアウトやクラッシュすることなく完走するモデルを作成することができました。
いざ出陣!
シミュレーションして作成したモデルをレーシングカーに読み込ませ、学習させていたコースであるRL Speedwayを実際に走行させました。
しかし、ノロノロと動き始め、曲がり角ではそのまま直進しコースアウトの連続でした…
この研修では、以下2つの観点を課題として設定し、改善に取り組みました。
- シミュレーションと実際のレーシングカーとの違いに起因する課題:スピードの値が小さいと、タイヤと地面の摩擦力があるため遅くなってしまう点
- 強化学習としての課題:学習不足や報酬関数の改善
この2つの課題について、様々なパターンのシミュレーションを行い、モデルを作成しました。
1.については、スピードの最大値を当初の1.5m/sから4.0 m/sにして学習しなおしました。
その結果、ノロノロだったレーシングカーが速くなりました。
2.については、報酬関数で定義している「センターラインからどれだけ離れたかに応じて与える報酬」を、当初よりも細かく設定するというアプローチで解決を試みました。
結果として、やや曲がり方がスムーズになりました。
さいごに
AWS DeepRacer研修を通して、次の3つについて考えることができました。
- AI技術は最新技術ではあるが、とても地道であること
本研修では、良い報酬関数を考えたり、速度やハンドル角度の設定を行ったりしてシミュレーションを行いました。
その結果、それらの設定を少し変えるだけで、これまでより結果が改善したり、逆に望ましくない結果になることがあったりしました。
こういった速度やハンドル角度の設定を考えるといった、地道な作業も必要になると感じました。 - 仮想と現実では結果が異なること
シミュレーション上ではコースに沿って走行していたけれども、現実のコースではあまりうまく走行できていませんでした。
これは、カメラや摩擦などの物理的な要素があり、シミュレーションにおいてそのことについて考慮しなければならないと気づきました。 - 繊細であること
レーシングカーに対しては、コントローラーから「発進」や「停止」の操作ができます。
この研修では、直前まで問題なく動作していた状況で、レーシングカーが発進しなかったり、発進したとしても走行が止まらなかったりということが発生しました。
これは研修だから良いかもしれませんが、社会において実際の自動車をAIによって運転するとなったとき、走行に関する安全面をしっかり考慮しなければならないのではないかと学びました。
したがって、シミュレーションを行うことで実際に走行しなくてもモデル作成ができることを学び、AI技術の可能性について知ることができる、とても有意義な体験ができました!