摘要:本文描述機(jī)器學(xué)習(xí)任務(wù)的“OODA環(huán)”的概念铁材,迭代地執(zhí)行四個(gè)過程:分析尖淘、選擇方法、實(shí)現(xiàn)著觉、測(cè)量步驟村生,循環(huán)此過程以提升開發(fā)效率。
隨著機(jī)器學(xué)習(xí)(ML)成為每個(gè)行業(yè)的重要組成部分饼丘,對(duì)機(jī)器學(xué)習(xí)工程師(MLE)的需求急劇增長(zhǎng)趁桃。MLE需要將機(jī)器學(xué)習(xí)技能與軟件工程專業(yè)知識(shí)相結(jié)合,為特定應(yīng)用程序找到高性能的模型肄鸽,并應(yīng)對(duì)出現(xiàn)的實(shí)施挑戰(zhàn)——從構(gòu)建訓(xùn)練基礎(chǔ)架構(gòu)到準(zhǔn)備部署模型卫病。在新的機(jī)器學(xué)習(xí)團(tuán)隊(duì)中,遇到最常見的障礙之一是工程師習(xí)慣傳統(tǒng)軟件工程的開發(fā)過程典徘,而開發(fā)新ML模型的過程從一開始就是非常不確定的蟀苛,需要不斷的嘗試才能找到一個(gè)比較合適的模型。
許多類型的專業(yè)人員都面臨著類似的情況:軟件和商業(yè)開發(fā)人員逮诲,尋求產(chǎn)品市場(chǎng)契合的初創(chuàng)公司等帜平,這些職業(yè)中的每一個(gè)都采用了一個(gè)共同的框架,以幫助團(tuán)隊(duì)高效地工作:軟件開發(fā)中的agile/scrum梅鹦,初創(chuàng)公司和美國(guó)空軍的OODA環(huán)裆甩。MLE同樣可以遵循類似的框架來應(yīng)對(duì)不確定性并快速開發(fā)出優(yōu)質(zhì)的產(chǎn)品。
ML工程環(huán)
在本文中齐唆,我們將描述ML的“OODA環(huán)”的概念:ML工程循環(huán)淑掌,其中ML工程師迭代地
1.分析
2.選擇一種方法
3.實(shí)現(xiàn)
4.測(cè)量
快速有效地發(fā)現(xiàn)最佳模型并適應(yīng)未知的環(huán)境。此外蝶念,我們將為每個(gè)階段抛腕,以及優(yōu)化過程給出具體的提示。
MLE環(huán)
ML團(tuán)隊(duì)的成功通常意味著在給定的約束條件下提供高性能模型媒殉。例如担敌,實(shí)現(xiàn)高預(yù)測(cè)準(zhǔn)確性的模型,同時(shí)還受到內(nèi)存使用廷蓉、預(yù)測(cè)時(shí)間等約束全封。性能由與最終產(chǎn)品成功最相關(guān)的指標(biāo)定義,無論是準(zhǔn)確性桃犬、運(yùn)行速度刹悴、輸出多樣性等。簡(jiǎn)單起見攒暇,本文選擇將“錯(cuò)誤率”最小化作為性能指標(biāo)土匀。
當(dāng)剛開始確定新項(xiàng)目的范圍時(shí),就應(yīng)該準(zhǔn)確定義成功的標(biāo)準(zhǔn)形用,然后將其轉(zhuǎn)換為模型指標(biāo)就轧。在產(chǎn)品方面,服務(wù)需要達(dá)到什么樣的性能水平田度?例如妒御,如果在新聞平臺(tái)上向個(gè)人用戶推薦5篇文章,我們需要多少相關(guān)內(nèi)容镇饺,以及如何定義相關(guān)性乎莉?鑒于此性能標(biāo)準(zhǔn)和擁有的數(shù)據(jù),可以構(gòu)建的最簡(jiǎn)單的模型是什么奸笤?
ML工程環(huán)的目的是圍繞開發(fā)過程設(shè)置一個(gè)死記硬背的框架惋啃,簡(jiǎn)化決策過程,專注于其中最重要的步驟揭保。當(dāng)不確定性增加時(shí)肥橙,即使是最有經(jīng)驗(yàn)的工程師,這個(gè)框架仍然是非常有價(jià)值秸侣,例如存筏,當(dāng)模型意外地?zé)o法滿足要求時(shí)、團(tuán)隊(duì)的目標(biāo)突然改變等情況味榛。
入門
要引導(dǎo)下面描述的循環(huán)椭坚,您應(yīng)該從一個(gè)涉及非常少的不確定性的最小實(shí)現(xiàn)開始。通常我們希望盡快建立足夠的系統(tǒng)搏色,以便我們可以評(píng)估其性能并開始迭代開發(fā)善茎。這通常意味著:
設(shè)置訓(xùn)練、開發(fā)和測(cè)試數(shù)據(jù)集频轿,以及構(gòu)建好一個(gè)簡(jiǎn)單的模型垂涯。
例如烁焙,如果要構(gòu)建一個(gè)樹木探測(cè)器來測(cè)量一個(gè)地區(qū)的樹木種群,可能會(huì)使用類似的Kaggle 競(jìng)賽中的現(xiàn)成訓(xùn)練集耕赘,以及來自目標(biāo)區(qū)域的手工收集的一組照片用于開發(fā)和測(cè)試集骄蝇。然后可以對(duì)原始像素進(jìn)行邏輯回歸,或者在訓(xùn)練圖像上運(yùn)行預(yù)訓(xùn)練網(wǎng)絡(luò)(如ResNet)操骡。此時(shí)的目標(biāo)不是一次性地完成項(xiàng)目九火,而是開始迭代周期。以下是一些有所幫助的提示:
提示
關(guān)于測(cè)試集:
由于團(tuán)隊(duì)的目標(biāo)是在測(cè)試集上表現(xiàn)良好册招,所以測(cè)試集應(yīng)該反映產(chǎn)品或業(yè)務(wù)的需求岔激。例如,如果正在構(gòu)建一個(gè)應(yīng)用程序來檢測(cè)自拍的皮膚狀況是掰,請(qǐng)隨意對(duì)任何一組圖像進(jìn)行訓(xùn)練虑鼎,但要確保測(cè)試集中包含光線不足且質(zhì)量差的圖片。
更改測(cè)試集會(huì)改變團(tuán)隊(duì)的目標(biāo)冀惭,因此盡早修復(fù)測(cè)試集并對(duì)其進(jìn)行修改以反映項(xiàng)目震叙、產(chǎn)品或業(yè)務(wù)目標(biāo)的變化會(huì)很有幫助。
測(cè)試集合訓(xùn)練集大小都設(shè)置足夠大散休,以使獲得的性能指標(biāo)足夠準(zhǔn)確媒楼,以便在模型之間做出良好區(qū)分。
盡可能地為開發(fā)集和測(cè)試集創(chuàng)建對(duì)的標(biāo)簽或注釋戚丸。錯(cuò)誤標(biāo)記的測(cè)試集等同于錯(cuò)誤指定的產(chǎn)品要求划址。
了解人類在測(cè)試集上的表現(xiàn)如何,或者現(xiàn)有/競(jìng)爭(zhēng)系統(tǒng)的表現(xiàn)如何限府,這將為你提供最佳的錯(cuò)誤率夺颤,即目前可以實(shí)現(xiàn)的最佳性能。
最終目標(biāo)是使測(cè)試性能盡可能接近我們的猜測(cè)胁勺,以獲得最佳性能世澜。
關(guān)于開發(fā)和訓(xùn)練集:
開發(fā)集是團(tuán)隊(duì)的測(cè)試性能代理,可用于超參數(shù)的調(diào)整署穗。因此寥裂,它應(yīng)該與測(cè)試集有相同的分布。一個(gè)好方法是首先收集一大堆樣本案疲,然后將它們隨機(jī)分成開發(fā)集和測(cè)試集封恰。
如果認(rèn)為生產(chǎn)數(shù)據(jù)會(huì)產(chǎn)生噪音,請(qǐng)確保通過使用數(shù)據(jù)增強(qiáng)或降級(jí)來解決訓(xùn)練集中的噪音問題褐啡。
一旦獲得初始原型后诺舔,應(yīng)檢查其在訓(xùn)練、開發(fā)和測(cè)試集上的性能,評(píng)估測(cè)試性能與產(chǎn)品所需性能之間的差距低飒。開始迭代開發(fā)模型了许昨!
分析
確定性能瓶頸
分析階段就像醫(yī)療診斷一樣:配備了一套可以執(zhí)行的診斷程序,目標(biāo)是針對(duì)限制模型性能的因素提出最可能的診斷逸嘀。在實(shí)踐中车要,可能會(huì)有許多不同的重疊問題導(dǎo)致當(dāng)前的結(jié)果。不要試圖全面了解每一個(gè)缺點(diǎn)崭倘,而是要了解最重要的因素,因?yàn)樵S多小問題會(huì)隨著模型改進(jìn)而改變甚至消失类垫。
下面司光,我們列出了一組常用的診斷流程。
每次分析的一個(gè)良好起點(diǎn)是查看訓(xùn)練悉患、開發(fā)和測(cè)試性能残家。建議在每次實(shí)驗(yàn)結(jié)束時(shí)使用代碼執(zhí)行此操作,以使自己習(xí)慣于每次查看這些數(shù)字售躁。一般而言坞淮,訓(xùn)練集錯(cuò)誤<=開發(fā)集錯(cuò)誤<=測(cè)試集錯(cuò)誤(如果每組中的數(shù)據(jù)遵循相同的分布)。根據(jù)上一次實(shí)驗(yàn)的訓(xùn)練陪捷、開發(fā)和測(cè)試錯(cuò)誤率回窘,可以快速查看這些因素中的哪些是當(dāng)前的約束約束。
權(quán)重直方圖
診斷和治療
如果訓(xùn)練集錯(cuò)誤是當(dāng)前的限制因素市袖,則可能會(huì)出現(xiàn)以下問題:
1.優(yōu)化算法未被精確調(diào)整啡直。查看學(xué)習(xí)曲線,看看loss損失是否在減少苍碟,檢查是否過擬合酒觅。可以通過可視化神經(jīng)元反應(yīng)的直方圖微峰,以檢查它們是否飽和(導(dǎo)致梯度消失)舷丹。
2.訓(xùn)練集可能包含錯(cuò)誤標(biāo)記或損壞的數(shù)據(jù)。在訓(xùn)練算法使用之前蜓肆,在代碼階段手動(dòng)檢查一些訓(xùn)練樣例颜凯。
3.模型可能太小或泛化能力不強(qiáng)。
如果開發(fā)集錯(cuò)誤是當(dāng)前限制因素症杏,這可能是由以下問題引起的:
1.模型可能太大或過擬合装获。
2.沒有足夠的訓(xùn)練數(shù)據(jù)來學(xué)習(xí)基礎(chǔ)模式的良好模型。
3.訓(xùn)練數(shù)據(jù)的分布與開發(fā)或測(cè)試數(shù)據(jù)分布不匹配厉颤。
4.模型的超參數(shù)設(shè)置很差穴豫。
5.模型歸納與數(shù)據(jù)匹配不佳。
如果測(cè)試集錯(cuò)誤是當(dāng)前限制因素,這通常是由于開發(fā)集太小或者實(shí)驗(yàn)過程中過度擬合開發(fā)集導(dǎo)致精肃。
對(duì)于上述任何一種情況秤涩,可以通過手動(dòng)檢查模型出錯(cuò)的一組隨機(jī)示例來了解模型的失敗。
1.嘗試通過可視化數(shù)據(jù)來識(shí)別常見的錯(cuò)誤類型司抱,然后瀏覽這些示例并記錄每種錯(cuò)誤發(fā)生的頻率筐眷。
2.某些樣本可能被錯(cuò)誤標(biāo)記或具有多個(gè)合理標(biāo)簽。
3.一些樣本可能比其他樣本更難預(yù)測(cè)习柠,或者可能缺少做出正確決策所需的上下文匀谣。
請(qǐng)注意,上述許多診斷都有直接而明顯的應(yīng)對(duì)方法资溃。例如武翎,如果訓(xùn)練數(shù)據(jù)太少,那么只需獲取更多訓(xùn)練數(shù)據(jù)即可溶锭!我們?nèi)匀话l(fā)現(xiàn)在心理上將分析階段和選擇階段分開是有用的宝恶,因?yàn)楹芏嗳巳菀紫萑雵L試隨機(jī)方法而不真正深入挖掘潛在的問題。此外趴捅,以開放的心態(tài)努力回歸錯(cuò)誤分析通常會(huì)發(fā)現(xiàn)更有用的見解垫毙,可以改善做出的決定。
例子
眾所周知拱绑,衛(wèi)星數(shù)據(jù)噪聲很大综芥,通常需要檢查。以Insight為例欺栗,當(dāng)AI研究員Jack Kwok正在建立一個(gè)幫助災(zāi)難恢復(fù)的分割系統(tǒng)時(shí)毫痕,他注意到雖然他的分割模型在他的衛(wèi)星圖像訓(xùn)練集上表現(xiàn)良好,但它在開發(fā)集上表現(xiàn)不佳迟几。原因是颶風(fēng)圖像質(zhì)量較低且比訓(xùn)練數(shù)據(jù)更模糊消请。向訓(xùn)練管道添加額外的增強(qiáng)操作钉答,對(duì)圖像應(yīng)用模糊有助于縮小訓(xùn)練和開發(fā)性能之間的差距豫缨。
選擇方法
找到解決瓶頸的最簡(jiǎn)單方法
在進(jìn)行分析之后困乒,需要很好地了解模型所出現(xiàn)的錯(cuò)誤類型以及影響性能的因素泌豆。對(duì)于給定的診斷蝴乔,可能存在幾種可能的解決方案径荔,下一步是枚舉并優(yōu)化它們少辣。
上面的一些診斷有著潛在的解決方案耐齐。例如厂抽,如果訓(xùn)練數(shù)據(jù)集太小需频,收集更多訓(xùn)練數(shù)據(jù)可能是一個(gè)相當(dāng)快速和簡(jiǎn)單的解決方案。
建議ML工程師列舉盡可能多的想法筷凤,然后偏向簡(jiǎn)單昭殉、快速的解決方案苞七。如果現(xiàn)有解決方案可能有效,請(qǐng)嘗試在此基礎(chǔ)之上使用遷移學(xué)習(xí)挪丢。
提示
根據(jù)診斷蹂风,以下是一些常見的解決方案。
如果需要調(diào)整優(yōu)化器以更好地適應(yīng)數(shù)據(jù):
對(duì)于數(shù)值優(yōu)化器乾蓬,嘗試調(diào)整學(xué)習(xí)速率或動(dòng)量設(shè)置惠啄。
嘗試不同的初始化策略,或從預(yù)先訓(xùn)練的模型開始任内。
嘗試一種更容易調(diào)整的模型撵渡。在深度學(xué)習(xí)中,具有批量歸一化的剩余網(wǎng)絡(luò)或網(wǎng)絡(luò)可能更容易訓(xùn)練死嗦。
如果模型無法很好地?cái)M合訓(xùn)練數(shù)據(jù):
使用更大或更具表現(xiàn)力的模型類姥闭。
檢查模型在標(biāo)記錯(cuò)誤、缺少字段等的訓(xùn)練集上出錯(cuò)的示例越走。在訓(xùn)練數(shù)據(jù)清理中投入時(shí)間可以顯著改善性能。
如果模型沒有在開發(fā)集表現(xiàn)不好:
添加更多訓(xùn)練數(shù)據(jù)靠欢。
使用真實(shí)訓(xùn)練示例生成的新樣本擴(kuò)充數(shù)據(jù)廊敌。例如,如果注意樹檢測(cè)器在模糊圖像上始終表現(xiàn)不佳门怪,請(qǐng)使用OpenCV對(duì)圖像增強(qiáng)骡澈,使圖像看起來有點(diǎn)模糊。
搜索更廣泛或更細(xì)粒度的超參數(shù)范圍掷空,以確保在開發(fā)集上找到表現(xiàn)最佳的模型肋殴。
嘗試不同形式的正則化(例如權(quán)重衰減、dropout或決策樹的修剪)坦弟。
嘗試不同的模型护锤,不同類型的模型可以改變數(shù)據(jù)擬合程度以及泛化能力。最好先從最簡(jiǎn)單的模型開始酿傍。
實(shí)現(xiàn)
只構(gòu)建需要構(gòu)建的內(nèi)容烙懦,并快速完成
這個(gè)階段的目標(biāo)是快速實(shí)現(xiàn)基礎(chǔ)模型,以便可以測(cè)量出結(jié)果赤炒,并從中學(xué)習(xí)氯析,之后快速回到開發(fā)循環(huán)周期中。因此莺褒,建議專注于構(gòu)建當(dāng)前實(shí)驗(yàn)所需的內(nèi)容掩缓。
提示
大多數(shù)人高估了收集和標(biāo)記數(shù)據(jù)所帶來的成本,并低估了在數(shù)據(jù)匱乏的環(huán)境中解決問題的困難遵岩。
當(dāng)收集和標(biāo)記數(shù)據(jù)時(shí):
定期查看數(shù)據(jù)你辣。查看原始數(shù)據(jù),在預(yù)處理后查看、查看標(biāo)簽绢记。這一點(diǎn)非常重要扁达!通過在每個(gè)步驟中密切關(guān)注數(shù)據(jù)來捕獲許多錯(cuò)誤。
標(biāo)簽和清洗數(shù)據(jù)是一項(xiàng)常見任務(wù)蠢熄。大多數(shù)人高估了收集和標(biāo)記數(shù)據(jù)所帶來的成本跪解,并低估了在數(shù)據(jù)匱乏的環(huán)境中解決問題的困難。一旦進(jìn)入節(jié)奏签孔,可以輕松地每分鐘標(biāo)記20張圖像叉讥。思考下,你是想花一個(gè)小時(shí)標(biāo)記圖像饥追,并花一個(gè)小時(shí)來解決1200個(gè)圖像數(shù)據(jù)集的簡(jiǎn)單分類問題图仓,或者花3個(gè)星期試圖從5個(gè)樣本中學(xué)習(xí)模型呢?
當(dāng)構(gòu)造新的模型時(shí)但绕,請(qǐng)從類似的現(xiàn)有實(shí)現(xiàn)開始救崔。許多相似的研究論文都開源代碼,這將節(jié)省大量的開發(fā)時(shí)間捏顺。對(duì)于任何問題六孵,建議連續(xù)執(zhí)行以下步驟:
1.找到解決類似問題的模型的實(shí)現(xiàn)。
2.在現(xiàn)有模型(相同數(shù)據(jù)集和超參數(shù))的條件下重現(xiàn)實(shí)驗(yàn)幅骄。
3.慢慢調(diào)整模型和數(shù)據(jù)以滿足任務(wù)的需求劫窒。
4.重寫所需的任何部件。
編寫測(cè)試程序以檢查梯度拆座、張量值主巍、輸入數(shù)據(jù)和標(biāo)簽是否格式正確。在最初設(shè)置模型時(shí)執(zhí)行此操作挪凑,這樣一旦捕獲錯(cuò)誤并解決后孕索,之后再也不會(huì)遇到了。
測(cè)量
打印出需要的測(cè)試結(jié)果和任何其他指標(biāo)岖赋。
如果實(shí)驗(yàn)結(jié)果的表現(xiàn)有所改善檬果,這可能說明你正走上正軌。在這種情況下唐断,可能是弄清楚運(yùn)行良好組件的好時(shí)機(jī)选脊,并確保團(tuán)隊(duì)中的其他人可以復(fù)現(xiàn)該實(shí)驗(yàn)。
另一方面脸甘,如果性能變差或沒有足夠的改善恳啥,你需要決定是再次嘗試(回到分析階段)還是放棄當(dāng)前的想法。這點(diǎn)取決于二者的成本丹诀,嘗試成本和沉沒成本钝的。
提示
有用的績(jī)效指標(biāo)包括模型的準(zhǔn)確性和損失翁垂,以及業(yè)務(wù)價(jià)值指標(biāo)。注意硝桩,業(yè)務(wù)相關(guān)的指標(biāo)最終是重要的沿猜,因?yàn)樗鼈儧Q定了目前開發(fā)的模型的有用性。如果測(cè)試指標(biāo)與業(yè)務(wù)指標(biāo)不同碗脊,則此測(cè)量周期結(jié)束是停止并考慮更改優(yōu)化標(biāo)準(zhǔn)或測(cè)試集的好時(shí)機(jī)啼肩。
由于在每個(gè)開發(fā)循環(huán)結(jié)束時(shí)都打印出相關(guān)的指標(biāo),此時(shí)也是計(jì)算其他指標(biāo)的時(shí)機(jī)衙伶,可以在分析階段幫助你看決定是否繼續(xù)使用當(dāng)前的想法祈坠。
最終會(huì)建立一個(gè)“儀表板”,其中包含測(cè)試指標(biāo)和業(yè)務(wù)指標(biāo)矢劲,以及每次實(shí)驗(yàn)結(jié)束時(shí)可以看到的其他有用數(shù)據(jù)赦拘。
優(yōu)化循環(huán)
盡管任務(wù)固有的不確定性,上面的ML工程環(huán)將幫助開發(fā)者朝著更好的模型方向前進(jìn)芬沉。遺憾的是躺同,它無法保證立刻開發(fā)出正確的模型,還需要我們需要培養(yǎng)自己在每個(gè)階段做出正確選擇的能力丸逸,比如確定性能瓶頸笋籽、決定嘗試哪些解決方案、如何正確實(shí)現(xiàn)椭员,以及如何衡量應(yīng)用程序的性能。此外笛园,還應(yīng)該花時(shí)間考慮提高迭代的質(zhì)量和速度隘击,以便在每個(gè)周期中取得最大進(jìn)展,并且可以快速完成多次迭代研铆。
提示
如果在分析階段的結(jié)果并不滿意的話埋同,請(qǐng)創(chuàng)建一個(gè)總結(jié)實(shí)驗(yàn)結(jié)果的腳本,從訓(xùn)練和開發(fā)集中收集錯(cuò)誤棵红,并對(duì)其進(jìn)行格式化凶赁。“儀表板”經(jīng)常使用的診斷輸出能幫助你克服這一時(shí)刻的思維逆甜。
如果覺得自己想要嘗試什么虱肄,那就只選擇一個(gè)方向?qū)ζ溥M(jìn)行實(shí)驗(yàn)。試圖一次做太多事情會(huì)減慢速度交煞。
收集數(shù)據(jù)是獲得更好性能的常用方法咏窿,投資工具以使數(shù)據(jù)更易于收集、清理和標(biāo)記是有意義的素征。
如果感覺困在診斷瓶頸或不知道如何選擇一個(gè)好的模型來嘗試下一步時(shí)集嵌,請(qǐng)考慮聯(lián)系該領(lǐng)域的專家萝挤。專家通常可以在錯(cuò)誤分析期間提供有用的見解根欧,而研究論文或經(jīng)驗(yàn)豐富的ML從業(yè)者可能會(huì)有創(chuàng)造性的解決方案添加到您要嘗試的事物列表中怜珍。
好的實(shí)現(xiàn)技能很重要,編碼規(guī)范可以防止錯(cuò)誤凤粗。
如果實(shí)驗(yàn)花費(fèi)的時(shí)間太長(zhǎng)酥泛,請(qǐng)考慮花一些時(shí)間尋找代碼的優(yōu)化,或者與系統(tǒng)專家討論如何加快訓(xùn)練速度侈沪。
與其他決策一樣揭璃,只有在解決當(dāng)前的痛點(diǎn)時(shí)才能處理這些項(xiàng)目。有些團(tuán)隊(duì)花費(fèi)太多時(shí)間構(gòu)建“完美”框架亭罪,卻發(fā)現(xiàn)真正令人頭疼的事情在其他地方瘦馍。
結(jié)論
機(jī)器學(xué)習(xí)項(xiàng)目具有內(nèi)在的不確定性,上面推薦的方法旨在為開發(fā)者提供一些指導(dǎo)应役。雖然每次實(shí)驗(yàn)的結(jié)果無法預(yù)測(cè)情组,很難讓自己對(duì)達(dá)到特定的準(zhǔn)確度目標(biāo)負(fù)責(zé),但至少可以讓自己負(fù)責(zé)完成錯(cuò)誤分析箩祥、制定想法列表院崇、編寫代碼并查看其工作原理。
本文作者:【方向】
作者:阿里云云棲社區(qū)
鏈接:http://www.reibang.com/p/e153ffd2de98
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有袍祖,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處底瓣。