用 PyTorch 單挑全世界,特斯拉是如何實現自動駕駛的?
特斯拉的工程師們正致力于開發一種發展自動駕駛技術的方法,這種方法能夠真正適應數據的擴展,而不用因為數據規模擴展而增加工程師的人力,這意味著要將數十億英里駕駛過程中出現的計算機視覺錯誤樣本都積累起來。人類輸入是一種信號源,人類行為能夠告訴機器哪些地方做錯了,在一些場景下還能夠告訴機器怎樣做是對的。不管特斯拉是否會在全自動駕駛技術領域取得成功,但有一點是肯定的,特斯拉會在城市環境中部署半自動駕駛汽車。
Andrej Karpathy 是特斯拉的 AI 高級總監,他最近發表了一次演講。在演講中,他半開玩笑地揭開了“運營假期”的神秘面紗。這里面的想法是將特斯拉的機器學習流水線自動化,這樣所有的工程師就可以度假去啦,而特斯拉的半自動駕駛功能將會自動地繼續完善。特斯拉汽車將繼續自動上傳數據,手動標注數據的工人將繼續在必要的地方對數據打標,神經網絡將自動地在新數據上進行訓練,然后,改進的網絡就會被部署到汽車上了。這個過程一直往復循環。
讓工程師們去度假只是開玩笑的說法啦,因為總會有事情要做的,創新的腳步絕不會停止。而且,即使整個過程可以完全自動化,明智的做法也是讓人們監視這套機制,看看是否如預期那樣運轉。但是,重點在于自動駕駛(Autopilot)、召喚(Summon)以及其他概念功能的改進都是以自動化方式為主。軟件開發傳統上是工程師的工作。“運營假期”的目標是讓特斯拉的工程師更像是工廠里的工程師。工廠投入運行之前,這些工程師用很長的時間來做大量準備工作。一旦工廠運轉起來,就需要大量的非工程師人員來保持其運行。目前仍然需要工程師們來檢查機器,并在出現問題時修復系統或者做出改進。但總的來說,工廠的運轉是獨立于工程師的工作的。相比之下,傳統的軟件開發流程更像是工程師們親自來打造產品。
來自 Andrej Karpathy 的演講 ppt,展示了特斯拉的機器學習流程
特斯拉是想打造一種實現自動化目標的方法,這種方法能夠適應不斷擴增的數據規模,因為特斯拉擁有全球最大規模的車輛網絡來收集數據,這些車輛上配置了傳感器和計算機,并且都連入了互聯網。這種方法最大的瓶頸就在于支付給標注工人的薪水。在計算機視覺任務中,特斯拉需要不斷地把新產生的、手動打標過的照相機數據添加到訓練集里,這樣才能不斷增加算法能力,但這種方式難以適應不斷擴增的可收集數據規模,而只能應付這些數據的一個子集,這個子集規模對應于特斯拉能夠承受的打標成本。特斯拉也許可以收集 1 萬億張交通燈照片,但是卻支付不起同樣規模的打標(指將照片中的交通燈標注為紅、綠或黃三種顏色)費用。
對于需要手動打標的任務,特斯拉采用的方法不允許純粹地增加標注數據的數量,而是通過獲取更高質量的數據來加速機器學習過程。最有價值的訓練數據樣本是現有的神經網絡模型不能正確預測的樣本。也許,這個模型錯誤預測了物體的類別、誤報了一個并不存在的物體,或者漏檢了照片上拍到的物體。通過“運營假期”所代表的自動化過程,特斯拉比起其競爭對手來說,能夠更多地捕捉到這類有價值的數據樣本。
想象一輛特斯拉汽車在自動駕駛導航(屬于其自動駕駛技術的一個版本,能夠讓特斯拉汽車自動切換車道)模式下沿著高速公路行駛。這輛特斯拉自動發起了車道切換程序,但沒有注意到相鄰車道上來了一輛皮卡。特斯拉汽車里的司機趕緊打了方向盤,退出了自動駕駛模式,取消了車道切換過程。這次人工干預會觸發一次快照,快照可能包含一段短視頻剪輯,這段視頻剪輯將由特斯拉汽車的 8 個照相機、雷達數據、GPS 數據等組合得到。特斯拉的手動標注人員會審查這段視頻剪輯,他們會看到特斯拉的神經網絡沒有檢測到這兩皮卡,標注人員就會在這兩卡車周圍畫一個 3D 方框,標上“輕型卡車”,然后把標注好的視頻剪輯發送到特斯拉總部,包含在訓練數據集里。
現在想象一輛特斯拉在完全由人類司機控制的情況下沿著高速公路行駛。突然,特斯拉前面的一輛小型貨車司機猛踩了剎車,相應地,特斯拉司機也猛踩了剎車。特斯拉汽車上的計算機自動駕駛軟件其實是在默默運行著的,它安靜地“觀察”著人類司機的行車軌跡,每時每刻都會估算自動駕駛模型會采用同樣行車軌跡的可能性。在這種情況下,自動駕駛軟件沒能夠檢測到這輛小型貨車。在這個自動駕駛軟件看來,這位人類司機在空曠的高速公路上猛踩剎車只是很隨機的一種行為。于是,它會給這位司機的行車軌跡賦予一個較低的概率;也就是說,自動駕駛軟件對這位司機的行為感到“驚訝”。人類司機行車軌跡和機器生成的行車軌跡之間的這種“驚訝”或者說“分歧”,會觸發一次快照,然后會上傳到特斯拉的數據標注人員那里。(我理解這就是特斯拉“影子模式”的工作方式。)
關于自動駕駛的一件可怕的事情是,當模型錯誤率變得更低時,你需要更多的錯誤數據樣本加入訓練才能讓錯誤率繼續減半。隨著你的系統產生的錯誤越來越少,維持系統改良速率所需的錯誤樣本卻是越來越多。你需要的錯誤樣本越多,它們就越難收集全。假設 Waymo 已經將嚴重的計算機視覺錯誤(例如:導致汽車異常行為的錯誤,這類異常行為是能被安全駕駛員確認的)降低到了每 1 萬英里 1 個錯誤。(這不是一個真實的數據,只是為了說明問題而虛構的例子。)由于 Waymo 每月大約行駛 100 萬英里,所以每月只會產生 100 個嚴重的計算機視覺錯誤樣本。給這些錯誤樣本打標現在是沒問題的,但是要找到它們卻是很費勁的。作為對比,我們看下,如果 Waymo 每月行駛 10 億英里,那每月就會產生 10 萬個錯誤樣本。通過這個方式,搜集起來的錯誤樣本數量是隨行駛的里程數增加而增加的。
自從 2018 年 11 月發布自動駕駛導航以來的 12 個月內,自動駕駛導航模式下的特斯拉汽車已經行駛了 10 億英里。平均下來每月行駛 8300 萬英里。以后,這個月度數據還會繼續增長,因為過去 12 個月里,具有自動駕駛導航功能的特斯拉汽車幾乎增長了一倍,所以在接下來的 12 個月里,這個月度數據很可能會增加 50%(假設特斯拉目前的生產速度至少不會下降)。帶有自動駕駛 2.0 及以上版本硬件的特斯拉車輛目前總共有大約 65 萬輛。假設平均行駛里程數和美國人的均值保持一致,總共的行駛里程數(包括完全由人類司機駕駛以及自動駕駛的里程數)大約是每月 7.25 億英里。兩種行駛模式都給“運營假期”提供了數據,就像以上解釋的那樣。自動駕駛模式下,人類干預標志著機器產生了錯誤或者人類司機認為這種情況對自動駕駛來說太難了。在手動駕駛模式下,人類和自動駕駛的“分歧”也標志著機器錯誤。
到目前為止,我只討論了人類打標人員在“運營假期”循環流程里的情況。如果我們從流程里不僅移除了工程師,還移除了打標人員會怎樣呢?把這整個處理流程都交給機器會怎樣呢?
機器學習里令人驚訝的一個發現是,如果你使用了標注質量很差的數據訓練時,有時候你可以獲得和標注質量很好的數據訓練同樣的結果,只要你使用的質量較差的數據量是標注質量較好數據的 1000 倍。Facebook 發現 Instagram 的標簽(通常與其對應圖片的實際內容僅有微弱的聯系)可以用來訓練神經網絡,這樣訓練出來的模型能夠精確地給物體分類。這里的訣竅是,Facebook 使用了 10 億張 Instagram 帶有標簽的圖片,幾乎實現了和 100 萬手動標注的圖片同樣的精確度。Facebook 還發現,如果結合兩種圖片,相比于單獨訓練其中任意一種,都能實現更高的精確度。
特斯拉有著 65 萬人類司機,這是大量低質量標注數據的來源。在所謂的弱監督方式中(和完全監督方式相對,后者意味著標注人員會以手動的方式精心標注圖片),我上面描述的標記數據的操作(用于后續做手動打標),可以被看做是低質量的打標。如果自動駕駛軟件本來檢測到某處有障礙物,可是人類司機卻行駛到了那里,那么這個地方就會被自動標記為無障礙物。相反,如果自動駕駛軟件檢測到某處十分空曠,可是人類司機卻在開到它旁邊時停了下來,那這個地方就會被自動標記為有障礙物。這是一種混亂的方式,但這個方式可以用豐富的免費的標簽來補充稀缺的、昂貴的標簽。
(想了解關于這個方式的更多內容,可以閱讀這里的研究論文,https://arxiv.org/pdf/1610.01238.pdf)
特斯拉的自動駕駛崗位長期以來一直要求候選人“能夠設計出一些方法,這些方法除了能夠使用豐富多樣的標注數據外,還能使用大量輕標注的數據。"在特斯拉的 Autonomy Day 發布會上,Karpathy 描述了一種和我之前描述的類似的方法。通過人類駕駛標記的視頻剪輯,特斯拉訓練了一個神經網絡,用來感知和推斷前方道路的曲線和坡度。
(視頻可點擊:https://youtu.be/v5l-jPsAK7k)
弱監督學習方法是真正適應數據擴增需求的方法,限制不再是人力成本(包括工程師人力成本和標注人員人力成本),而是道路里程數,通過互聯網傳輸的數據包以及特斯拉總部大量的 GPU。機器學習過程就真的只是一臺復雜的機器了,它自行運轉,這臺機器的零部件能夠運轉多快,機器學習就能運行多快。而較緩慢的部分則是開發這個流程,和采取辦法讓它正常運轉起來的這段時間。
相比于計算機視覺,“運營假期”能夠更加容易地做出預測。當需要預測車輛和行人軌跡時,這里有豐富的免費的高質量標簽:即未來。自動駕駛軟件會觀察一輛車目前的軌跡,在 5 秒之后,這輛車會用這 5 秒內實際走過的軌跡對這段觀察進行打標。如果你預測了一位行人要走到哪里去,這位行人馬上就會向你展示你的預測精確度如何。于是,系統能夠自動發現錯誤,錯誤樣本也能通過正確的未來軌跡被自動標注。這是絕妙的理想場景。人力不再是束縛,資金不再是束縛;只有車輛和計算機才可能成為束縛。
路徑規劃也是一個理想的場景。可以運用同樣的原理,但是側重點不一樣。規劃器試圖決定汽車應當采取什么行為。汽車觀察到的是完整的駕駛場景,由 8 個環繞的照相機和前置雷達捕捉信息。在手動模式下,神經網絡預測特斯拉的人類司機會做什么,如果它預測錯了,就會自動標記這個錯誤(同樣的,這是我所理解的“影子模式”)。司機通過他們的行為給觀察到的駕駛場景進行了標注。除了是在人類司機干預的情況下標記錯誤樣本,自動駕駛模式和手動模式的原理是相同的。這個方式即所謂的模仿學習,最近被 DeepMind 團隊用于訓練神經網絡,這個網絡可以玩《星際爭霸》,而且比 70% 以上的人類玩家都玩得更好。Waymo 也在挖掘模仿學習的潛力,自動駕駛汽車初創公司 Aurora 也很喜歡這類方法。(但是,Waymo 和 Aurora 不像特斯拉這樣有著 65 萬規模的人類司機,這些司機能夠提供大量的訓練數據)
所以總結起來,我認為“運營假期”有四大支撐優勢:
- 自動標記計算機視覺錯誤,它們稍后會被上傳并且被手動標注(完全監督學習)。當人類司機退出自動駕駛模式,或者在手動模式下,自動駕駛規劃器與人類駕駛的行車軌跡出現“分歧”(或者令人“驚訝”的情況)時,都會將其標注為錯誤。
- 使用從人類司機行為中獲取的低質量標簽,實現照相機數據的自動標注(計算機視覺的弱監督學習)。當計算機視覺神經網絡和人類司機產生“分歧”時(這個分歧也導致了自動駕駛生成了不同于人類司機使用的行車軌跡),訓練樣本會被上傳。
- 針對預測的自動標注。未來事件能夠標注過去的事件,并能顯示預測的錯誤。
- 針對規劃的自動標注。人類駕駛行為提供了標簽。當自動駕駛還在激活狀態時,如果人類干預了,或者在人類和自動駕駛規劃者之間產生了“分歧”,就會認為出現了錯誤。
預測和規劃是通過計算機視覺方法來追蹤物體軌跡并觀察行駛場景的。計算機視覺錯誤可能會引起預測和規劃失效。所以,為了使其他部分實現最優運轉,必須修復計算機視覺錯誤。
反過來說,預測或規劃錯誤可能會觸發視頻剪輯的上傳,即便沒有產生任何計算機視覺錯誤。這類沒有正確標記的視頻剪輯會增加人類手動審查的工作量。因此,減少預測或規劃方面的錯誤能夠節省標注人員的時間,好讓他們聚焦在計算機視覺方法產生的錯誤上。通過改進視頻自動標記的精確度,可以幫助加快計算機視覺功能的進展速度。
特斯拉開發的方法正在盡可能地實現在數據規模擴增時,對人力擴增的需求減到最少,他們的工程師也因此站在了大規模自動駕駛機器學習的最前沿。自動的錯誤標記可以提升標注人員的標注效率。模仿學習的使用減少了工程師投入到路徑規劃算法上的工作量;與其費力地手動編碼每一種駕駛行為,還不如讓算法從數據中自動學習這些行為。考慮到特斯拉汽車每月 7.25 億英里的駕駛里程,自動駕駛領域里還沒有先例能用來判斷特斯拉的方式會有怎樣的效率。
一些懷疑論者認為完全解決計算機視覺問題是不可能的。也許是這樣吧。但除非它真的發生了,否則我們無法確定。
開發一個每 100 英里就失效一次然后需要人類干預的 2 級自動駕駛系統, 要遠比開發一個每 100 萬英里才失效一次的 4 級或 5 級自動駕駛系統容易得多。即使特斯拉離全自動駕駛的目標還很遠,但幾乎可以肯定的是,特斯拉將會開發出能夠在城市街道上行駛的 2 級自動駕駛系統。在對未來的展望中,揮之不去的主要問題是,隨著機器錯誤發生得越來越少,司機是會仍然保持警惕并在必要時干預自動駕駛機器呢,還是會被引入一種錯誤的安全感呢。特斯拉可能需要實施司機監控系統,確保司機隨時集中注意力。朝向司機安放的照相機和已有的方向盤扭矩傳感器,這兩者的組合可能會比單獨使用扭矩傳感器更加有效。
對特斯拉來說,超級樂觀的前景是它最終開發出來了全自動駕駛系統,部署了機器人出租車。在這樣的局面下,特斯拉的市場份額即使不能十倍地增加,也可以大致增加兩倍或者三倍。稍溫和的樂觀局面會是特斯拉為城市駕駛發布了 2 級系統,特斯拉也非常棒地賣出了更多汽車和更多的“全自動駕駛”附加組件單元。銷售增長和汽車毛利率是投資者密切觀察的兩項關鍵指標;特斯拉的城市 2 級系統能夠給這兩項指標都帶來超預期的貢獻。
(Andrej Karpathy 的演講視頻請點擊:https://youtu.be/oBklltKXtDE,視頻中他描述了“運營假期”)
利益相關:我 / 我們是 TSLA 長期合作伙伴。我自己創作了這篇文章,本文表達了我的個人觀點。我們沒有因此接受任何經濟酬勞(除了來自 Seeking Alpha 的稿費)。我與文中提及了股票的所有這些公司都沒有業務關系。