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