編者按:Insight Data Science AI負(fù)責(zé)人Emmanuel Ameisen和前百度硅谷人工智能實(shí)驗(yàn)室主管Adam Coates分享了快速交付機(jī)器學(xué)習(xí)項(xiàng)目的經(jīng)驗(yàn)。
由于機(jī)器學(xué)習(xí)(ML)日益成為每個(gè)產(chǎn)業(yè)的重要組成部分,對(duì)機(jī)器學(xué)習(xí)工程師的需求增長(zhǎng)迅猛。機(jī)器學(xué)習(xí)工程師結(jié)合機(jī)器學(xué)習(xí)技術(shù)與軟件工程知識(shí),為給定的應(yīng)用尋求表現(xiàn)優(yōu)異的模型,同時(shí)處理隨之而來(lái)的實(shí)現(xiàn)的挑戰(zhàn)——從創(chuàng)建訓(xùn)練基礎(chǔ)設(shè)施到為部署模型做準(zhǔn)備。雖然網(wǎng)上不斷出現(xiàn)訓(xùn)練工程師創(chuàng)建ML模型并解決遇到的各種軟件挑戰(zhàn)的資源,而新ML團(tuán)隊(duì)最常遇到的一個(gè)障礙卻是保持和傳統(tǒng)軟件工程同等水準(zhǔn)的進(jìn)度。
這一挑戰(zhàn)最關(guān)鍵的原因是開(kāi)發(fā)新ML模型的過(guò)程從一開(kāi)始就是高度不確定的。畢竟,在最后的訓(xùn)練完成之前,很難知曉模型表現(xiàn)有多好,更別說(shuō)大量的調(diào)參和采用不同的建模假定對(duì)模型表現(xiàn)有什么影響了。
多種職業(yè)人士面臨類(lèi)似的情況:軟件和商業(yè)開(kāi)發(fā)者,尋求產(chǎn)品-市場(chǎng)契合的初創(chuàng)企業(yè),處于信息有限的演習(xí)之中的飛行員。每種職業(yè)人士采用一種常見(jiàn)框架以幫助團(tuán)隊(duì)在不確定的情況下高效作業(yè):軟件開(kāi)發(fā)的敏捷原則,精益創(chuàng)業(yè),美國(guó)空軍的OODA循環(huán)。機(jī)器學(xué)習(xí)工程師可以遵循類(lèi)似的框架,應(yīng)對(duì)不確定性,迅速交付偉大的產(chǎn)品。
ML工程循環(huán)
本文將介紹機(jī)器學(xué)習(xí)的OODA循環(huán):ML工程循環(huán),其中ML工程師不斷進(jìn)行以下四個(gè)步驟:
分析
選型
實(shí)現(xiàn)
測(cè)量
從而快速、高效地發(fā)現(xiàn)最佳模型,并適應(yīng)未知數(shù)據(jù)。此外,我們也為每個(gè)階段提供了具體的竅門(mén),并將介紹如何優(yōu)化整個(gè)過(guò)程。
ML團(tuán)隊(duì)的成功常常意味著交付滿足給定限制的表現(xiàn)優(yōu)異的模型——例如,在滿足內(nèi)存占用、推理時(shí)間、公平性等限制的前提下,達(dá)到較高的預(yù)測(cè)精確度。表現(xiàn)是由和最終產(chǎn)品最相關(guān)的測(cè)度定義的,不管它是精確度,速度,還是輸出的多樣性。出于簡(jiǎn)單性,下文的表現(xiàn)測(cè)度我們選擇了最小化“誤差率”。
剛開(kāi)始著手一個(gè)新項(xiàng)目時(shí),你應(yīng)該精確地定義成功標(biāo)準(zhǔn),之后將其轉(zhuǎn)換為模型測(cè)度。用產(chǎn)品術(shù)語(yǔ)來(lái)說(shuō),服務(wù)需要具備什么級(jí)別的表現(xiàn)才有用?例如,如果新聞平臺(tái)向用戶分別推薦5篇文章,其中需要多少篇用戶相關(guān)的文章,我們又如何定義相關(guān)性?給定表現(xiàn)標(biāo)準(zhǔn)和現(xiàn)有數(shù)據(jù),你可以創(chuàng)建的最簡(jiǎn)單的模型是什么?
ML工程循環(huán)的目的是提供一個(gè)開(kāi)發(fā)過(guò)程中牢記的心智模型,簡(jiǎn)化決策過(guò)程,以集中精力處理下一個(gè)重要步驟。隨著從業(yè)者經(jīng)驗(yàn)的積累,這一過(guò)程變?yōu)閺臉I(yè)者的第二本能,可以快速果斷地在分析和實(shí)現(xiàn)間切換。話是這么說(shuō),不過(guò),當(dāng)不確定性增加時(shí),即使是最有經(jīng)驗(yàn)的工程師也會(huì)發(fā)現(xiàn)這一框架價(jià)值非凡——例如,模型出乎意料地沒(méi)能滿足需求,團(tuán)隊(duì)目標(biāo)突然調(diào)整(例如,為了體現(xiàn)產(chǎn)品需求的變動(dòng),測(cè)試集做了改動(dòng)),團(tuán)隊(duì)進(jìn)程因缺乏目標(biāo)而停滯。
開(kāi)始
為了啟動(dòng)這一循環(huán),你應(yīng)該先從一個(gè)基本不涉及不確定性的最小實(shí)現(xiàn)開(kāi)始。通常我們想要盡可能快地“得到一個(gè)數(shù)字”——?jiǎng)?chuàng)建一個(gè)足以評(píng)估表現(xiàn)并開(kāi)始迭代的系統(tǒng)。這通常意味著:
開(kāi)始設(shè)置訓(xùn)練、驗(yàn)證、測(cè)試集。
實(shí)現(xiàn)一個(gè)可以工作的簡(jiǎn)單模型。
例如,如果我們需要?jiǎng)?chuàng)建一個(gè)樹(shù)檢測(cè)器以調(diào)查某一區(qū)域的樹(shù)木,我們也許可以使用相關(guān)Kaggle競(jìng)賽中現(xiàn)成的數(shù)據(jù)作為訓(xùn)練集,并使用我們自行收集的一組目標(biāo)區(qū)域的照片作為驗(yàn)證集和測(cè)試集。我們接著可以在原始像素上運(yùn)行邏輯回歸,或者在訓(xùn)練圖像上運(yùn)行預(yù)訓(xùn)練好的網(wǎng)絡(luò)(比如ResNet)。這里的目標(biāo)不是一下子完結(jié)這個(gè)項(xiàng)目,而是開(kāi)啟我們的迭代循環(huán)。下面是一些有助于你達(dá)成這一點(diǎn)的竅門(mén):
竅門(mén)
關(guān)于良好的測(cè)試集:
由于團(tuán)隊(duì)的目標(biāo)是在測(cè)試集上取得較優(yōu)表現(xiàn),測(cè)試集實(shí)質(zhì)上描述了團(tuán)隊(duì)的目標(biāo)。因此,測(cè)試集應(yīng)當(dāng)反映產(chǎn)品或業(yè)務(wù)的需求。例如,如果你正創(chuàng)建一個(gè)基于自拍檢測(cè)皮膚狀況的應(yīng)用,你可以在任意圖像上訓(xùn)練,但需確保測(cè)試集包含光照和畫(huà)質(zhì)不佳的圖像,因?yàn)橐恍┳耘暮芸赡艹霈F(xiàn)這類(lèi)情況。
改變測(cè)試集意味著調(diào)整團(tuán)隊(duì)的目標(biāo),所以最好及早固定測(cè)試集,僅當(dāng)項(xiàng)目、產(chǎn)品、業(yè)務(wù)目標(biāo)發(fā)生變動(dòng)時(shí)才改動(dòng)測(cè)試集。
盡量使測(cè)試集和驗(yàn)證集足夠大,這樣才能得到足夠精確的表現(xiàn)測(cè)度,從而很好地區(qū)分不同的模型。如果測(cè)試集太小,你最終將基于噪聲數(shù)據(jù)得出結(jié)論。
類(lèi)似地,你應(yīng)該在實(shí)際情況允許的情況下,盡可能確保測(cè)試集和驗(yàn)證集的標(biāo)簽和標(biāo)注足夠精確。錯(cuò)誤標(biāo)注的測(cè)試集差不多等于沒(méi)有正確說(shuō)明的產(chǎn)品需求。
了解人類(lèi)或現(xiàn)存/競(jìng)爭(zhēng)系統(tǒng)在測(cè)試集上的表現(xiàn)很有幫助。這給出了最優(yōu)誤差率的界限,也就是你可能取得的最佳表現(xiàn)。
對(duì)許多任務(wù)而言,達(dá)到和人類(lèi)相當(dāng)?shù)乃浇?jīng)常是一個(gè)很好的長(zhǎng)期目標(biāo)。在任何情況下,最終目標(biāo)都是使測(cè)試表現(xiàn)盡可能接近我們猜測(cè)的最佳表現(xiàn)。
關(guān)于驗(yàn)證集和訓(xùn)練集:
驗(yàn)證集是測(cè)試表現(xiàn)的代理,可用于調(diào)整超參數(shù)。因此,驗(yàn)證集的分布應(yīng)當(dāng)和測(cè)試集一致。不過(guò),理想情形下,驗(yàn)證集和測(cè)試集應(yīng)該來(lái)自不同組別的用戶/輸入,這可以避免數(shù)據(jù)泄露。確保這一點(diǎn)的一個(gè)好辦法是首先積累大量樣本,然后打亂順序,之后將其分割為驗(yàn)證集和測(cè)試集。
如果在你的設(shè)想中,產(chǎn)品數(shù)據(jù)會(huì)有很多噪聲,確保訓(xùn)練集考慮到了噪聲問(wèn)題(比如使用數(shù)據(jù)增強(qiáng)或數(shù)據(jù)劣化)。你不能期望完全在銳利圖像上訓(xùn)練的模型能很好地推廣到模糊圖像。
實(shí)現(xiàn)了初始原型之后,你應(yīng)該在訓(xùn)練集、驗(yàn)證集、測(cè)試集上測(cè)試它的表現(xiàn)。這標(biāo)志著你度過(guò)了循環(huán)的第一個(gè)(退化的)周期。評(píng)估測(cè)試表現(xiàn)和有用的產(chǎn)品所需表現(xiàn)之間的差距。現(xiàn)在到了開(kāi)啟迭代的時(shí)刻了!
分析
識(shí)別表現(xiàn)瓶頸
在實(shí)踐中,可能有許多交叉的問(wèn)題導(dǎo)致了當(dāng)前的結(jié)果,但你的目標(biāo)是首先找出最明顯的問(wèn)題,這樣你就可以快速解決它。不要拘泥于試圖完全理解所有缺陷——轉(zhuǎn)而理解最關(guān)鍵的因素,因?yàn)樵谀愀倪M(jìn)模型之后,許多小問(wèn)題會(huì)改變,甚至消失。
我們下面列出了一些常見(jiàn)的診斷。選擇從哪方面開(kāi)始多多少少是門(mén)手藝,但隨著ML工程循環(huán)的進(jìn)行,你將逐漸獲得嘗試哪個(gè)的直覺(jué)。
對(duì)所有分析而言,一個(gè)很好的起點(diǎn)是查看訓(xùn)練集、驗(yàn)證集、測(cè)試集上的表現(xiàn)。我們建議你寫(xiě)代碼在每次試驗(yàn)后自動(dòng)進(jìn)行這一比較,養(yǎng)成習(xí)慣。平均來(lái)說(shuō),我們有:訓(xùn)練集誤差 <= 驗(yàn)證集誤差 <= 測(cè)試集誤差?(如果三個(gè)數(shù)據(jù)集中的數(shù)據(jù)遵循同一分布)。基于上一次試驗(yàn)的訓(xùn)練、驗(yàn)證、測(cè)試誤差率,你可以快速地獲知哪個(gè)因素是當(dāng)前最大的限制。例如,如果訓(xùn)練誤差和驗(yàn)證誤差存在一定差距,那么訓(xùn)練誤差是提升表現(xiàn)的瓶頸。
診斷
如果訓(xùn)練集誤差是當(dāng)前的限制因素,那么可能的問(wèn)題有:
優(yōu)化算法(例如,深度神經(jīng)網(wǎng)絡(luò)的梯度下降)沒(méi)有調(diào)整準(zhǔn)確。看看學(xué)習(xí)曲線,損失有沒(méi)有下降。檢查下是否能夠過(guò)擬合一個(gè)小很多的數(shù)據(jù)集(例如,在單個(gè)minibatch甚至單個(gè)樣本上訓(xùn)練)。你可以可視化神經(jīng)元反應(yīng)的直方圖,看看它們有沒(méi)有飽和(這可能會(huì)導(dǎo)致梯度消失)。
訓(xùn)練集可能有標(biāo)注錯(cuò)誤或毀壞的數(shù)據(jù)。在傳給訓(xùn)練算法前,手工檢查一些訓(xùn)練樣本。
模型可能過(guò)小、過(guò)于簡(jiǎn)單。例如,如果你在高度非線性的問(wèn)題上應(yīng)用線性回歸,你的模型無(wú)法很好地?cái)M合數(shù)據(jù)。我們稱(chēng)為高偏差或欠擬合。
如果驗(yàn)證集誤差是當(dāng)前的限制因素,那么可能的問(wèn)題有:
模型可能過(guò)大、過(guò)于復(fù)雜,或者正則化不夠。我們稱(chēng)為高方差或過(guò)擬合。
訓(xùn)練數(shù)據(jù)不足。
訓(xùn)練數(shù)據(jù)的分布和驗(yàn)證集、測(cè)試集分布不同。
模型的超參數(shù)設(shè)得不好。如果你搜索最佳超參數(shù)(比如特征集、正則項(xiàng)),那可能是搜索方法難以找到較好的選擇。
模型編碼的“歸納先驗(yàn)”和模型匹配不好。例如,如果數(shù)據(jù)集用一個(gè)線性函數(shù)表示更自然,使用最近鄰方法也許很難推廣,除非你有海量訓(xùn)練數(shù)據(jù)。
如果測(cè)試集誤差是當(dāng)前的限制因素,這常常是因?yàn)轵?yàn)證集太小,或者團(tuán)隊(duì)在多次嘗試的過(guò)程中過(guò)擬合驗(yàn)證集了。
不管是上面哪種情況,你都可以通過(guò)手工檢查一組模型出錯(cuò)的隨機(jī)樣本,理解模型的缺陷(一般情況下你不應(yīng)該在測(cè)試集上這么做,以避免在測(cè)試樣本上“訓(xùn)練”系統(tǒng))。
通過(guò)可視化數(shù)據(jù)嘗試識(shí)別常見(jiàn)類(lèi)型的誤差。然后檢查樣本,記錄每種類(lèi)型的誤差出現(xiàn)的頻率。分類(lèi)問(wèn)題可以看下混淆矩陣,找出表現(xiàn)最差的分類(lèi)。接著你就可以集中精力解決導(dǎo)致最多錯(cuò)誤的那類(lèi)誤差。
有些樣本可能錯(cuò)誤標(biāo)注了,或者有多種合理的標(biāo)簽。
有些樣本可能比其他樣本更難判斷,或者缺乏做出判斷需要的上下文。在若干種誤差同樣常見(jiàn)的時(shí)候,將一些樣本標(biāo)記為“很難”也許有助于你將精力花在容易得到改進(jìn)的地方。類(lèi)似地,將一些樣本標(biāo)記為“很容易”也許有助于你找出系統(tǒng)中細(xì)小的錯(cuò)誤,導(dǎo)致模型在容易的情形上犯錯(cuò)。這有點(diǎn)像在數(shù)據(jù)的不同子集上估計(jì)“最優(yōu)誤差率”,接著深入進(jìn)展空間最大的子集。
注意,上面的許多診斷有著直接、明顯的解決方案。例如,如果訓(xùn)練數(shù)據(jù)太少了,那就獲取更多訓(xùn)練數(shù)據(jù)!我們發(fā)現(xiàn)在心智上分隔分析階段和(下面的)選型階段是有幫助的,因?yàn)槲覀兒苋菀紫萑腚S機(jī)嘗試各種方法,而沒(méi)有真正分析背后問(wèn)題的狀況。另外,保持開(kāi)闊的思路,勤于返回誤差分析階段,經(jīng)常能夠揭示有用的洞見(jiàn),有助于改善你的決策。
例子
眾所周知,衛(wèi)星數(shù)據(jù)噪聲很多,常常需要仔細(xì)檢查
例如,Insight Data Science的Jack Kwok在創(chuàng)建一個(gè)幫助災(zāi)后重建的分割系統(tǒng)時(shí),注意到盡管分割模型在衛(wèi)星圖像訓(xùn)練集上表現(xiàn)良好,在驗(yàn)證集上的表現(xiàn)卻很差。這是因?yàn)轵?yàn)證集包含受到颶風(fēng)襲擊的城市,這些颶風(fēng)圖像的畫(huà)質(zhì)比訓(xùn)練數(shù)據(jù)差,更加模糊。通過(guò)在訓(xùn)練階段增加一個(gè)額外的數(shù)據(jù)增強(qiáng)步驟,在圖像上應(yīng)用模糊濾鏡,有助于降低訓(xùn)練集和驗(yàn)證集的表現(xiàn)差異。
在語(yǔ)音識(shí)別系統(tǒng)上,對(duì)驗(yàn)證集的深入誤差分析可能揭示具有和大多數(shù)用戶很不一樣的濃重口音的說(shuō)話人貢獻(xiàn)了不成比例的誤差數(shù)量。那么接著就可以檢查下訓(xùn)練集,看看是否具備足夠比例的類(lèi)似口音樣本,這些樣本是否正確標(biāo)注,訓(xùn)練算法能否成功擬合這些樣本。部分用戶類(lèi)別代表性不夠或者錯(cuò)誤標(biāo)注是一個(gè)機(jī)器學(xué)習(xí)偏見(jiàn)的例子。Google的語(yǔ)音系統(tǒng)采取的一種解決方案是主動(dòng)向口音很重的用戶請(qǐng)求更多訓(xùn)練數(shù)據(jù)。
選型
找出處理瓶頸的最簡(jiǎn)單方式
完成分析之后,你對(duì)模型造成了哪些類(lèi)型的誤差和影響表現(xiàn)的是哪些因素已經(jīng)心中有數(shù)。就給定的診斷而言,也許有若干潛在的解決方案,下一步就是把它們列舉出來(lái),并制定優(yōu)先級(jí)。
有些診斷直接導(dǎo)向潛在的解決方案。例如,如果你的優(yōu)化器看起來(lái)沒(méi)有調(diào)好,你可以嘗試不同的學(xué)習(xí)率,或者考慮干脆換一種優(yōu)化算法。如果訓(xùn)練數(shù)據(jù)集過(guò)小,收集更多的訓(xùn)練數(shù)據(jù)可能是合理、快速、容易的解決方案。
我們建議ML工程師及其團(tuán)隊(duì)列出盡可能多的也許有效的想法,接著采用簡(jiǎn)單、快速的解決方案。如果現(xiàn)有的解決方案可能有效(例如,使用你的工具箱中已經(jīng)實(shí)現(xiàn)的另一種優(yōu)化算法),就從現(xiàn)有方案開(kāi)始。盡管更復(fù)雜的方法也許看起來(lái)能在一次巨大的轉(zhuǎn)變中解決更多問(wèn)題,我們常常發(fā)現(xiàn)多次快速迭代帶來(lái)的改進(jìn)超過(guò)了摸索當(dāng)前最先進(jìn)技術(shù)帶來(lái)的收益。如果你可以在標(biāo)注1000個(gè)數(shù)據(jù)點(diǎn)和研究最前沿的無(wú)監(jiān)督學(xué)習(xí)方法中做選擇,我們覺(jué)得你應(yīng)該選擇收集和標(biāo)注數(shù)據(jù)。如果你可以從一些簡(jiǎn)單的啟發(fā)式算法開(kāi)始,就這么干。
竅門(mén)
取決于你的瓶頸,這里是一些常見(jiàn)的解決方案。
如果你需要調(diào)整優(yōu)化器,以更好地?cái)M合數(shù)據(jù):
對(duì)數(shù)值優(yōu)化器而言,嘗試調(diào)整學(xué)習(xí)率或動(dòng)量設(shè)定。從一個(gè)小動(dòng)量(0.5)開(kāi)始通常是最容易奏效的方法。
嘗試不同的初始化策略,或者從預(yù)訓(xùn)練模型開(kāi)始。
嘗試一種容易調(diào)參的模型。在深度學(xué)習(xí)中,殘差網(wǎng)絡(luò)和帶批歸一化的網(wǎng)絡(luò)可能訓(xùn)練起來(lái)要容易一點(diǎn)。
如果模型不能很好地?cái)M合訓(xùn)練數(shù)據(jù):
使用更大、更有表達(dá)力的那類(lèi)模型。例如,使用決策樹(shù)時(shí),你可以配置更深的決策樹(shù)。
檢查訓(xùn)練集中模型出錯(cuò)的樣本,看看有沒(méi)有錯(cuò)誤標(biāo)注或缺失項(xiàng)。花時(shí)間清洗訓(xùn)練數(shù)據(jù)可以顯著改善結(jié)果。
如果模型難以推廣至驗(yàn)證集:
增加更多訓(xùn)練數(shù)據(jù)。注意,也許需要集中添加和驗(yàn)證集中所見(jiàn)誤差類(lèi)別類(lèi)似的訓(xùn)練樣本。
基于真實(shí)訓(xùn)練樣本,生成新樣本,以增強(qiáng)數(shù)據(jù)。例如,如果你注意到樹(shù)檢測(cè)器在有霧的圖像上一貫表現(xiàn)糟糕,那么可以加上增強(qiáng)步驟,使用OpenCV讓圖像看起來(lái)霧蒙蒙的。
擴(kuò)大搜索超參數(shù)的范圍,或者進(jìn)行更細(xì)致的搜索,確保找到在驗(yàn)證集上表現(xiàn)最佳的模型。
嘗試不同的正則化方式(例如神經(jīng)網(wǎng)絡(luò)的權(quán)重衰減、dropout,決策樹(shù)的剪枝)。
嘗試不同類(lèi)型的模型。不同類(lèi)型的模型可以改變擬合和推廣的表現(xiàn),所以很難知道什么時(shí)候這個(gè)方法有用。深度學(xué)習(xí)的一大優(yōu)勢(shì)在于,有范圍很廣的神經(jīng)網(wǎng)絡(luò)構(gòu)件可供嘗試。如果你使用傳統(tǒng)的模型(例如決策樹(shù)或高斯混合模型),切換不同類(lèi)型的模型需要花費(fèi)更多精力。如果新模型內(nèi)含的假定更正確,那么這一改變也許會(huì)有幫助——但最好先從容易的模型開(kāi)始嘗試。
實(shí)現(xiàn)
只創(chuàng)建需要?jiǎng)?chuàng)建的,快速創(chuàng)建
你知道應(yīng)該嘗試什么,并且已經(jīng)簡(jiǎn)化了問(wèn)題,現(xiàn)在只不過(guò)是實(shí)現(xiàn)而已……“只不過(guò)”。這一階段的目標(biāo)是快速創(chuàng)建原型,這樣你就可以測(cè)量結(jié)果,并從中學(xué)習(xí),然后快速開(kāi)啟下一輪循環(huán)。因此,我們建議你集中精力創(chuàng)建當(dāng)前試驗(yàn)需要的東西。注意,盡管這一階段的目標(biāo)是快速學(xué)習(xí),而不是打磨一切,你的實(shí)現(xiàn)仍然需要是正確的,這樣你就可以頻繁地檢驗(yàn)代碼是否能如期望一般工作。
竅門(mén)
在收集和標(biāo)注數(shù)據(jù)時(shí):
經(jīng)常查看數(shù)據(jù)。查看原始數(shù)據(jù),查看預(yù)處理后的數(shù)據(jù),查看標(biāo)簽。這些再?gòu)?qiáng)調(diào)也不為過(guò)!僅僅是在收集、標(biāo)注數(shù)據(jù)的流程中留心一點(diǎn),就能捕捉許多誤差。在Insight Data Science,我們經(jīng)常碰到和數(shù)據(jù)清洗、包圍盒坐標(biāo)、分割掩碼相關(guān)的bug。
標(biāo)注、清洗數(shù)據(jù)是日常任務(wù)。大多數(shù)人高估了收集、標(biāo)注數(shù)據(jù)的代價(jià),卻低估了在數(shù)據(jù)匱乏的環(huán)境下解決問(wèn)題的難度。如果方法得到,很容易就在一分鐘內(nèi)標(biāo)注用于分類(lèi)問(wèn)題的20張圖像。你是愿意花一小時(shí)標(biāo)注圖像,得到一個(gè)包含1200張圖像的數(shù)據(jù)集,再花一小時(shí)解決一個(gè)簡(jiǎn)單的分類(lèi)問(wèn)題,還是花3周時(shí)間嘗試讓一個(gè)模型基于5個(gè)樣本學(xué)習(xí)?
當(dāng)你為新模型寫(xiě)代碼時(shí),從一個(gè)類(lèi)似的現(xiàn)有實(shí)現(xiàn)開(kāi)始。許多論文現(xiàn)在都公布代碼——所以在重新實(shí)現(xiàn)論文中的一個(gè)想法前,先獲取配套的代碼,因?yàn)檎撐某3B┑粢恍┘?xì)節(jié)。這會(huì)為你節(jié)省幾小時(shí)乃至幾天。如果可能的話,不管是什么問(wèn)題,我們都建議遵循以下步驟:
尋找一個(gè)解決類(lèi)似問(wèn)題的模型實(shí)現(xiàn)。
在本地重現(xiàn)現(xiàn)有模型的實(shí)現(xiàn)(同樣的數(shù)據(jù)集和超參數(shù))
慢慢調(diào)整模型實(shí)現(xiàn)和數(shù)據(jù)工作流以匹配你的需求
重寫(xiě)需要重寫(xiě)的部分
編寫(xiě)測(cè)試以檢查梯度、張量值、輸入數(shù)據(jù)、標(biāo)簽的格式對(duì)不對(duì)。剛開(kāi)始設(shè)置模型的時(shí)候就寫(xiě)測(cè)試,這樣,如果捕捉到了錯(cuò)誤,就不會(huì)再犯。
測(cè)量
打印測(cè)試結(jié)果和決定是否可以發(fā)布需要考慮的其他測(cè)度(例如,生產(chǎn)環(huán)境限制)。
如果表現(xiàn)某種程度上在提高,那么你也許處于正確的方向上。這種情況下,現(xiàn)在也許是完善你知道工作良好的那些部件的時(shí)機(jī)。另外,確保團(tuán)隊(duì)里的其他成員能夠重現(xiàn)你的試驗(yàn)結(jié)果。
另一方面,如果表現(xiàn)在下降,或者沒(méi)怎么提高,你需要決定是再試一下(重返分析階段)還是放棄當(dāng)前想法。如果ML循環(huán)的每一步都相對(duì)廉價(jià),那就更容易做出決策:你不必花費(fèi)過(guò)多精力讓你的代碼趨于完美,再嘗試一次也不會(huì)花費(fèi)太多時(shí)間——所以你可以根據(jù)想法的風(fēng)險(xiǎn)和收益做出決策,而不會(huì)受到沉沒(méi)成本的干擾。
竅門(mén)
有用的表現(xiàn)測(cè)度包括ML方面的精確度和損失,以及商業(yè)價(jià)值測(cè)度。記住商業(yè)價(jià)值測(cè)度是最終的測(cè)度,因?yàn)檎撬鼈儧Q定了你創(chuàng)建的產(chǎn)品的有用程度。如果測(cè)試測(cè)度(ML代碼優(yōu)化的目標(biāo))偏離了商業(yè)測(cè)度,那么測(cè)量階段結(jié)束之后,應(yīng)該停下來(lái)考慮修改優(yōu)化標(biāo)準(zhǔn)或測(cè)試集。
既然每個(gè)開(kāi)發(fā)循環(huán)的末尾總是需要打印測(cè)度,同時(shí)計(jì)算分析階段所需的其他測(cè)度會(huì)比較方便。
經(jīng)常情況是,你最終創(chuàng)建了一個(gè)類(lèi)似“控制面板”的東西,其中包含測(cè)試測(cè)度和商業(yè)測(cè)度,還有其他有用的數(shù)據(jù)。這在團(tuán)隊(duì)協(xié)作中特別有用。
優(yōu)化循環(huán)
盡管機(jī)器學(xué)習(xí)任務(wù)具有內(nèi)在的不確定性,上面的ML工程循環(huán)將幫助你有條不紊地邁向一個(gè)更好的模型。不幸的是,它一點(diǎn)也不神奇——你需要發(fā)展在每個(gè)階段做出良好決策的能力,例如識(shí)別表現(xiàn)瓶頸,決定嘗試哪種解決方案,如何正確地實(shí)現(xiàn)它們,以及如何測(cè)量應(yīng)用的表現(xiàn)。你也需要習(xí)慣快速迭代的節(jié)奏。因此,你也應(yīng)該花時(shí)間思考如何提高迭代的質(zhì)量和速度,這樣可以在每次循環(huán)中最大化進(jìn)展,并且可以快速地完成多次迭代。
竅門(mén)
如果分析階段拖慢了你的進(jìn)度,那就創(chuàng)建一個(gè)腳本,總結(jié)每次試驗(yàn)結(jié)果,從訓(xùn)練集和驗(yàn)證集搜集誤差,并以良好的格式打印出來(lái)。這種包含常用診斷信息的“控制面板”可以幫助你戰(zhàn)勝“啊!我又得手工運(yùn)行這些分析了……不如試試這個(gè)隨機(jī)解決方案吧”這樣的想法。
如果你覺(jué)得自己對(duì)到底嘗試什么毫無(wú)頭緒,那就隨便選一樣。一下子嘗試做太多事情會(huì)拖慢你的進(jìn)度。有時(shí)候你可以在運(yùn)行試驗(yàn)的時(shí)候回過(guò)頭來(lái)嘗試另一個(gè)想法!
收集數(shù)據(jù)是取得更好表現(xiàn)的常用方式。如果獲取更多數(shù)據(jù)聽(tīng)起來(lái)很痛苦,但是確實(shí)可以改變結(jié)果,那么也許應(yīng)該投資讓數(shù)據(jù)更容易收集、清洗、標(biāo)注的工具。
如果你覺(jué)得自己陷入了困境,診斷不出瓶頸,或者選不出接下來(lái)試驗(yàn)的模型,考慮向?qū)<易稍儭nI(lǐng)域?qū)<医?jīng)常能夠就誤差分析提供寶貴的洞見(jiàn)(例如,指出導(dǎo)致某些情形困難或容易的微妙差別),而研究論文或有經(jīng)驗(yàn)的ML從業(yè)者也許可以為你提供值得嘗試的創(chuàng)造性解決方案(如果你可以和他們分享詳細(xì)的分析,他們可以更好地幫助你)。
良好的實(shí)現(xiàn)技能很重要,代碼規(guī)范可以防止bug產(chǎn)生。話是這么說(shuō),由于相當(dāng)大比例的想法會(huì)失敗,因此在迭代過(guò)程中,在試驗(yàn)代碼中使用一些臨時(shí)性的不規(guī)范做法也沒(méi)什么大不了的,畢竟失敗的代碼最終會(huì)被丟棄。一旦你確信自己取得了有用的進(jìn)展,你可以在下一次循環(huán)之前根據(jù)規(guī)范清理代碼。
如果試驗(yàn)時(shí)間過(guò)長(zhǎng),考慮花點(diǎn)時(shí)間看看能不能優(yōu)化代碼。或者和系統(tǒng)專(zhuān)家討論下如何讓訓(xùn)練更快。拿不定主意的時(shí)候,考慮升級(jí)GPU,或者并行運(yùn)行更多試驗(yàn),這些是ML試驗(yàn)“時(shí)忙時(shí)閑”問(wèn)題久負(fù)盛名的解決方案。
和其他決策一樣,僅當(dāng)可以解決當(dāng)前痛點(diǎn)的時(shí)候才致力于這些事項(xiàng)。有些團(tuán)隊(duì)花了太多時(shí)間創(chuàng)建“完美”的框架,最后發(fā)現(xiàn)真正的問(wèn)題在別的地方。
結(jié)語(yǔ)
ML項(xiàng)目?jī)?nèi)在地具有不確定性,我們上面推薦的方法可以作為引導(dǎo)你前進(jìn)的扶手。由于試驗(yàn)的命運(yùn)不確定,你很難為達(dá)成特定的精確度目標(biāo)而負(fù)責(zé),但你至少可以負(fù)責(zé)完成誤差分析,列出想法列表,編碼實(shí)現(xiàn),看看它們表現(xiàn)如何。就我們的經(jīng)驗(yàn)而言,拒絕那些閃閃發(fā)光的模型的召喚,果斷地集中精力于取得遞增的進(jìn)展,可以在研究和應(yīng)用中導(dǎo)向杰出的成果。這曾經(jīng)轉(zhuǎn)變了很多團(tuán)隊(duì),讓無(wú)數(shù)Insight Data Science的工程師得以交付前沿項(xiàng)目。
如果你有什么要問(wèn)的,歡迎留言,或通過(guò)Twitter聯(lián)系兩位作者(EmmanuelAmeisen和adampaulcoates)。
感謝Lacey Cope和Adam Coates對(duì)本文草稿給出的反饋。
-
圖像
+關(guān)注
關(guān)注
2文章
1089瀏覽量
40592 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8446瀏覽量
133126
原文標(biāo)題:快速交付機(jī)器學(xué)習(xí)項(xiàng)目:ML工程循環(huán)指南
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何快速部署邊緣就緒的機(jī)器學(xué)習(xí)應(yīng)用
![如何<b class='flag-5'>快速</b>部署邊緣就緒的<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>應(yīng)用](https://file1.elecfans.com/web2/M00/A7/DD/wKgZomURlIWAZ-X7AAH37mUFZf8651.png)
[轉(zhuǎn)帖]如何快速擴(kuò)充你的項(xiàng)目經(jīng)驗(yàn)
請(qǐng)問(wèn)如何快速具有項(xiàng)目經(jīng)驗(yàn)?
【瑞芯微RK1808計(jì)算棒試用申請(qǐng)】基于機(jī)器學(xué)習(xí)的視覺(jué)機(jī)械臂研究與設(shè)計(jì)
【米爾MYD-C7Z020開(kāi)發(fā)板試用申請(qǐng)】機(jī)器人項(xiàng)目評(píng)估
【 平頭哥CB5654語(yǔ)音開(kāi)發(fā)板試用連載】智能取貨機(jī)器人語(yǔ)音交互模組
機(jī)器學(xué)習(xí)入門(mén)篇:一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目
【快包故事簡(jiǎn)訊】服務(wù)商競(jìng)標(biāo)+交付經(jīng)驗(yàn)分享,三個(gè)成功秘訣和四大誤區(qū)!
11個(gè)機(jī)器學(xué)習(xí)開(kāi)源項(xiàng)目
Airbnb機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)團(tuán)隊(duì)經(jīng)驗(yàn)分享
機(jī)器學(xué)習(xí)的12大經(jīng)驗(yàn)總結(jié)
Everyday Robot項(xiàng)目啟動(dòng) 意在開(kāi)發(fā)通用學(xué)習(xí)機(jī)器人
機(jī)器學(xué)習(xí)模型部署到ML項(xiàng)目的過(guò)程
機(jī)器學(xué)習(xí)模型在生產(chǎn)中退化的原因
![<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>模型在生產(chǎn)中退化的原因](https://file.elecfans.com/web1/M00/BA/D1/pIYBAF6b0K6AE-3eAAJEljr_9Pc903.png)
評(píng)論