在這個「人人AI」的時代,很多人都會或多或少接觸過機器學習(ML)。
似乎每一家需要資料的公司,都在嘗試利用人工智慧和機器學習來分析他們的業務並提供自動化解決方案。
「《財富》的商業洞察板塊(Fortune Business Insights)預計,到2027年,機器學習的市值將達到1170億美元。」
機器學習的火爆,使得許多沒有相關背景的新手也紛紛跨入該行業。當然,這本身確實是一件好事,然而,我們也需要明白,將機器學習專案整合到實際生產環境中,其實遠沒有想象的那麼容易。
圖:Algorithmia公司基於750家企業得出的2020企業ML使用狀態影象
「Algorithmia公司經過調查表示:55%從事機器學習模型的企業尚未將其投入生產」
在這裡可以一提的是,Algorithmia是一家提供簡化機器學習的平臺的創業公司,它在2017年6月已經從谷歌那裡完成了一項價值1050萬美元的a輪融資。
許多人似乎認為,如果有了訓練模型所需的資料和計算資源,實現機器學習專案是相當簡單的。
但是,其實這是大錯特錯的——
這種假設很可能會導致在沒有部署模型的情況下,消耗大量的時間和金錢成本。
圖:機器學習生命週期的樸素假設
沒有那麼簡單:機器學習生命週期一覽在現實中,機器學習專案並不簡單,它是一個在改進資料、模型和評估之間迴圈往復的過程,並且永遠不會真正完成。
這個迴圈對於開發機器學習模型至關重要,因為它側重於使用模型結果和評估來細化資料集。此外,高質量的資料集是訓練高質量模型最可靠的方法。
這個迴圈的迭代速度,決定了你需要花費的成本。幸運的是,有一些工具可以幫助你在不犧牲質量的情況下,加速這個迴圈。
圖:機器學習生命週期的一個真例項子
與任何系統非常相似,即使是已經部署的機器學習模型,也需要不斷的被監控、維護和更新。我們不能只是部署一個模型,然後忘記它,期望它在接下來的時間裡,像在測試集上一樣,在現實世界中有著很好的表現。
部署在現實世界環境中的機器學習模型需要被更新——因為我們會發現模型中的偏差,或者新增新的資料來源,或者需要額外的功能等等。
而這些都會將整個專案帶回到資料、模型和評估週期中。
下一節,我們將深入探討機器學習生命週期的每個階段,並重點介紹各個階段可以用到的當下流行的工具。
階段一:資料部分圖:機器學習週期的資料部分
雖然大家的最終目標是一個高質量的模型,但訓練一個好的模型的關鍵之一,在於傳遞給它的資料的數量。
機器學習生命週期中,資料方面的相關步驟是:
而當模型效能出現問題時,根據需要新增大量資料是很有用的。
下面是常用的公共資料集列表:
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 - 可以實現開發自定義指標
看看失敗案例你輸入的訓練資料決定了模型的表現,假設模型學到了一些資訊,但是卻表現得比你預期的要差,那麼你就需要看看資料了。
檢視模型執行良好的例子可能會很有用,但是檢視模型預測錯誤的例子是最重要的。在查看了足夠多的這些例子之後,你會逐漸發現模型在什麼型別的例子上總會表現失敗。
圖:來自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