2021年機(jī)器學(xué)習(xí)怎么學(xué)?這份深度指南幫你做了總結(jié)!
在這個(gè)「人人AI」的時(shí)代,很多人都會或多或少接觸過機(jī)器學(xué)習(xí)(ML)。
似乎每一家需要數(shù)據(jù)的公司,都在嘗試?yán)萌斯ぶ悄芎蜋C(jī)器學(xué)習(xí)來分析他們的業(yè)務(wù)并提供自動化解決方案。
「《財(cái)富》的商業(yè)洞察板塊(Fortune Business Insights)預(yù)計(jì),到2027年,機(jī)器學(xué)習(xí)的市值將達(dá)到1170億美元。」
機(jī)器學(xué)習(xí)的火爆,使得許多沒有相關(guān)背景的新手也紛紛跨入該行業(yè)。當(dāng)然,這本身確實(shí)是一件好事,然而,我們也需要明白,將機(jī)器學(xué)習(xí)項(xiàng)目整合到實(shí)際生產(chǎn)環(huán)境中,其實(shí)遠(yuǎn)沒有想象的那么容易。
圖:Algorithmia公司基于750家企業(yè)得出的2020企業(yè)ML使用狀態(tài)圖像
「Algorithmia公司經(jīng)過調(diào)查表示:55%從事機(jī)器學(xué)習(xí)模型的企業(yè)尚未將其投入生產(chǎn)」
在這里可以一提的是,Algorithmia是一家提供簡化機(jī)器學(xué)習(xí)的平臺的創(chuàng)業(yè)公司,它在2017年6月已經(jīng)從谷歌那里完成了一項(xiàng)價(jià)值1050萬美元的a輪融資。
許多人似乎認(rèn)為,如果有了訓(xùn)練模型所需的數(shù)據(jù)和計(jì)算資源,實(shí)現(xiàn)機(jī)器學(xué)習(xí)項(xiàng)目是相當(dāng)簡單的。
但是,其實(shí)這是大錯(cuò)特錯(cuò)的——
這種假設(shè)很可能會導(dǎo)致在沒有部署模型的情況下,消耗大量的時(shí)間和金錢成本。
圖:機(jī)器學(xué)習(xí)生命周期的樸素假設(shè)
在本文中,我們將深入詳細(xì)地討論機(jī)器學(xué)習(xí)項(xiàng)目的生命周期實(shí)際上是什么樣子的,以及周期內(nèi)每個(gè)階段可以用到的一些工具。
沒有那么簡單:機(jī)器學(xué)習(xí)生命周期一覽
在現(xiàn)實(shí)中,機(jī)器學(xué)習(xí)項(xiàng)目并不簡單,它是一個(gè)在改進(jìn)數(shù)據(jù)、模型和評估之間循環(huán)往復(fù)的過程,并且永遠(yuǎn)不會真正完成。
這個(gè)循環(huán)對于開發(fā)機(jī)器學(xué)習(xí)模型至關(guān)重要,因?yàn)樗鼈?cè)重于使用模型結(jié)果和評估來細(xì)化數(shù)據(jù)集。此外,高質(zhì)量的數(shù)據(jù)集是訓(xùn)練高質(zhì)量模型最可靠的方法。
這個(gè)循環(huán)的迭代速度,決定了你需要花費(fèi)的成本。幸運(yùn)的是,有一些工具可以幫助你在不犧牲質(zhì)量的情況下,加速這個(gè)循環(huán)。
圖:機(jī)器學(xué)習(xí)生命周期的一個(gè)真實(shí)例子
與任何系統(tǒng)非常相似,即使是已經(jīng)部署的機(jī)器學(xué)習(xí)模型,也需要不斷的被監(jiān)控、維護(hù)和更新。我們不能只是部署一個(gè)模型,然后忘記它,期望它在接下來的時(shí)間里,像在測試集上一樣,在現(xiàn)實(shí)世界中有著很好的表現(xiàn)。
部署在現(xiàn)實(shí)世界環(huán)境中的機(jī)器學(xué)習(xí)模型需要被更新——因?yàn)槲覀儠l(fā)現(xiàn)模型中的偏差,或者添加新的數(shù)據(jù)源,或者需要額外的功能等等。
而這些都會將整個(gè)項(xiàng)目帶回到數(shù)據(jù)、模型和評估周期中。
下一節(jié),我們將深入探討機(jī)器學(xué)習(xí)生命周期的每個(gè)階段,并重點(diǎn)介紹各個(gè)階段可以用到的當(dāng)下流行的工具。
階段一:數(shù)據(jù)部分
圖:機(jī)器學(xué)習(xí)周期的數(shù)據(jù)部分
雖然大家的最終目標(biāo)是一個(gè)高質(zhì)量的模型,但訓(xùn)練一個(gè)好的模型的關(guān)鍵之一,在于傳遞給它的數(shù)據(jù)的數(shù)量。
機(jī)器學(xué)習(xí)生命周期中,數(shù)據(jù)方面的相關(guān)步驟是:
1、數(shù)據(jù)收集
第一步,是在不管最終的數(shù)據(jù)質(zhì)量的情況下,先收集盡可能多的原始數(shù)據(jù)。在這部分原始數(shù)據(jù)中,只有一小部分?jǐn)?shù)據(jù)會被注釋,這也是大部分成本的來源。
而當(dāng)模型性能出現(xiàn)問題時(shí),根據(jù)需要添加大量數(shù)據(jù)是很有用的。
下面是常用的公共數(shù)據(jù)集列表:
https://medium.com/towards-artificial-intelligence/best-datasets-for-machine-learning-data-science-computer-vision-nlp-ai-c9541058cf4f
2、定義注釋模式
這個(gè)環(huán)節(jié),是生命周期里數(shù)據(jù)階段最重要的部分之一,而它卻經(jīng)常被忽視。
如果構(gòu)造了不良的注釋模式,那么會出現(xiàn)不明確的類和邊緣案例,從而使訓(xùn)練模型變得更加困難。
例如,目標(biāo)檢測模型的性能很大程度上取決于大小、定位、方向和截?cái)嗟葘傩?。因此,在注釋期間將目標(biāo)大小、密度和遮擋等屬性囊括其中,有助于模型可以學(xué)習(xí)到數(shù)據(jù)中的關(guān)鍵信息。
下面兩個(gè)是有助于這個(gè)過程的常用工具:
Matplotlib, Plot - 幫你發(fā)現(xiàn)數(shù)據(jù)中的Plot屬性
Tableu -可以幫助你更好理解數(shù)據(jù)的分析平臺
3、數(shù)據(jù)注釋
給數(shù)據(jù)注釋是一個(gè)冗長乏味的過程,每次都要連續(xù)數(shù)小時(shí)地執(zhí)行相同重復(fù)的任務(wù),這也是注釋服務(wù)蓬勃發(fā)展的原因之一——很多人并不想親手花大量時(shí)間在注釋上。
而這樣會導(dǎo)致注釋者可能犯了很多錯(cuò)誤:雖然大多數(shù)注釋公司都會說明最大誤差率(例如2%的最大誤差率),但更大的問題是,如果定義不當(dāng)?shù)淖⑨屇J?,會?dǎo)致注釋者以不同的方式標(biāo)記樣本。
然而,注釋公司的團(tuán)隊(duì)很難發(fā)現(xiàn)這一點(diǎn),所以你需要自己檢查。
下面是常用的各種注釋服務(wù):
Scale, Labelbox, Prodigy - 流行的注釋服務(wù)
Mechanical Turk - 眾包注釋
CVAT - DIY的計(jì)算機(jī)視覺注釋
Doccano - NLP專用注釋工具
Centaur Labs -醫(yī)療數(shù)據(jù)標(biāo)簽服務(wù)
4、改進(jìn)數(shù)據(jù)集和注釋
在嘗試改進(jìn)模型性能時(shí),你可能會花費(fèi)大量的時(shí)間。
如果模型正在學(xué)習(xí)的過程中,但性能卻不佳,那么罪魁禍?zhǔn)讕缀蹩偸前詈湾e(cuò)誤的訓(xùn)練數(shù)據(jù)集,這些偏差和錯(cuò)誤限制了模型的性能上限。
改進(jìn)模型通常會涉及到硬樣本挖掘(比如如果模型在數(shù)據(jù)集A上表現(xiàn)不好,那么就在訓(xùn)練數(shù)據(jù)中添加類似于數(shù)據(jù)集A的新數(shù)據(jù))、根據(jù)模型了解到的偏差重新平衡數(shù)據(jù)集,以及更新注釋模式以添加新標(biāo)簽和改進(jìn)現(xiàn)有標(biāo)簽。
下面是常用的改進(jìn)數(shù)據(jù)集和注釋的工具:
DAGsHub - 數(shù)據(jù)集版本控制
FiftyOne - 將數(shù)據(jù)可視化并找出錯(cuò)誤
階段二:模型部分
圖:機(jī)器學(xué)習(xí)生命周期中的模型部分
即使在這個(gè)過程中的輸出是「看起來很重要的模型」,但其實(shí),在整個(gè)循環(huán)當(dāng)中,這部分所需要花費(fèi)的時(shí)間是最少的。
圖:在工業(yè)界,花費(fèi)在數(shù)據(jù)集上的時(shí)間比花在模型上的時(shí)間更多
探索現(xiàn)有的預(yù)訓(xùn)練模型
這個(gè)環(huán)節(jié)的目標(biāo)是用盡可能多的可用資源,給建立模型的過程一個(gè)最好的開始。
「遷移學(xué)習(xí)」是當(dāng)今深度學(xué)習(xí)的核心內(nèi)容:我們可能不會從頭開始創(chuàng)建一個(gè)模型,而是對一個(gè)已存在的模型進(jìn)行微調(diào),而該模型是在相關(guān)任務(wù)上預(yù)先訓(xùn)練好的。
例如,如果你想創(chuàng)建一個(gè)口罩檢測模型,那么你可能會從GitHub下載一個(gè)預(yù)先訓(xùn)練好的人臉檢測模型,因?yàn)檫@個(gè)人臉檢測模型發(fā)展更成熟,更流行,也有更多的前期工作鋪墊。
下面是該環(huán)節(jié)常用的工具和方法:
FiftyOne model zoo - 使用一行代碼,即可下載和運(yùn)行模型
TensorFlow Hub - 訓(xùn)練過的ML模型倉庫
modelzoo.oo - 為包含了各種任務(wù)和庫預(yù)先訓(xùn)練的深度學(xué)習(xí)模型
構(gòu)建訓(xùn)練循環(huán)
你的數(shù)據(jù)可能并不會和用來預(yù)訓(xùn)練的數(shù)據(jù)完全屬于同一類型。
比如,對于圖像數(shù)據(jù)集,在為模型設(shè)置訓(xùn)練pipeline時(shí),需要考慮輸入分辨率和對象大小等因素。
此外,你還需要修改模型的輸出結(jié)構(gòu),以匹配標(biāo)簽的類和結(jié)構(gòu)。PyTorch lightning就提供了一種簡單的方法,使用這種方法,即可用有限的代碼擴(kuò)大模型訓(xùn)練。
下面是該環(huán)節(jié)常用的工具:
Scikit Learn - 構(gòu)建和可視化經(jīng)典機(jī)器學(xué)習(xí)系統(tǒng)
PyTorch, PyTorch Lightning, TensorFlow, TRAX - 流行的深度學(xué)習(xí)Python庫
Sagemaker - 在Sagemaker IDE中建立和訓(xùn)練機(jī)器學(xué)習(xí)系統(tǒng)
實(shí)驗(yàn)跟蹤
在整個(gè)周期內(nèi),這一環(huán)節(jié)可能需要多次迭代。
你最終會訓(xùn)練出很多不同的模型,所以你需要仔細(xì)地跟蹤模型的不同版本,以及訓(xùn)練時(shí)用到的超參數(shù)和數(shù)據(jù),這將極大地幫助你保持事情的條理性。
在這個(gè)過程中,常用的工具有:
Tensorbord,Weights & Biases,MLFlow - 可視化和跟蹤模型超參數(shù)
除此之外,這里還有一個(gè)小Tips:
即使你認(rèn)為你的任務(wù)是完全獨(dú)特的,在訓(xùn)練前你也可以使用一些技巧。比如你可以研究一下非監(jiān)督或半監(jiān)督的方式對模型進(jìn)行預(yù)訓(xùn)練的方法,并且只使用全部原始數(shù)據(jù)的一小部分進(jìn)行微調(diào)。
根據(jù)任務(wù)情況,你還可以試著使用合成的數(shù)據(jù)去預(yù)訓(xùn)練你的模型。
這么做的目標(biāo)是能夠獲得一個(gè)可以很好地表示數(shù)據(jù)的模型,如此以來,你的微調(diào)數(shù)據(jù)集只需要用來訓(xùn)練幾個(gè)有價(jià)值的模型參數(shù)層即可。
階段三:評估部分
圖:機(jī)器學(xué)習(xí)生命周期中的評估部分
一旦你成功地獲得了一個(gè)學(xué)習(xí)過訓(xùn)練數(shù)據(jù)的模型,那么接下來就應(yīng)該深入研究它在「新數(shù)據(jù)」上的表現(xiàn)是如何的。
下面是評估機(jī)器學(xué)習(xí)模型的關(guān)鍵步驟:
可視化模型輸出
一旦有了一個(gè)訓(xùn)練好的模型,你需要立即運(yùn)行幾個(gè)測試的例子,并且觀察輸出結(jié)果。
這是在對整個(gè)測試集運(yùn)行評估之前,發(fā)現(xiàn)訓(xùn)練或者評估pipeline過程中是否有錯(cuò)誤的最好的方法。
此外,這個(gè)過程的結(jié)果還會讓你知道模型中是否有任何明顯的錯(cuò)誤——比如有兩個(gè)類被錯(cuò)誤標(biāo)記了。
你可以使用以下工具來輔助:
OpenCV, Numpy, Matplotlib - 可編寫自定義可視化腳本
FiftyOne - 可視化針對圖像和視頻此類計(jì)算機(jī)視覺任務(wù)中的輸出
選擇正確的衡量標(biāo)準(zhǔn)
在觀察到了幾個(gè)樣本的輸出結(jié)果之后,你需要提出一個(gè)或幾個(gè)衡量標(biāo)準(zhǔn),這可以幫助你比較模型的整體性能。
對于一個(gè)特定的任務(wù),為了確保獲得最佳模型,你需要創(chuàng)造一個(gè)與最終目標(biāo)相一致的模型衡量指標(biāo)。
與此同時(shí),當(dāng)你發(fā)現(xiàn)你想追蹤的其他重要特性時(shí),你還需要更新指標(biāo):舉個(gè)例子,比如你想檢測你創(chuàng)建的目標(biāo)檢測模型在小規(guī)模目標(biāo)上是如何表現(xiàn)的,那么你就可以使用「邊界框< 0.05」作為度量的標(biāo)準(zhǔn)之一。
不過需要注意的是,雖然這些度量指標(biāo)在比較多個(gè)模型的性能時(shí)很有用,但它們卻很少有助于開發(fā)者理解如何提高模型性能的過程。
這個(gè)過程中,下面一些工具較為常用:
- Scikit Learn - 提供了通用的衡量指標(biāo)
- Python, Numpy - 可以實(shí)現(xiàn)開發(fā)自定義指標(biāo)
看看失敗案例
你輸入的訓(xùn)練數(shù)據(jù)決定了模型的表現(xiàn),假設(shè)模型學(xué)到了一些信息,但是卻表現(xiàn)得比你預(yù)期的要差,那么你就需要看看數(shù)據(jù)了。
查看模型運(yùn)行良好的例子可能會很有用,但是查看模型預(yù)測錯(cuò)誤的例子是最重要的。在查看了足夠多的這些例子之后,你會逐漸發(fā)現(xiàn)模型在什么類型的例子上總會表現(xiàn)失敗。
例如,下面的圖像顯示了Open Images數(shù)據(jù)集的示例,有一個(gè)后輪呈現(xiàn)出了假陽性。這個(gè)假陽性結(jié)果的起因,來源于有一個(gè)注釋缺失了。因此,檢查一遍數(shù)據(jù)集中的所有注釋,并修正其他相似的錯(cuò)誤,可以幫助提高該模型在輪胎上的表現(xiàn)性能。
圖:來自Tyler Ganter
這一環(huán)節(jié)中,常用的工具有:
FiftyOne、Aquarium, Scale Nucleus - 可以通過調(diào)試數(shù)據(jù)集來發(fā)現(xiàn)錯(cuò)誤
制定解決方案
找出提升模型性能的方法的第一步,是明確失敗案例的特征。
在大部分情況下,你需要通過添加訓(xùn)練數(shù)據(jù)來解決問題,但訓(xùn)練數(shù)據(jù)不是隨意添加的,而應(yīng)該是哪些和測試失敗例子相似的數(shù)據(jù)。此外,你還可以改變pipeline中的預(yù)處理或者后續(xù)處理的過程,或者修正注釋。
不管解決方案是什么,它都是起源于對模型的失敗例子的理解而產(chǎn)生的。
階段四:生產(chǎn)部分
圖:部署一個(gè)模型
在這個(gè)階段,你終于得到了一個(gè)在評估指標(biāo)上表現(xiàn)還不錯(cuò)的模型,并且在邊緣樣本上不會產(chǎn)生重大錯(cuò)誤。
現(xiàn)在,你需要做什么呢?
監(jiān)控模型
在這一步驟中, 你需要測試部署情況,以確保模型在測試數(shù)據(jù)中,仍然按照你的評估指標(biāo)和推斷速度等方面的指標(biāo)來執(zhí)行。
這一階段中,常用的工具有:
Pachyderm, Algorithmia, Datarobot, Kubeflow, MLFlow - 可以幫助你對模型和pipeline軍星部署和監(jiān)控
Amazon Web Services,Google AutoML, Microsoft Azure - 這些是基于云的機(jī)器學(xué)習(xí)模型解決方案
評估新數(shù)據(jù)
在實(shí)際生產(chǎn)過程中使用訓(xùn)練好的模型,意味著你需要經(jīng)常將從來沒有在該模型上測試過的數(shù)據(jù)不斷地輸入到整個(gè)框架當(dāng)中。
在這個(gè)過程中,有一些舉措特別重要:1 用你指定的衡量指標(biāo)對這些新數(shù)據(jù)進(jìn)行評估 2 深入觀察特別的例子,使用這些舉措,你可以發(fā)現(xiàn)模型在新數(shù)據(jù)上的具體表現(xiàn)情況。
繼續(xù)理解模型
模型中的一些誤差和偏見可能是根深蒂固的,并且需要很長時(shí)間才能被發(fā)現(xiàn)。
在這個(gè)過程中,你需要不斷測試和探索你的模型,以發(fā)現(xiàn)各種可能導(dǎo)致模型出現(xiàn)問題的邊緣情況以及趨勢,不然,這些問題就可能會被客戶發(fā)現(xiàn)。
擴(kuò)展功能
即使一切都很完美,模型也可能并沒有給你帶來預(yù)期中的利潤。
有無數(shù)種方法可以擴(kuò)展當(dāng)前模型的功能:比如添加新類、開發(fā)新數(shù)據(jù)流以及提高現(xiàn)有模型的效率——這些舉措都會使當(dāng)前模型變得更好。
此外,只要想提升系統(tǒng)的性能,那么你都需要重新啟動機(jī)器學(xué)習(xí)的生命周期,來更新數(shù)據(jù)和模型,并對其進(jìn)行評估,以此來確保新的系統(tǒng)可以按照預(yù)期來順利工作。
參考鏈接:
https://towardsdatascience.com/the-machine-learning-lifecycle-in-2021-473717c633bc