End-to-End運転を1から — 認識から制御までを1つのネットワークで
カメラ画像からハンドル操作までを1つのニューラルネットで学ぶEnd-to-End自動運転を、前提知識ゼロから解説。モジュール型との思想の違い、模倣学習と分布シフト、「平均を出すと事故る」多峰性問題、そして解釈性と検証がなぜ難しいかまでを一気に追う。
要点
- End-to-End型は、センサ入力を受けてハンドル角や目標軌道を直接出力する1つのニューラルネットに運転の全体を任せる方式である。
- モジュール型は、工程間の書式を人間が決めるため情報が失われ、誤差が連鎖し、目的関数も一致しない代償がある。
- 行動クローンは人間の操作ペアを教師にするが、分布シフトにより誤差が複利で効き、多峰性では2乗誤差の平均が谷底を指す。
- 評価はオープンループだけでは不十分で、クローズドループ評価が必要であり、オープンループ指標だけでのモデル選定は危険である。
- UniADは検出・追跡・予測・計画をネット内に残して微分可能につなぎ、最終的な計画性能で一括学習する。
End to End Learning for Self-Driving Cars
一次資料 — この記事の根拠
この解説の公開 2026-08-13
End to End Learning for Self-Driving CarsarXiv:1604.07316論文ページ·PDFPlanning-oriented Autonomous DrivingarXiv:2212.10156論文ページ·PDF
工場のラインと、一人の運転手
自動運転ソフトの作り方には、大きく2つの流儀があります。1つはモジュール型。認識(何がどこにあるか)→ 予測(それが次にどう動くか)→ 計画(自分はどの経路を通るか)→ 制御(ハンドルとペダルをどう動かすか)という工程に分け、各工程を別々のチームが作り込み、工程の間は「検出した物体のリスト」「予測軌道」といった決められた書式で受け渡します。自動車工場の生産ラインのように責任範囲がはっきりしていて、どの工程で不良が出たかを検査できるのが強みです。
もう1つが今回の主題、End-to-End(端から端まで)型です。カメラ画像などのセンサ入力を受け取り、ハンドル角や目標軌道を直接出力する1つのニューラルネットに運転の全体を任せます。人間の熟練ドライバーは「前方に歩行者を検出、予測軌道を計算……」と工程を意識しません。見て、状況を丸ごと掴んで、手足が動く。その一体性を機械で再現しようという発想です。
モジュール型の代償 — 境界で情報が死ぬ
分業には代償があります。第一に、工程間の書式を人間が決めてしまうこと。認識チームが「物体は3次元の箱で表す」と決めた瞬間、箱に収まらない情報——歩行者の視線、自転車のふらつき、荷台から落ちそうな荷物——は下流に届かなくなります。後段がどれほど賢くても、捨てられた情報は使えません。
第二に、誤差の連鎖。認識が見落とした物体は予測にも計画にも存在せず、各工程の小さな誤差が下流で増幅されます。第三に、目的関数の不一致。認識チームは検出精度を、予測チームは軌道誤差をそれぞれ最適化しますが、その改善が「運転のうまさ」の改善と一致する保証はありません。検出精度がわずかに上がっても、増えた分が運転と無関係な遠方の駐車車両なら意味は薄いのです。
End-to-Endはこの3つをまとめて解決しようとします。ネット全体が「最終的な運転のよさ」という1つの損失で学習されるので、何を中間表現として残すかはネット自身が決め、勾配(誤差を減らす方向の信号)が出力側から入力側まで一気通貫で流れます。
意外と古い発想
End-to-End運転は最近の流行に見えて、発想自体は古典です。1989年のALVINNは、カメラ画像からステアリング角を出す小さなニューラルネットで実車を走らせました。2016年にはNVIDIAが畳み込みネットワークで同じ枠組みを拡大し(通称PilotNet)、車線検出器を明示的に作らないまま車線維持走行ができることを示しました。研究側ではCVPR 2023最優秀論文のUniADが「工程は残しつつ全体を微分可能につなぎ、計画を最終目標に据える」設計を示し、量産車のソフトでもEnd-to-End型への移行が語られるようになりました。
式で書くと、End-to-End運転の本体は1つの関数です。
がセンサ観測(カメラ画像列など)、 が行動(ハンドル角と加減速、または数秒先までの目標軌道)、 が学習パラメータ を持つニューラルネットです。つまり「観測を入れると行動が出てくる関数を1個学ぶ」——運転という巨大な問題が、見かけ上この1行に潰れます。問題は、この をどう学ぶかです。
模倣学習 — 人間の運転を教師にする
最も広く使われるのが模倣学習、その中でも行動クローン(behavior cloning)です。仕組みは拍子抜けするほど単純で、人間が運転したときの「そのとき見えていたもの 」と「そのとき取った操作 」のペアを大量に集め、ネットの出力を人間の操作に近づける教師あり学習をするだけです。
読み下すと「観測 に対するネットの出力 と、人間が実際に取った操作 との差を2乗し、集めた全データで平均した量」です。これを勾配降下で小さくします。魅力はデータの安さにあります。走行記録は人間が普通に運転するだけで貯まり、物体の枠を1個ずつ描くようなラベル付け作業が要りません。
ただし「訓練データで誤差が小さい」ことと「見たことのない状況でうまく動く」ことは別物です。この隔たりが、End-to-End運転のほぼすべての難しさの源になります。
ずれは複利で効く — 分布シフト
行動クローンには、普通の教師あり学習にはない構造的な罠があります。猫画像の分類なら、1枚間違えても次の画像には影響しません。ところが運転では、自分の出力が次の入力を変えます。わずかにハンドルを切りすぎると、車は人間なら通らない位置——つまり訓練データに存在しない観測——に入り込みます。見たことのない観測に対する出力はさらに不正確になり、ずれがずれを呼んで、数秒後には路肩に乗り上げる。誤差が足し算でなく複利で効くのです。これを分布シフト(covariate shift)と呼びます。
古典的な対策が2つあります。1つはDAggerと呼ばれる手法で、学習中のネットに実際に運転させ、たどり着いた「ずれた状況」を集めて、そこで人間ならどう操作するかをラベル付けし、訓練データに追加します。「失敗しかけた場面の正解」を教材に加えるわけです。もう1つはデータの水増しで、NVIDIAのPilotNetは車体の左右にもカメラを付け、「車線から少しずれた視点の画像」と「そこから復帰する操作」のペアを合成して訓練に混ぜました。人間のお手本運転には「ずれから戻る」場面がほとんど含まれない——うまい人の記録だけ見ていても回復操作は学べない——という本質的な欠落を、機械的に埋める工夫です。
「平均」がいちばん危ない — 多峰性
もう1つの罠は、正解が1つとは限らないことです。前方に落下物があるとき、右に避けても左に避けても正解です。訓練データには両方が混ざります。ここで先ほどの2乗誤差を最小化すると何が起きるか——ネットは右と左の平均、つまり落下物に真っ直ぐ突っ込む出力を学びます。2乗誤差の最小解は条件付き平均であり、正解の分布が2つの山(峰)を持つとき、平均は谷底=どちらの正解でもない場所を指すのです。これを多峰性(multimodality)の問題と呼びます。
対策の方向は「1点を回帰するのをやめ、分布や選択肢として出力する」ことです。代表的な設計が3つあります。①あらかじめ用意した複数の候補軌道(アンカー)それぞれに確率を出し、分類問題として解く。②交差点でどちらに行くかはナビの指示(右折・左折・直進)を入力に加えて分岐を消す——条件付き模倣学習と呼ばれます。③拡散モデルなどの生成モデルで軌道の分布そのものを学ぶ。いずれも「平均を出すと谷底に落ちる」問題を、出力の表現を変えることで回避しています。
コードで見る行動クローン
骨組みはこれだけです。
for images, expert_action in dataloader: # 人間の走行記録
pred = net(images) # 画像 → 軌道/操舵の予測
loss = mse(pred, expert_action) # 人間の操作との差
loss.backward() # 勾配が制御側から認識側まで流れる
optimizer.step()
驚くべきは、ここに「車線」「歩行者」「信号」という言葉が一度も出てこないことです。それらを認識すべきかどうかも含めて、損失を下げるのに必要ならネットが勝手に内部に獲得する——それがEnd-to-Endの思想であり、同時に次節の不安の源でもあります。
解釈性 — 「なぜ曲がったのか」に答えられない
モジュール型なら、事故未遂のログを開いて「認識は歩行者を出していたか? 予測は交差を出していたか?」と工程ごとに切り分けられます。End-to-Endの純粋形にはこの継ぎ目がありません。入力画像と出力操舵の間にあるのは数億個の重みで、「なぜ急ハンドルを切ったのか」への答えは原理的に取り出しにくい。注意マップの可視化などの説明手法はありますが、それが本当の因果を示す保証はありません。
現実的な妥協点が、中間出力を捨てないEnd-to-Endです。UniADは検出・追跡・予測・計画の各工程をすべてネット内のモジュールとして残しつつ、全体を微分可能につなぎ、最終的な計画性能を目標に一括学習します。勾配は端から端まで流れる(End-to-Endの利点)のに、途中の検出結果や予測軌道は人間が読める形で取り出せる(モジュール型の利点)。中間出力は監視・デバッグ用の「窓」であって、後段はそれだけに縛られない、という設計です。カメラ群を俯瞰図に変換するBEV表現は、この種の設計で中間表現の共通土台としてよく使われます。
検証 — 「よく模倣できた」と「安全に走れる」は別物
最後に、実務で最も重い論点が検証です。まず評価には2種類あります。オープンループ評価は、記録済みの走行データを再生し、各時点でネットの出力軌道と人間の軌道のずれ(変位誤差)を測ります。安価ですが、自分の出力が次の入力に影響する複利効果(分布シフト)を再現できません。クローズドループ評価は、シミュレータや実車でネットに実際に運転させ、完走率や違反・介入の回数を測ります。オープンループの成績が良くてもクローズドループで破綻する例は珍しくなく、オープンループ指標だけでモデルを選ぶのは危険というのが分野の共通認識です。
さらに深い問題として、End-to-Endは要件を工程に分解して検証するという安全工学の常套手段と相性が悪い。「歩行者検出は距離○m以内で漏れ率いくつ」といった工程別の仕様が書けないため、保証は「どれだけ多様な状況を走らせて統計を取ったか」に寄りかかります。走行させるべき状況は現実には稀な危険場面(ロングテール)ほど重要で、そこでシミュレーションによる希少場面の合成や、前節の中間出力による監視が検証の柱になります。ここは技術的にも制度的にも未解決で、End-to-End推進派とモジュール堅持派の議論が今も続いている領域です。
現場ではこう使う
自動運転・ロボティクス企業でこの知識が要るのは、モデルを訓練するMLエンジニアだけではありません。評価基盤の担当者は、オープンループの変位誤差(ADE/FDEと呼ばれる平均・最終変位誤差)とクローズドループの完走率・介入率を別々のダッシュボードで持ち、「オープンループだけ改善した変更」を昇格させない仕組みを作ります。CARLAなどのシミュレータでの走行テストや、nuScenes系のデータセットでの比較がその足場です。データエンジニアは介入ログ(人間が運転を取り戻した場面)を吸い上げて訓練データに還流する仕組みを持ち、これが実質的なDAggerとして働きます。
落とし穴も定番化しています。第一に、前述の通りオープンループ指標での機種選定。停止中データが多いと「常にほぼ直進」を出す退化モデルでも変位誤差が小さく出ます。第二に、お手本データの質=人間ドライバーの荒い運転はそのまま模倣されるので、教師データの選別(急操作・違反場面の除外)が地味に効きます。第三に、多峰性を知らずに2乗誤差で軌道回帰して、分岐点で車が「中間」を走る事故パターン。出力表現を分布・候補選択にするのが先、モデルを大きくするのは後です。
まとめ
- End-to-Endは「工程間の書式を人間が決めない」ことで、境界での情報損失・誤差連鎖・目的関数の不一致を避ける設計思想
- 主力の学習法は模倣学習(行動クローン)だが、分布シフト(ずれの複利)と多峰性(平均が谷底を指す)という2つの構造的な罠がある
- 解釈性と検証が最大の弱点で、中間出力を残す微分可能パイプライン(UniAD型)とクローズドループ評価が現実的な着地点
前段の「見る」側の設計は自動運転の認識スタックを1から、カメラ群を1枚の地図に統合する仕組みはBEV表現を1からで扱いました。「観測→行動を1つのネットで」という同じ枠組みをロボット操作に適用したのが視覚言語行動モデルで、TurboVLA解説が実例です。
コメント
コメントにはログインが必要です