核心提示:當(dāng)我大學(xué)畢業(yè)后開(kāi)始第一份工作時(shí),我自認(rèn)為對(duì)機(jī)器學(xué)習(xí)了解不少。我曾在 Pinterest 和可汗學(xué)院(Khan Academy)有過(guò)兩次實(shí)習(xí),工作
當(dāng)我大學(xué)畢業(yè)后開(kāi)始第一份工作時(shí),我自認(rèn)為對(duì)機(jī)器學(xué)習(xí)了解不少。我曾在 Pinterest 和可汗學(xué)院(Khan Academy)有過(guò)兩次實(shí)習(xí),工作內(nèi)容是建立機(jī)器學(xué)習(xí)系統(tǒng)。在伯克利大學(xué)的最后一年,我展開(kāi)了計(jì)算機(jī)視覺(jué)深度學(xué)習(xí)的研究,并在 Caffe 上工作,這是最早流行的深度學(xué)習(xí)庫(kù)之一。畢業(yè)后,我加入了一家名為“ Cruise ”的小型創(chuàng)業(yè)公司,Cruise專門生產(chǎn)自動(dòng)駕駛汽車,F(xiàn)在我在 Aquarium,幫助多家公司部署深度學(xué)習(xí)模型來(lái)解決重要的社會(huì)問(wèn)題。
這些年來(lái),我建立了相當(dāng)酷的深度學(xué)習(xí)和計(jì)算機(jī)視覺(jué)堆棧。與我在伯克利做研究的時(shí)候相比,現(xiàn)在有更多的人在生產(chǎn)應(yīng)用程序中使用深度學(xué)習(xí),F(xiàn)在他們面臨的許多問(wèn)題,與我2016年在 Cruise 所面臨的問(wèn)題是一樣的。我有很多在生產(chǎn)中進(jìn)行深度學(xué)習(xí)的經(jīng)驗(yàn)教訓(xùn)想與你們分享,希望大家可以不必通過(guò)艱難的方式來(lái)學(xué)習(xí)它們。
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
圖注:作者團(tuán)隊(duì)開(kāi)發(fā)第一個(gè)部署在汽車上的機(jī)器學(xué)習(xí)模型 1
將ML模型部署到自動(dòng)駕駛車上的故事
首先,讓我談?wù)?Cruise 公司有史以來(lái)第一個(gè)部署在汽車上的ML模型。在我們開(kāi)發(fā)模型的過(guò)程中,工作流程感覺(jué)很像我在研究時(shí)期所習(xí)慣的那樣。我們?cè)陂_(kāi)源數(shù)據(jù)上訓(xùn)練開(kāi)源模型,將之集成到公司產(chǎn)品軟件堆棧中,并部署到汽車上。經(jīng)過(guò)幾個(gè)星期的工作,我們合并的最終 PR, 在汽車上運(yùn)行模型。
“任務(wù)完成了!”我心想,我們?cè)摾^續(xù)撲滅下一場(chǎng)大火。我不知道的是,真正的工作才剛剛開(kāi)始。
模型投入生產(chǎn)運(yùn)行,我們的 QA 團(tuán)隊(duì)開(kāi)始注意到它的性能方面的問(wèn)題。但是我們還有其他的模型要建立,還有其他任務(wù)要做,所以我們沒(méi)有立即去解決這些問(wèn)題。3個(gè)月后,當(dāng)我們研究這些問(wèn)題時(shí),我們發(fā)現(xiàn)訓(xùn)練和驗(yàn)證腳本已經(jīng)全部崩潰,因?yàn)樽晕覀兊谝淮尾渴鹨詠?lái),代碼庫(kù)已經(jīng)發(fā)生了變化。
經(jīng)過(guò)一個(gè)星期的修復(fù),我們查看了過(guò)去幾個(gè)月的故障,意識(shí)到在模型生產(chǎn)運(yùn)行中觀察到的許多問(wèn)題不能通過(guò)修改模型代碼輕松解決,我們需要去收集和標(biāo)記來(lái)自我們公司車輛的新數(shù)據(jù),而不是依靠開(kāi)放源碼的數(shù)據(jù)。這意味著我們需要建立一個(gè)標(biāo)簽流程,包括流程所需要的所有工具、操作和基礎(chǔ)設(shè)施。
又過(guò)了3個(gè)月,我們運(yùn)行了一個(gè)新的模型,這個(gè)模型是根據(jù)我們從車上隨機(jī)選取的數(shù)據(jù)進(jìn)行訓(xùn)練的。然后,用我們自己的工具進(jìn)行標(biāo)記。但是當(dāng)我們開(kāi)始解決簡(jiǎn)單的問(wèn)題時(shí),我們不得不對(duì)哪些變化可能產(chǎn)生結(jié)果變得更加敏銳。
大約90% 的問(wèn)題是通過(guò)對(duì)艱難或罕見(jiàn)的場(chǎng)景進(jìn)行仔細(xì)的數(shù)據(jù)整理來(lái)解決的,而不是通過(guò)深度模型架構(gòu)變更或超參數(shù)調(diào)整。例如,我們發(fā)現(xiàn)模型在雨天的表現(xiàn)很差(在舊金山很罕見(jiàn)),所以我們標(biāo)記了更多雨天的數(shù)據(jù),在新的數(shù)據(jù)上重新訓(xùn)練模型,結(jié)果模型的表現(xiàn)得到了改善。同樣,我們發(fā)現(xiàn)該模型在綠色視錐上的性能較差(與橙色視錐相比較少見(jiàn)),因此我們收集了綠色視錐的數(shù)據(jù),經(jīng)過(guò)了同樣的過(guò)程,模型的性能得到了改善。
我們需要建立一個(gè)可以快速識(shí)別和解決這類問(wèn)題的流程。
花費(fèi)數(shù)個(gè)星期,這個(gè)模型的 1.0 版本組裝好了,又用了6個(gè)月,新推出一個(gè)改進(jìn)版本模型。隨著我們?cè)谝恍┓矫妫ǜ玫貥?biāo)記基礎(chǔ)設(shè)施、云數(shù)據(jù)處理、培訓(xùn)基礎(chǔ)設(shè)施、部署監(jiān)控)的工作越來(lái)越多,大約每月到每周都能重新訓(xùn)練和重新部署模型。
當(dāng)我們從頭開(kāi)始建立更多的模型管道,并努力改善它們,我們開(kāi)始看到一些共同的主題。將我們所學(xué)到的知識(shí)應(yīng)用到新的管道中,更快更省力地運(yùn)行更好的型號(hào)變得容易了。
2
許多不同的自動(dòng)駕駛深度學(xué)習(xí)團(tuán)隊(duì),其模型管道的迭代周期都相當(dāng)相似。從上到下: Waymo,Cruise 和 Tesla。
我曾經(jīng)認(rèn)為,機(jī)器學(xué)習(xí)主要是模型。實(shí)際上,工業(yè)生產(chǎn)中的機(jī)器學(xué)習(xí)主要是管道。成功的最佳預(yù)測(cè)因素之一是在模型管道上有效迭代的能力。這不僅僅意味著快速迭代,還意味著智能迭代,第二部分很關(guān)鍵,否則你的管道很快就會(huì)產(chǎn)生糟糕的模型。
大多數(shù)傳統(tǒng)軟件都強(qiáng)調(diào)快速迭代和敏捷交付過(guò)程,因?yàn)椋a(chǎn)品需求是未知的,必須通過(guò)適應(yīng)來(lái)發(fā)現(xiàn),所以與其在前期用不穩(wěn)定的假設(shè)做詳盡的規(guī)劃,不如快速交付一個(gè)MVP并進(jìn)行迭代。
正如傳統(tǒng)軟件需求是復(fù)雜的一樣,機(jī)器學(xué)習(xí)系統(tǒng)必須處理的數(shù)據(jù)輸入領(lǐng)域確實(shí)很龐大。與正常的軟件開(kāi)發(fā)不同,機(jī)器學(xué)習(xí)模型的質(zhì)量取決于它在代碼中的實(shí)現(xiàn),以及代碼所依賴的數(shù)據(jù)。這種對(duì)數(shù)據(jù)的依賴意味著機(jī)器學(xué)習(xí)模型可以通過(guò)數(shù)據(jù)集構(gòu)建/管理來(lái)“探索”輸入領(lǐng)域,允許它理解任務(wù)要求,并隨著時(shí)間的推移適應(yīng)它,而不必修改代碼。
為了利用這個(gè)特性,機(jī)器學(xué)習(xí)需要一個(gè)連續(xù)學(xué)習(xí)的概念,這個(gè)概念強(qiáng)調(diào)對(duì)數(shù)據(jù)和代碼的迭代。機(jī)器學(xué)習(xí)團(tuán)隊(duì)必須:
發(fā)現(xiàn)數(shù)據(jù)或模型性能中的問(wèn)題
診斷問(wèn)題發(fā)生的原因
改變數(shù)據(jù)或模型代碼以解決這些問(wèn)題
驗(yàn)證模型在重新訓(xùn)練之后變得更好
部署新模型并重復(fù)
團(tuán)隊(duì)?wèi)?yīng)該嘗試至少每個(gè)月都要經(jīng)歷這個(gè)周期。如果你表現(xiàn)好,也許每周都要進(jìn)行。
大型公司可以在不到一天的時(shí)間內(nèi)完成模型部署周期,但是對(duì)于大多數(shù)團(tuán)隊(duì)來(lái)說(shuō),快速而自動(dòng)地構(gòu)建基礎(chǔ)設(shè)施是非常困難的。如果更新模型的頻率低于這個(gè)頻率,就可能導(dǎo)致代碼腐化(模型管道由于代碼庫(kù)的更改而中斷)或數(shù)據(jù)域轉(zhuǎn)移(生產(chǎn)中的模型不能泛化到數(shù)據(jù)隨時(shí)間的變化)。
大型公司可以在一天之內(nèi)完成模型的部署周期,但是對(duì)于大多數(shù)團(tuán)隊(duì)來(lái)說(shuō),快速而自動(dòng)地構(gòu)建基礎(chǔ)設(shè)施是非常困難的。更新模型的頻率如果低于這個(gè)頻率,就會(huì)導(dǎo)致代碼腐化(模型管道由于代碼庫(kù)的更改而中斷)或數(shù)據(jù)域轉(zhuǎn)移(生產(chǎn)中的模型不能泛化到數(shù)據(jù)隨時(shí)間的變化)。
然而,如果處理得當(dāng),團(tuán)隊(duì)可以進(jìn)入一個(gè)良好的節(jié)奏,他們將改進(jìn)后的模型部署到生產(chǎn)環(huán)境中
3
建立反饋回路
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
校準(zhǔn)模型的不確定性是一個(gè)誘人的研究領(lǐng)域,模型可以標(biāo)記它認(rèn)為可能失敗的地方。
對(duì)模型進(jìn)行有效迭代的一個(gè)關(guān)鍵部分是集中精力解決最具影響力的問(wèn)題。要改進(jìn)一個(gè)模型,你需要知道它有什么問(wèn)題,并且能夠根據(jù)產(chǎn)品/業(yè)務(wù)的優(yōu)先級(jí)對(duì)問(wèn)題進(jìn)行分類。建立反饋回路的方法有很多,但是首先要發(fā)現(xiàn)和分類錯(cuò)誤。
利用特定領(lǐng)域的反饋回路。
如果有的話,這可能是獲得模型反饋的非常強(qiáng)大和有效的方法。例如,預(yù)測(cè)任務(wù)可以通過(guò)對(duì)實(shí)際發(fā)生的歷史數(shù)據(jù)進(jìn)行訓(xùn)練來(lái)“免費(fèi) ”獲得標(biāo)簽數(shù)據(jù),使他們能夠不斷地輸入大量的新數(shù)據(jù),并相當(dāng)自動(dòng)地適應(yīng)新情況。
設(shè)置一個(gè)工作流程,讓人可以審查你的模型的輸出,并在發(fā)生錯(cuò)誤時(shí)進(jìn)行標(biāo)記。
當(dāng)人們很容易通過(guò)許多模型推斷捕獲錯(cuò)誤時(shí),這種方法尤其適用。這種情況最常見(jiàn)的發(fā)生方式是當(dāng)客戶注意到模型輸出中的錯(cuò)誤并向機(jī)器學(xué)習(xí)團(tuán)隊(duì)投訴。這是不可低估的,因?yàn)檫@個(gè)渠道可以讓您直接將客戶反饋納入開(kāi)發(fā)周期!一個(gè)團(tuán)隊(duì)可以讓人類雙重檢查客戶可能錯(cuò)過(guò)的模型輸出:想象一下一個(gè)操作人員看著一個(gè)機(jī)器人在傳送帶上對(duì)包進(jìn)行分類,當(dāng)他們發(fā)現(xiàn)一個(gè)錯(cuò)誤發(fā)生時(shí),就點(diǎn)擊一個(gè)按鈕。
設(shè)置一個(gè)工作流程,讓人可以審查你的模型的輸出,并在發(fā)生錯(cuò)誤時(shí)進(jìn)行標(biāo)記。當(dāng)人類審查很容易捕捉到大量模型推論中的錯(cuò)誤時(shí),這就特別合適。最常見(jiàn)的方式是當(dāng)客戶注意到模型輸出中的錯(cuò)誤并向ML團(tuán)隊(duì)投訴時(shí)。這一點(diǎn)不容小覷,因?yàn)檫@個(gè)渠道可以讓你直接將客戶的反饋納入開(kāi)發(fā)周期中 一個(gè)團(tuán)隊(duì)可以讓人類仔細(xì)檢查客戶可能錯(cuò)過(guò)的模型輸出:想想一個(gè)操作人員看著機(jī)器人在傳送帶上分揀包裹,每當(dāng)他們發(fā)現(xiàn)有錯(cuò)誤發(fā)生時(shí)就點(diǎn)擊一個(gè)按鈕。
當(dāng)模型運(yùn)行的頻率太高,以至于人們無(wú)法進(jìn)行檢查時(shí),可以考慮設(shè)置自動(dòng)復(fù)查。
當(dāng)很容易針對(duì)模型輸出編寫“健全性檢查”時(shí),這尤其有用。例如,每當(dāng)激光雷達(dá)目標(biāo)檢測(cè)器和二維圖像目標(biāo)檢測(cè)器不一致時(shí),或者幀到幀檢測(cè)器與時(shí)間跟蹤系統(tǒng)不一致時(shí),標(biāo)記。當(dāng)它工作時(shí),它提供了許多有用的反饋,告訴我們哪里出現(xiàn)了故障情況。當(dāng)它不起作用時(shí),它只是暴露了你的檢查系統(tǒng)中的錯(cuò)誤,或者漏掉了所有系統(tǒng)出錯(cuò)的情況,這是非常低風(fēng)險(xiǎn)高回報(bào)的。
最通用(但困難)的解決方案是分析它所運(yùn)行的數(shù)據(jù)的模型不確定性。
一個(gè)簡(jiǎn)單的例子是查看模型在生產(chǎn)中產(chǎn)生低置信度輸出的例子。這可以表現(xiàn)出模型確實(shí)不確定的地方,但不是100% 精確。有時(shí)候,模型可能是自信地錯(cuò)誤的。有時(shí)模型是不確定的,因?yàn)槿狈捎玫男畔⑦M(jìn)行良好的推理(例如,人們很難理解的有噪聲的輸入數(shù)據(jù))。有一些模型可以解決這些問(wèn)題,但這是一個(gè)活躍的研究領(lǐng)域。
最后,可以利用模型對(duì)訓(xùn)練集的反饋。
例如,檢查模型與其訓(xùn)練/驗(yàn)證數(shù)據(jù)集(即高損失的例子)的不一致表明高可信度失敗或標(biāo)記錯(cuò)誤。神經(jīng)網(wǎng)絡(luò)嵌入分析可以提供一種理解訓(xùn)練/驗(yàn)證數(shù)據(jù)集中故障模式模式的方法,并且可以發(fā)現(xiàn)訓(xùn)練數(shù)據(jù)集和生產(chǎn)數(shù)據(jù)集中原始數(shù)據(jù)分布的差異。
4
自動(dòng)化和委托
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
圖注:大多數(shù)人的時(shí)間很容易從一個(gè)典型的再訓(xùn)練周期中移除。即使這樣做的代價(jià)是降低機(jī)器時(shí)間的效率,它也消除了許多手工操作的痛苦。
加快迭代的主要內(nèi)容是減少完成一個(gè)迭代周期所需的工作量。然而,總是有辦法讓事情變得更簡(jiǎn)單,所以你必須優(yōu)先考慮要改進(jìn)什么。我喜歡用兩種方式來(lái)思考努力:時(shí)鐘時(shí)間和人類時(shí)間。
時(shí)鐘時(shí)間指的是運(yùn)行某些計(jì)算任務(wù)所需的時(shí)間,如數(shù)據(jù)的 ETL、訓(xùn)練模型、運(yùn)行推理、計(jì)算指標(biāo)等。人工時(shí)間指的是人工必須主動(dòng)介入以通過(guò)管道運(yùn)行的時(shí)間,比如手動(dòng)檢查結(jié)果、運(yùn)行命令或在管道中間觸發(fā)腳本。
例如,多個(gè)腳本必須通過(guò)手動(dòng)在步驟之間移動(dòng)文件按順序手動(dòng)運(yùn)行,這種情況非常常見(jiàn),但是很浪費(fèi)。一些紙巾背面的數(shù)學(xué): 如果一個(gè)機(jī)器學(xué)習(xí)工程師每小時(shí)花費(fèi)90美元,手工運(yùn)行腳本每周浪費(fèi)2個(gè)小時(shí),那么每個(gè)人每年加起來(lái)就是9360美元!
將多個(gè)腳本和人工中斷結(jié)合成一個(gè)全自動(dòng)腳本,可以更快、更容易地運(yùn)行一個(gè)模型管道循環(huán),節(jié)省大量資金,并且使您的機(jī)器學(xué)習(xí)工程師不那么古怪。
相比之下,時(shí)鐘時(shí)間通常需要“合理”(例如,可在一夜之間完成)。唯一的例外是機(jī)器學(xué)習(xí)工程師正在進(jìn)行大量的實(shí)驗(yàn),或者存在極端的成本/縮放約束。這是因?yàn)闀r(shí)鐘時(shí)間通常與數(shù)據(jù)規(guī)模和模型復(fù)雜性成正比。當(dāng)從本地處理轉(zhuǎn)移到分布式云處理時(shí),時(shí)鐘時(shí)間會(huì)顯著減少。在此之后,云中的水平擴(kuò)展往往可以解決大多數(shù)團(tuán)隊(duì)的大多數(shù)問(wèn)題,直到問(wèn)題的規(guī)模擴(kuò)大。
不幸的是,將某些任務(wù)完全自動(dòng)化是不可能的。幾乎所有的生產(chǎn)機(jī)器學(xué)習(xí)應(yīng)用程序都是監(jiān)督式學(xué)習(xí)任務(wù),并且大部分依賴于一定數(shù)量的人機(jī)交互來(lái)告訴模型它應(yīng)該做什么。在某些領(lǐng)域,人機(jī)交互是免費(fèi)的(例如,社交媒體推薦用例或其他有大量直接用戶反饋的應(yīng)用程序)。在其他情況下,人類的時(shí)間更有限或更昂貴,例如訓(xùn)練有素的放射科醫(yī)師為訓(xùn)練數(shù)據(jù)“標(biāo)記”CT 掃描。
無(wú)論哪種方式,將改進(jìn)模型所需的人工時(shí)間以及其他成本最小化都很重要。雖然早期的團(tuán)隊(duì)可能依賴機(jī)器學(xué)習(xí)工程師來(lái)管理數(shù)據(jù)集,但是讓一個(gè)沒(méi)有機(jī)器學(xué)習(xí)知識(shí)的操作用戶或者領(lǐng)域?qū)<襾?lái)承擔(dān)數(shù)據(jù)管理的繁重工作通常更經(jīng)濟(jì)(或者對(duì)于放射學(xué)家來(lái)說(shuō),是必要的)。在這一點(diǎn)上,使用良好的軟件工具建立一個(gè)操作過(guò)程來(lái)標(biāo)記、檢查、改進(jìn)和版本控制數(shù)據(jù)集就變得非常重要。
5
鼓勵(lì)ML工程師健身
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
圖注:ML工程師在舉重時(shí),也在提升他們的模型學(xué)習(xí)的權(quán)重
構(gòu)建足夠的工具來(lái)支持一個(gè)新的領(lǐng)域或一個(gè)新的用戶組可能需要花費(fèi)大量的時(shí)間和精力,但是如果做得好,結(jié)果將是非常值得的。在 Cruise 公司,我的一位工程師特別聰明(有人會(huì)說(shuō)他很懶)。
這個(gè)工程師建立了一個(gè)迭代循環(huán),在這個(gè)循環(huán)中,操作反饋和元數(shù)據(jù)查詢的組合將從模型性能較差的地方抽取數(shù)據(jù)進(jìn)行標(biāo)記。然后,一個(gè)離岸作業(yè)團(tuán)隊(duì)將標(biāo)記數(shù)據(jù),并將其添加到新版本的訓(xùn)練數(shù)據(jù)集中。此后,工程師建立基礎(chǔ)設(shè)施,允許他們?cè)陔娔X上運(yùn)行一個(gè)腳本,并啟動(dòng)一系列云任務(wù),自動(dòng)對(duì)新添加的數(shù)據(jù)進(jìn)行再訓(xùn)練和驗(yàn)證一個(gè)簡(jiǎn)單的模型。
每周,他們都會(huì)運(yùn)行 retrain 腳本。然后,在模型訓(xùn)練和驗(yàn)證自己的時(shí)候,他們?nèi)チ私∩矸俊=?jīng)過(guò)幾個(gè)小時(shí)的健身和晚餐后,他們會(huì)回來(lái)檢查結(jié)果。無(wú)獨(dú)有偶,新的和改進(jìn)的數(shù)據(jù)將導(dǎo)致模型的改進(jìn),經(jīng)過(guò)快速的雙重檢查確保一切都有意義,然后他們將新模型運(yùn)送到生產(chǎn)中,汽車的駕駛性能將得到改善。然后,他們花了一周的時(shí)間來(lái)改進(jìn)基礎(chǔ)設(shè)施,實(shí)驗(yàn)新的模型架構(gòu),并建立新的模型管道。這名工程師不僅在本季度末獲得了晉升,而且狀態(tài)很好。
6
結(jié)語(yǔ)
總結(jié)一下: 在研究和原型開(kāi)發(fā)階段,重點(diǎn)是建立和發(fā)布一個(gè)模型。但是,隨著一個(gè)系統(tǒng)進(jìn)入生產(chǎn)階段,核心任務(wù)是建立一個(gè)系統(tǒng),這個(gè)系統(tǒng)能夠以最小的努力定期發(fā)布改進(jìn)的模型。這方面你做得越好,你可以建造的模型就越多!
為此,我們需要關(guān)注以下方面:
以規(guī)律的節(jié)奏運(yùn)行模型管道,并專注于比以前更好的運(yùn)輸模型。每周或更短的時(shí)間內(nèi)獲得一個(gè)新的改進(jìn)型號(hào)投入生產(chǎn)!
建立一個(gè)良好的從模型輸出到開(kāi)發(fā)過(guò)程的反饋回路。找出模型在哪些示例上做得不好,并向您的培訓(xùn)數(shù)據(jù)集中添加更多的示例。
自動(dòng)化管道中特別繁重的任務(wù),并建立一個(gè)團(tuán)隊(duì)結(jié)構(gòu),使您的團(tuán)隊(duì)成員能夠?qū)W⒂谒麄兊膶I(yè)領(lǐng)域。特斯拉的Andrej Karpathy稱理想的最終狀態(tài)為“假期行動(dòng)”。我建議,建立一個(gè)工作流程,讓你的機(jī)器學(xué)習(xí)工程師去健身房,讓你的機(jī)器學(xué)習(xí)管道來(lái)完成繁重的工作!
最后,需要強(qiáng)調(diào)一下,在我的經(jīng)驗(yàn)中,絕大多數(shù)關(guān)于模型性能的問(wèn)題可以用數(shù)據(jù)來(lái)解決,但是有些問(wèn)題只能通過(guò)修改模型代碼來(lái)解決。
這些變化往往是非常特殊的模型架構(gòu)在手頭,例如,在圖像對(duì)象檢測(cè)器工作了若干年后,我花了太多的時(shí)間擔(dān)心最佳先前的盒子分配為某些方位比和提高特征映射對(duì)小對(duì)象的分辨率。
然而,隨著Transformer顯示出成為許多不同深度學(xué)習(xí)任務(wù)的萬(wàn)能模型架構(gòu)類型的希望,我懷疑這些技巧中的更多將變得不那么相關(guān),機(jī)器學(xué)習(xí)發(fā)展的重點(diǎn)將進(jìn)一步轉(zhuǎn)向改進(jìn)數(shù)據(jù)集。
這些年來(lái),我建立了相當(dāng)酷的深度學(xué)習(xí)和計(jì)算機(jī)視覺(jué)堆棧。與我在伯克利做研究的時(shí)候相比,現(xiàn)在有更多的人在生產(chǎn)應(yīng)用程序中使用深度學(xué)習(xí),F(xiàn)在他們面臨的許多問(wèn)題,與我2016年在 Cruise 所面臨的問(wèn)題是一樣的。我有很多在生產(chǎn)中進(jìn)行深度學(xué)習(xí)的經(jīng)驗(yàn)教訓(xùn)想與你們分享,希望大家可以不必通過(guò)艱難的方式來(lái)學(xué)習(xí)它們。
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
圖注:作者團(tuán)隊(duì)開(kāi)發(fā)第一個(gè)部署在汽車上的機(jī)器學(xué)習(xí)模型 1
將ML模型部署到自動(dòng)駕駛車上的故事
首先,讓我談?wù)?Cruise 公司有史以來(lái)第一個(gè)部署在汽車上的ML模型。在我們開(kāi)發(fā)模型的過(guò)程中,工作流程感覺(jué)很像我在研究時(shí)期所習(xí)慣的那樣。我們?cè)陂_(kāi)源數(shù)據(jù)上訓(xùn)練開(kāi)源模型,將之集成到公司產(chǎn)品軟件堆棧中,并部署到汽車上。經(jīng)過(guò)幾個(gè)星期的工作,我們合并的最終 PR, 在汽車上運(yùn)行模型。
“任務(wù)完成了!”我心想,我們?cè)摾^續(xù)撲滅下一場(chǎng)大火。我不知道的是,真正的工作才剛剛開(kāi)始。
模型投入生產(chǎn)運(yùn)行,我們的 QA 團(tuán)隊(duì)開(kāi)始注意到它的性能方面的問(wèn)題。但是我們還有其他的模型要建立,還有其他任務(wù)要做,所以我們沒(méi)有立即去解決這些問(wèn)題。3個(gè)月后,當(dāng)我們研究這些問(wèn)題時(shí),我們發(fā)現(xiàn)訓(xùn)練和驗(yàn)證腳本已經(jīng)全部崩潰,因?yàn)樽晕覀兊谝淮尾渴鹨詠?lái),代碼庫(kù)已經(jīng)發(fā)生了變化。
經(jīng)過(guò)一個(gè)星期的修復(fù),我們查看了過(guò)去幾個(gè)月的故障,意識(shí)到在模型生產(chǎn)運(yùn)行中觀察到的許多問(wèn)題不能通過(guò)修改模型代碼輕松解決,我們需要去收集和標(biāo)記來(lái)自我們公司車輛的新數(shù)據(jù),而不是依靠開(kāi)放源碼的數(shù)據(jù)。這意味著我們需要建立一個(gè)標(biāo)簽流程,包括流程所需要的所有工具、操作和基礎(chǔ)設(shè)施。
又過(guò)了3個(gè)月,我們運(yùn)行了一個(gè)新的模型,這個(gè)模型是根據(jù)我們從車上隨機(jī)選取的數(shù)據(jù)進(jìn)行訓(xùn)練的。然后,用我們自己的工具進(jìn)行標(biāo)記。但是當(dāng)我們開(kāi)始解決簡(jiǎn)單的問(wèn)題時(shí),我們不得不對(duì)哪些變化可能產(chǎn)生結(jié)果變得更加敏銳。
大約90% 的問(wèn)題是通過(guò)對(duì)艱難或罕見(jiàn)的場(chǎng)景進(jìn)行仔細(xì)的數(shù)據(jù)整理來(lái)解決的,而不是通過(guò)深度模型架構(gòu)變更或超參數(shù)調(diào)整。例如,我們發(fā)現(xiàn)模型在雨天的表現(xiàn)很差(在舊金山很罕見(jiàn)),所以我們標(biāo)記了更多雨天的數(shù)據(jù),在新的數(shù)據(jù)上重新訓(xùn)練模型,結(jié)果模型的表現(xiàn)得到了改善。同樣,我們發(fā)現(xiàn)該模型在綠色視錐上的性能較差(與橙色視錐相比較少見(jiàn)),因此我們收集了綠色視錐的數(shù)據(jù),經(jīng)過(guò)了同樣的過(guò)程,模型的性能得到了改善。
我們需要建立一個(gè)可以快速識(shí)別和解決這類問(wèn)題的流程。
花費(fèi)數(shù)個(gè)星期,這個(gè)模型的 1.0 版本組裝好了,又用了6個(gè)月,新推出一個(gè)改進(jìn)版本模型。隨著我們?cè)谝恍┓矫妫ǜ玫貥?biāo)記基礎(chǔ)設(shè)施、云數(shù)據(jù)處理、培訓(xùn)基礎(chǔ)設(shè)施、部署監(jiān)控)的工作越來(lái)越多,大約每月到每周都能重新訓(xùn)練和重新部署模型。
當(dāng)我們從頭開(kāi)始建立更多的模型管道,并努力改善它們,我們開(kāi)始看到一些共同的主題。將我們所學(xué)到的知識(shí)應(yīng)用到新的管道中,更快更省力地運(yùn)行更好的型號(hào)變得容易了。
2
許多不同的自動(dòng)駕駛深度學(xué)習(xí)團(tuán)隊(duì),其模型管道的迭代周期都相當(dāng)相似。從上到下: Waymo,Cruise 和 Tesla。
我曾經(jīng)認(rèn)為,機(jī)器學(xué)習(xí)主要是模型。實(shí)際上,工業(yè)生產(chǎn)中的機(jī)器學(xué)習(xí)主要是管道。成功的最佳預(yù)測(cè)因素之一是在模型管道上有效迭代的能力。這不僅僅意味著快速迭代,還意味著智能迭代,第二部分很關(guān)鍵,否則你的管道很快就會(huì)產(chǎn)生糟糕的模型。
大多數(shù)傳統(tǒng)軟件都強(qiáng)調(diào)快速迭代和敏捷交付過(guò)程,因?yàn)椋a(chǎn)品需求是未知的,必須通過(guò)適應(yīng)來(lái)發(fā)現(xiàn),所以與其在前期用不穩(wěn)定的假設(shè)做詳盡的規(guī)劃,不如快速交付一個(gè)MVP并進(jìn)行迭代。
正如傳統(tǒng)軟件需求是復(fù)雜的一樣,機(jī)器學(xué)習(xí)系統(tǒng)必須處理的數(shù)據(jù)輸入領(lǐng)域確實(shí)很龐大。與正常的軟件開(kāi)發(fā)不同,機(jī)器學(xué)習(xí)模型的質(zhì)量取決于它在代碼中的實(shí)現(xiàn),以及代碼所依賴的數(shù)據(jù)。這種對(duì)數(shù)據(jù)的依賴意味著機(jī)器學(xué)習(xí)模型可以通過(guò)數(shù)據(jù)集構(gòu)建/管理來(lái)“探索”輸入領(lǐng)域,允許它理解任務(wù)要求,并隨著時(shí)間的推移適應(yīng)它,而不必修改代碼。
為了利用這個(gè)特性,機(jī)器學(xué)習(xí)需要一個(gè)連續(xù)學(xué)習(xí)的概念,這個(gè)概念強(qiáng)調(diào)對(duì)數(shù)據(jù)和代碼的迭代。機(jī)器學(xué)習(xí)團(tuán)隊(duì)必須:
發(fā)現(xiàn)數(shù)據(jù)或模型性能中的問(wèn)題
診斷問(wèn)題發(fā)生的原因
改變數(shù)據(jù)或模型代碼以解決這些問(wèn)題
驗(yàn)證模型在重新訓(xùn)練之后變得更好
部署新模型并重復(fù)
團(tuán)隊(duì)?wèi)?yīng)該嘗試至少每個(gè)月都要經(jīng)歷這個(gè)周期。如果你表現(xiàn)好,也許每周都要進(jìn)行。
大型公司可以在不到一天的時(shí)間內(nèi)完成模型部署周期,但是對(duì)于大多數(shù)團(tuán)隊(duì)來(lái)說(shuō),快速而自動(dòng)地構(gòu)建基礎(chǔ)設(shè)施是非常困難的。如果更新模型的頻率低于這個(gè)頻率,就可能導(dǎo)致代碼腐化(模型管道由于代碼庫(kù)的更改而中斷)或數(shù)據(jù)域轉(zhuǎn)移(生產(chǎn)中的模型不能泛化到數(shù)據(jù)隨時(shí)間的變化)。
大型公司可以在一天之內(nèi)完成模型的部署周期,但是對(duì)于大多數(shù)團(tuán)隊(duì)來(lái)說(shuō),快速而自動(dòng)地構(gòu)建基礎(chǔ)設(shè)施是非常困難的。更新模型的頻率如果低于這個(gè)頻率,就會(huì)導(dǎo)致代碼腐化(模型管道由于代碼庫(kù)的更改而中斷)或數(shù)據(jù)域轉(zhuǎn)移(生產(chǎn)中的模型不能泛化到數(shù)據(jù)隨時(shí)間的變化)。
然而,如果處理得當(dāng),團(tuán)隊(duì)可以進(jìn)入一個(gè)良好的節(jié)奏,他們將改進(jìn)后的模型部署到生產(chǎn)環(huán)境中
3
建立反饋回路
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
校準(zhǔn)模型的不確定性是一個(gè)誘人的研究領(lǐng)域,模型可以標(biāo)記它認(rèn)為可能失敗的地方。
對(duì)模型進(jìn)行有效迭代的一個(gè)關(guān)鍵部分是集中精力解決最具影響力的問(wèn)題。要改進(jìn)一個(gè)模型,你需要知道它有什么問(wèn)題,并且能夠根據(jù)產(chǎn)品/業(yè)務(wù)的優(yōu)先級(jí)對(duì)問(wèn)題進(jìn)行分類。建立反饋回路的方法有很多,但是首先要發(fā)現(xiàn)和分類錯(cuò)誤。
利用特定領(lǐng)域的反饋回路。
如果有的話,這可能是獲得模型反饋的非常強(qiáng)大和有效的方法。例如,預(yù)測(cè)任務(wù)可以通過(guò)對(duì)實(shí)際發(fā)生的歷史數(shù)據(jù)進(jìn)行訓(xùn)練來(lái)“免費(fèi) ”獲得標(biāo)簽數(shù)據(jù),使他們能夠不斷地輸入大量的新數(shù)據(jù),并相當(dāng)自動(dòng)地適應(yīng)新情況。
設(shè)置一個(gè)工作流程,讓人可以審查你的模型的輸出,并在發(fā)生錯(cuò)誤時(shí)進(jìn)行標(biāo)記。
當(dāng)人們很容易通過(guò)許多模型推斷捕獲錯(cuò)誤時(shí),這種方法尤其適用。這種情況最常見(jiàn)的發(fā)生方式是當(dāng)客戶注意到模型輸出中的錯(cuò)誤并向機(jī)器學(xué)習(xí)團(tuán)隊(duì)投訴。這是不可低估的,因?yàn)檫@個(gè)渠道可以讓您直接將客戶反饋納入開(kāi)發(fā)周期!一個(gè)團(tuán)隊(duì)可以讓人類雙重檢查客戶可能錯(cuò)過(guò)的模型輸出:想象一下一個(gè)操作人員看著一個(gè)機(jī)器人在傳送帶上對(duì)包進(jìn)行分類,當(dāng)他們發(fā)現(xiàn)一個(gè)錯(cuò)誤發(fā)生時(shí),就點(diǎn)擊一個(gè)按鈕。
設(shè)置一個(gè)工作流程,讓人可以審查你的模型的輸出,并在發(fā)生錯(cuò)誤時(shí)進(jìn)行標(biāo)記。當(dāng)人類審查很容易捕捉到大量模型推論中的錯(cuò)誤時(shí),這就特別合適。最常見(jiàn)的方式是當(dāng)客戶注意到模型輸出中的錯(cuò)誤并向ML團(tuán)隊(duì)投訴時(shí)。這一點(diǎn)不容小覷,因?yàn)檫@個(gè)渠道可以讓你直接將客戶的反饋納入開(kāi)發(fā)周期中 一個(gè)團(tuán)隊(duì)可以讓人類仔細(xì)檢查客戶可能錯(cuò)過(guò)的模型輸出:想想一個(gè)操作人員看著機(jī)器人在傳送帶上分揀包裹,每當(dāng)他們發(fā)現(xiàn)有錯(cuò)誤發(fā)生時(shí)就點(diǎn)擊一個(gè)按鈕。
當(dāng)模型運(yùn)行的頻率太高,以至于人們無(wú)法進(jìn)行檢查時(shí),可以考慮設(shè)置自動(dòng)復(fù)查。
當(dāng)很容易針對(duì)模型輸出編寫“健全性檢查”時(shí),這尤其有用。例如,每當(dāng)激光雷達(dá)目標(biāo)檢測(cè)器和二維圖像目標(biāo)檢測(cè)器不一致時(shí),或者幀到幀檢測(cè)器與時(shí)間跟蹤系統(tǒng)不一致時(shí),標(biāo)記。當(dāng)它工作時(shí),它提供了許多有用的反饋,告訴我們哪里出現(xiàn)了故障情況。當(dāng)它不起作用時(shí),它只是暴露了你的檢查系統(tǒng)中的錯(cuò)誤,或者漏掉了所有系統(tǒng)出錯(cuò)的情況,這是非常低風(fēng)險(xiǎn)高回報(bào)的。
最通用(但困難)的解決方案是分析它所運(yùn)行的數(shù)據(jù)的模型不確定性。
一個(gè)簡(jiǎn)單的例子是查看模型在生產(chǎn)中產(chǎn)生低置信度輸出的例子。這可以表現(xiàn)出模型確實(shí)不確定的地方,但不是100% 精確。有時(shí)候,模型可能是自信地錯(cuò)誤的。有時(shí)模型是不確定的,因?yàn)槿狈捎玫男畔⑦M(jìn)行良好的推理(例如,人們很難理解的有噪聲的輸入數(shù)據(jù))。有一些模型可以解決這些問(wèn)題,但這是一個(gè)活躍的研究領(lǐng)域。
最后,可以利用模型對(duì)訓(xùn)練集的反饋。
例如,檢查模型與其訓(xùn)練/驗(yàn)證數(shù)據(jù)集(即高損失的例子)的不一致表明高可信度失敗或標(biāo)記錯(cuò)誤。神經(jīng)網(wǎng)絡(luò)嵌入分析可以提供一種理解訓(xùn)練/驗(yàn)證數(shù)據(jù)集中故障模式模式的方法,并且可以發(fā)現(xiàn)訓(xùn)練數(shù)據(jù)集和生產(chǎn)數(shù)據(jù)集中原始數(shù)據(jù)分布的差異。
4
自動(dòng)化和委托
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
圖注:大多數(shù)人的時(shí)間很容易從一個(gè)典型的再訓(xùn)練周期中移除。即使這樣做的代價(jià)是降低機(jī)器時(shí)間的效率,它也消除了許多手工操作的痛苦。
加快迭代的主要內(nèi)容是減少完成一個(gè)迭代周期所需的工作量。然而,總是有辦法讓事情變得更簡(jiǎn)單,所以你必須優(yōu)先考慮要改進(jìn)什么。我喜歡用兩種方式來(lái)思考努力:時(shí)鐘時(shí)間和人類時(shí)間。
時(shí)鐘時(shí)間指的是運(yùn)行某些計(jì)算任務(wù)所需的時(shí)間,如數(shù)據(jù)的 ETL、訓(xùn)練模型、運(yùn)行推理、計(jì)算指標(biāo)等。人工時(shí)間指的是人工必須主動(dòng)介入以通過(guò)管道運(yùn)行的時(shí)間,比如手動(dòng)檢查結(jié)果、運(yùn)行命令或在管道中間觸發(fā)腳本。
例如,多個(gè)腳本必須通過(guò)手動(dòng)在步驟之間移動(dòng)文件按順序手動(dòng)運(yùn)行,這種情況非常常見(jiàn),但是很浪費(fèi)。一些紙巾背面的數(shù)學(xué): 如果一個(gè)機(jī)器學(xué)習(xí)工程師每小時(shí)花費(fèi)90美元,手工運(yùn)行腳本每周浪費(fèi)2個(gè)小時(shí),那么每個(gè)人每年加起來(lái)就是9360美元!
將多個(gè)腳本和人工中斷結(jié)合成一個(gè)全自動(dòng)腳本,可以更快、更容易地運(yùn)行一個(gè)模型管道循環(huán),節(jié)省大量資金,并且使您的機(jī)器學(xué)習(xí)工程師不那么古怪。
相比之下,時(shí)鐘時(shí)間通常需要“合理”(例如,可在一夜之間完成)。唯一的例外是機(jī)器學(xué)習(xí)工程師正在進(jìn)行大量的實(shí)驗(yàn),或者存在極端的成本/縮放約束。這是因?yàn)闀r(shí)鐘時(shí)間通常與數(shù)據(jù)規(guī)模和模型復(fù)雜性成正比。當(dāng)從本地處理轉(zhuǎn)移到分布式云處理時(shí),時(shí)鐘時(shí)間會(huì)顯著減少。在此之后,云中的水平擴(kuò)展往往可以解決大多數(shù)團(tuán)隊(duì)的大多數(shù)問(wèn)題,直到問(wèn)題的規(guī)模擴(kuò)大。
不幸的是,將某些任務(wù)完全自動(dòng)化是不可能的。幾乎所有的生產(chǎn)機(jī)器學(xué)習(xí)應(yīng)用程序都是監(jiān)督式學(xué)習(xí)任務(wù),并且大部分依賴于一定數(shù)量的人機(jī)交互來(lái)告訴模型它應(yīng)該做什么。在某些領(lǐng)域,人機(jī)交互是免費(fèi)的(例如,社交媒體推薦用例或其他有大量直接用戶反饋的應(yīng)用程序)。在其他情況下,人類的時(shí)間更有限或更昂貴,例如訓(xùn)練有素的放射科醫(yī)師為訓(xùn)練數(shù)據(jù)“標(biāo)記”CT 掃描。
無(wú)論哪種方式,將改進(jìn)模型所需的人工時(shí)間以及其他成本最小化都很重要。雖然早期的團(tuán)隊(duì)可能依賴機(jī)器學(xué)習(xí)工程師來(lái)管理數(shù)據(jù)集,但是讓一個(gè)沒(méi)有機(jī)器學(xué)習(xí)知識(shí)的操作用戶或者領(lǐng)域?qū)<襾?lái)承擔(dān)數(shù)據(jù)管理的繁重工作通常更經(jīng)濟(jì)(或者對(duì)于放射學(xué)家來(lái)說(shuō),是必要的)。在這一點(diǎn)上,使用良好的軟件工具建立一個(gè)操作過(guò)程來(lái)標(biāo)記、檢查、改進(jìn)和版本控制數(shù)據(jù)集就變得非常重要。
5
鼓勵(lì)ML工程師健身
Aquarium華人CEO分享:機(jī)器學(xué)習(xí)在自動(dòng)駕駛中落地,核心不是模型,是管道
圖注:ML工程師在舉重時(shí),也在提升他們的模型學(xué)習(xí)的權(quán)重
構(gòu)建足夠的工具來(lái)支持一個(gè)新的領(lǐng)域或一個(gè)新的用戶組可能需要花費(fèi)大量的時(shí)間和精力,但是如果做得好,結(jié)果將是非常值得的。在 Cruise 公司,我的一位工程師特別聰明(有人會(huì)說(shuō)他很懶)。
這個(gè)工程師建立了一個(gè)迭代循環(huán),在這個(gè)循環(huán)中,操作反饋和元數(shù)據(jù)查詢的組合將從模型性能較差的地方抽取數(shù)據(jù)進(jìn)行標(biāo)記。然后,一個(gè)離岸作業(yè)團(tuán)隊(duì)將標(biāo)記數(shù)據(jù),并將其添加到新版本的訓(xùn)練數(shù)據(jù)集中。此后,工程師建立基礎(chǔ)設(shè)施,允許他們?cè)陔娔X上運(yùn)行一個(gè)腳本,并啟動(dòng)一系列云任務(wù),自動(dòng)對(duì)新添加的數(shù)據(jù)進(jìn)行再訓(xùn)練和驗(yàn)證一個(gè)簡(jiǎn)單的模型。
每周,他們都會(huì)運(yùn)行 retrain 腳本。然后,在模型訓(xùn)練和驗(yàn)證自己的時(shí)候,他們?nèi)チ私∩矸俊=?jīng)過(guò)幾個(gè)小時(shí)的健身和晚餐后,他們會(huì)回來(lái)檢查結(jié)果。無(wú)獨(dú)有偶,新的和改進(jìn)的數(shù)據(jù)將導(dǎo)致模型的改進(jìn),經(jīng)過(guò)快速的雙重檢查確保一切都有意義,然后他們將新模型運(yùn)送到生產(chǎn)中,汽車的駕駛性能將得到改善。然后,他們花了一周的時(shí)間來(lái)改進(jìn)基礎(chǔ)設(shè)施,實(shí)驗(yàn)新的模型架構(gòu),并建立新的模型管道。這名工程師不僅在本季度末獲得了晉升,而且狀態(tài)很好。
6
結(jié)語(yǔ)
總結(jié)一下: 在研究和原型開(kāi)發(fā)階段,重點(diǎn)是建立和發(fā)布一個(gè)模型。但是,隨著一個(gè)系統(tǒng)進(jìn)入生產(chǎn)階段,核心任務(wù)是建立一個(gè)系統(tǒng),這個(gè)系統(tǒng)能夠以最小的努力定期發(fā)布改進(jìn)的模型。這方面你做得越好,你可以建造的模型就越多!
為此,我們需要關(guān)注以下方面:
以規(guī)律的節(jié)奏運(yùn)行模型管道,并專注于比以前更好的運(yùn)輸模型。每周或更短的時(shí)間內(nèi)獲得一個(gè)新的改進(jìn)型號(hào)投入生產(chǎn)!
建立一個(gè)良好的從模型輸出到開(kāi)發(fā)過(guò)程的反饋回路。找出模型在哪些示例上做得不好,并向您的培訓(xùn)數(shù)據(jù)集中添加更多的示例。
自動(dòng)化管道中特別繁重的任務(wù),并建立一個(gè)團(tuán)隊(duì)結(jié)構(gòu),使您的團(tuán)隊(duì)成員能夠?qū)W⒂谒麄兊膶I(yè)領(lǐng)域。特斯拉的Andrej Karpathy稱理想的最終狀態(tài)為“假期行動(dòng)”。我建議,建立一個(gè)工作流程,讓你的機(jī)器學(xué)習(xí)工程師去健身房,讓你的機(jī)器學(xué)習(xí)管道來(lái)完成繁重的工作!
最后,需要強(qiáng)調(diào)一下,在我的經(jīng)驗(yàn)中,絕大多數(shù)關(guān)于模型性能的問(wèn)題可以用數(shù)據(jù)來(lái)解決,但是有些問(wèn)題只能通過(guò)修改模型代碼來(lái)解決。
這些變化往往是非常特殊的模型架構(gòu)在手頭,例如,在圖像對(duì)象檢測(cè)器工作了若干年后,我花了太多的時(shí)間擔(dān)心最佳先前的盒子分配為某些方位比和提高特征映射對(duì)小對(duì)象的分辨率。
然而,隨著Transformer顯示出成為許多不同深度學(xué)習(xí)任務(wù)的萬(wàn)能模型架構(gòu)類型的希望,我懷疑這些技巧中的更多將變得不那么相關(guān),機(jī)器學(xué)習(xí)發(fā)展的重點(diǎn)將進(jìn)一步轉(zhuǎn)向改進(jìn)數(shù)據(jù)集。