小馬智行自動駕駛規劃算法面試經歷:行為預測+運動規劃+決策全考察
2年自動駕駛規劃經驗,詳細復盤小馬智行三輪技術面試:一面行為預測與深度學習、二面運動規劃與Lattice Planner、三面決策系統與項目深挖,含真題彙總與心得建議
背景介紹
先說下我的情況吧,我是在另一家自動駕駛公司做了2年規劃算法工程師,主要做行為預測和運動規劃這塊。說實話,小馬智行一直是我心目中的白月光,畢竟在國內自動駕駛公司裡,小馬的技術實力和落地進度都是頂尖的。今年年初看到他們在招規劃算法工程師,我毫不猶豫就投了。
投簡歷之前我其實挺忐忑的,因為雖然做了2年規劃,但主要是在結構化道路上做,複雜場景的經驗不算特別多。但轉念一想,不試試怎麼知道呢?於是花了兩週時間把行為預測、運動規劃和決策相關的知識點都過了一遍,尤其是Lattice Planner和基於學習的預測方法,這些是重點中的重點。
整個面試流程是三輪技術面+一輪HR面,下面我詳細復盤每一輪的面試內容。
面試流程復盤
一面:行為預測+深度學習
一面是個看起來很年輕的工程師,後來知道是預測組的,人很nice。開場先讓我自我介紹,然後直接進入技術環節。
他先問了我當前項目裡行為預測是怎麼做的,我詳細講了我們用的基於意圖的預測框架:先做意圖分類(左轉、直行、右轉),再根據意圖生成軌跡。他追問了幾個問題:
1. 意圖分類的準確率怎麼樣?誤分類的後果有多嚴重?
我說意圖分類的準確率大概在85%左右,誤分類確實會導致規劃出的軌跡不安全,所以我們會在規劃層做一個safety check,如果預測軌跡和規劃軌跡有衝突,會觸發緊急避障。他點了點頭,似乎對這個回答還算滿意。
2. 你們有沒有考慮過用端到端的方法做預測?
我說我們嘗試過用Social GAN做軌跡預測,效果還行但可解釋性太差,在安全關鍵場景下不敢用。後來改成了基於規則+學習的混合方法,規則負責處理確定性高的場景,學習負責處理不確定性高的場景。
接下來他開始問深度學習的基礎知識:
3. Transformer在序列預測中的優勢是什麼?
我說主要優勢是能夠捕捉長距離依賴關係,而且可以並行計算,比LSTM快很多。在行為預測中,我們用Transformer來編碼周圍車輛的歷史軌跡,效果比LSTM好了不少。
4. 你們訓練預測模型的時候,loss function是怎麼設計的?
我說我們用了多任務loss,包括意圖分類的交叉熵loss和軌跡回歸的ADE/FDE loss,還加了一個多樣性loss來鼓勵模型生成多樣化的預測軌跡。他追問多樣性loss具體怎麼實現的,我說是基於GMM的,每個mode對應一個高斯分佈,用負對數似然作為loss。
5. 如果預測結果和實際行為偏差很大,你們怎麼處理?
我說我們有一個在線監控系統,如果預測偏差超過閾值,會觸發重新預測,同時規劃層會切換到更保守的策略。另外我們也會把這種case收集起來,加入訓練數據。
一面大概聊了1個小時,面試官最後說「基礎還不錯」,讓我等二面通知。
二面:運動規劃+Lattice Planner
二面是個資深工程師,一上來就問運動規劃,氣氛明顯比一面緊張不少。
1. 先說說你對Lattice Planner的理解?
我說Lattice Planner的核心思想是在狀態空間中採樣一組候選軌跡,然後用cost function評估每條軌跡,選擇cost最低的。關鍵點在於採樣策略和cost function的設計。採樣太密計算量大,太疏可能錯過最優解;cost function需要綜合考慮舒適性、安全性和交規遵守。
2. Lattice Planner和RRT Star有什麼區別?
我說Lattice Planner是在離散化的狀態空間中搜索,而RRT Star是在連續空間中隨機採樣。Lattice Planner的優點是軌跡質量可控,缺點是狀態空間離散化可能丟失一些好的解。RRT Star的優點是概率完備,缺點是軌跡可能不夠平滑,需要後處理。
3. 你在實際項目中怎麼處理動態障礙物的?
我說我們用了時空A*算法,把時間作為第三個維度加入搜索空間。對於動態障礙物,根據預測軌跡在時空圖中標記佔用區域,搜索時避開這些區域。他追問這樣計算量會不會太大,我說確實會,所以我們做了一些優化,比如只在障礙物周圍一定範圍內做時空搜索,遠處用靜態規劃。
4. 說說你對Frenet坐標系的理解?為什麼在自動駕駛規劃中常用?
我說Frenet坐標系是沿參考線建立的曲線坐標系,縱向用s表示沿參考線的弧長,橫向用d表示偏離參考線的距離。在自動駕駛中常用的原因是:道路本身是彎曲的,用笛卡爾坐標系描述車輛在道路上的位置不太直觀,而Frenet坐標系天然適合描述車輛在車道上的縱向和橫向運動,而且可以將3D規劃問題解耦為縱向和橫向兩個1D問題。
5. 橫向規劃和縱向規劃怎麼協調?
我說我們用的是交替優化策略:先固定縱向軌跡優化橫向,再固定橫向優化縱向,迭代幾次直到收斂。另外在高速場景下,橫向和縱向的耦合比較弱,可以獨立規劃;但在低速場景下耦合較強,需要聯合優化。
6. 你們規劃出來的軌跡怎麼保證是動力學可行的?
我說我們在採樣端就做了約束,只採樣滿足車輛運動學約束的軌跡(最大曲率、最大加速度等),而不是採樣完再檢查。這樣雖然採樣空間小了一些,但可以保證每條候選軌跡都是可執行的。
二面聊了大概1小時15分鐘,面試官問得非常細,有好幾個問題我答得不太好,尤其是時空A*的優化細節,我說得比較模糊。面完心裡有點慌。
三面:決策系統+項目深挖
三面是規劃組的tech lead,氣場很強。他先讓我詳細講了一個我做過的最有挑戰的項目。
我講了我們在複雜路口的規劃項目,包括如何處理多車交互、如何處理行人突然闖入等。他問了幾個很深入的問題:
1. 你們的決策系統是怎麼架構的?
我說我們用的是分層決策架構:最上層是導航決策(走哪條路),中間層是行為決策(跟車、變道、讓行等),最底層是運動規劃。行為決策層用的是有限狀態機+規則,狀態包括跟車、變道準備、變道執行、緊急停車等。
2. 有限狀態機的狀態爆炸問題怎麼解決?
我說確實會遇到狀態爆炸的問題,尤其是場景複雜的時候。我們的做法是把狀態分層,高層狀態處理抽象行為,低層狀態處理具體動作。另外,我們也在探索用強化學習來替代部分規則,但目前在安全關鍵場景下還是以規則為主。
3. 如果決策和規劃的結果衝突了怎麼辦?
我說我們有一個仲裁機制:如果規劃層發現決策層給出的行為不可行(比如變道但旁邊有車),會反饋給決策層重新決策。如果時間來不及,規劃層會執行一個fallback策略(比如保持當前車道跟車)。
4. 你們怎麼評估規劃系統的整體性能?
我說我們有一套評估體系,包括仿真評估和實車評估。仿真評估主要看通過率、舒適性指標(加速度、jerk)、安全性指標(碰撞率、TTC);實車評估主要看接管率、人工干預次數。他追問仿真和實車的一致性怎麼樣,我說大概70%左右,主要是仿真中行人行為不夠真實。
5. 你覺得當前規劃系統最大的瓶頸是什麼?
我說我覺得最大的瓶頸是預測和規劃的耦合。目前預測是先做預測再規劃,是串行的,但實際上預測和規劃是相互影響的——我的規劃行為會影響其他車的行為,其他車的行為變化又反過來影響我的規劃。這個問題不解決,規劃系統永遠做不到人類司機的水平。
三面聊了1個多小時,面試官明顯對技術深度要求很高。最後他問我有什麼問題,我問了小馬在行為預測方面最新的進展,他簡單說了幾句,感覺他們也在探索預測和規劃的聯合優化。
真題彙總
行為預測部分:
1. 基於意圖的預測框架怎麼設計?意圖分類準確率如何提升?
2. 端到端預測方法的優缺點?在安全場景下怎麼保證可解釋性?
3. Transformer在序列預測中的優勢和具體應用?
4. 預測模型的loss function設計(多任務loss、多樣性loss)?
5. 預測偏差大時怎麼在線處理?
運動規劃部分:
6. Lattice Planner的核心思想和關鍵參數?
7. Lattice Planner vs RRT Star的區別和適用場景?
8. 動態障礙物在時空圖中的處理方法?
9. Frenet坐標系的理解和優勢?
10. 橫向規劃和縱向規劃的協調策略?
11. 如何保證規劃軌跡的動力學可行性?
決策系統部分:
12. 分層決策架構的設計?
13. 有限狀態機的狀態爆炸問題?
14. 決策和規劃的衝突處理機制?
15. 規劃系統的評估體系?
16. 預測和規劃的耦合問題?
心得建議
1. 基礎一定要扎實:小馬的面試非常注重基礎,不管是深度學習還是規劃算法,都會從最基本的概念問起,然後逐步深入。如果你的基礎不牢,很容易在追問中露餡。
2. 項目經驗要能講清楚:面試官會圍繞你的項目問很多細節,包括為什麼這麼做、有沒有考慮過其他方案、遇到什麼問題怎麼解決的。所以一定要對自己的項目非常熟悉,不能只講個大概。
3. 了解行業最新進展:面試中會問到一些前沿方向,比如預測和規劃的聯合優化、端到端規劃等。如果你能說出自己的理解和思考,會加分不少。
4. 不要怕說不知道:有幾個問題我確實不太清楚,直接說了「這個我不太了解」,面試官也沒有為難我,反而會換個角度引導我。裝懂被拆穿才是最尷尬的。
5. 準備時間建議2-3週:如果你有2年左右的相關經驗,2-3週的集中準備應該夠了。重點復習規劃算法(Lattice Planner、A*、RRT)、行為預測(意圖分類、軌跡生成)、深度學習基礎(Transformer、Loss設計)。
FAQ
Q:小馬智行的面試難度怎麼樣?
A:說實話挺難的,尤其是二面和三面。一面偏基礎,二面偏算法深度,三面偏系統設計和項目經驗。整體難度我覺得在自動駕駛公司裡屬於第一梯隊。
Q:面試官的風格怎麼樣?
A:三個面試官風格差異挺大的。一面比較輕鬆,像聊天;二面比較嚴肅,問題很密集;三面最有壓力,會不斷追問直到你答不上來。
Q:需要刷LeetCode嗎?
A:沒有考LeetCode,但會問算法思路,比如A*的啟發函數怎麼設計、搜索空間怎麼剪枝等。建議把規劃相關的經典算法搞明白就行。
Q:薪資怎麼樣?
A:這個因人而異,我了解到規劃算法崗的base大概在40-60k之間,具體看級別和談的情況。
Q:面試結果多久出來?
A:我是一面後3天收到二面通知,二面後5天收到三面通知,三面後1週收到offer。