創建出色的機器學習系統是一門藝術。
構建出色的機器學習系統時,需要考慮很多因素。但是經常發生的情況是,我們作為數據科學家只擔心項目的某些部分。
但是,我們是否曾經考慮過擁有模型後將如何部署模型?
我見過很多機器學習項目,但其中許多註定要失敗,因為它們從一開始就沒有制定生產計劃。
這篇文章是關於一個成功的ML項目的過程要求的-一個投產的項目。
1.在開始時建立基線
您實際上並不需要建立模型來獲得基準結果。
假設我們將使用RMSE作為時間序列模型的評估指標。我們在測試集上評估了模型,RMSE為3.64。
3.64是不錯的RMSE嗎?我們怎麼知道?我們需要基線RMSE。
這可能來自用於同一任務的當前使用的模型。或通過使用一些非常簡單的啟發式方法。對於時間序列模型,失敗的基準是最後一天的預測。即,預測前一天的數字。
或圖像分類任務如何。抽取1000個標記的樣本,並按人類分類。人為準確性可以成為您的基準。如果人類無法在任務上獲得70%的預測準確性,那麼您的模型達到類似水平時,您總是可以考慮使流程自動化。
學習:在創建模型之前,請先了解要獲得的結果。放出一些期望值只會讓您和您的客戶失望。
2.持續集成是前進的道路
您現在已經創建了模型。它的性能優於本地測試數據集上的基線/當前模型。我們應該前進嗎?
我們有兩個選擇-
- 進入無限循環以進一步改進我們的模型。
- 在生產環境中測試我們的模型,獲得更多有關可能出問題的見解,然後通過持續集成繼續改進我們的模型。
我是第二種方法的粉絲。在他的真棒 第三場 命名構建學習機項目在Coursera 深度學習專業,安德魯·Ng表示-
“不要一開始就嘗試設計和構建完美的系統。取而代之的是,可能在短短几天內快速構建和訓練基本系統。即使基本系統離您可以構建的“最佳”系統相去甚遠,檢查基本系統的功能還是很有價值的:您將迅速找到線索,向您顯示最有價值的投資方向。”
完成比完美更重要。
學習:如果您的新模型比生產中的當前模型更好,或者新模型比基準更好,那麼等待上線是沒有意義的。
3.您的模型可能會投入生產
您的模型是否比基準更好?它在本地測試數據集上的性能更好,但總體上是否真的能很好地工作?
要測試您的模型優於現有模型的假設的有效性,可以設置A / B測試。一些用戶(測試組)看到來自模型的預測,而某些用戶(控件)看到來自先前模型的預測。
實際上,這是部署模型的正確方法。您可能會發現實際上您的模型並不像看起來那樣好。
錯誤的確不是錯,錯誤的是不要期望我們會錯。
很難指出為什麼模型在生產環境中表現不佳的真正原因,但某些原因可能是:
- 您可能會看到實時獲得的數據與訓練數據有很大的不同。
- 或者您沒有正確完成預處理管道。
- 否則您無法正確衡量性能。
- 也許您的實現中存在錯誤。
學習: 不要全面投入生產。A / B測試始終是前進的絕妙方法。準備好要依靠的東西(也許是舊型號)。可能總會有可能無法預料的事情崩潰。
4.您的模型甚至可能無法投入生產
我創建了這個令人印象深刻的ML模型,它提供了90%的準確性,但是獲取預測大約需要10秒。
可以接受嗎?也許對於某些用例,但實際上沒有。
過去,有許多Kaggle比賽的獲勝者最終創造出了怪獸合奏,從而在排行榜上名列前茅。下面是一個特別的令人興奮的示例模型,該模型用於贏得Kaggle的Otto分類挑戰:
另一個例子是Netflix百萬美元推薦引擎挑戰賽。 由於涉及的工程成本,Netflix團隊最終 從未使用成功的解決方案。
那麼如何在機器上使模型準確又容易呢?
這是師生模型或知識蒸餾的概念。在知識蒸餾中,我們在已經訓練好的較大的老師模型上訓練了較小的學生模型。
在這裡,我們使用教師模型中的軟標籤/概率,並將其用作學生模型的訓練數據。
關鍵是老師正在輸出課堂概率–“軟標籤”而不是“硬標籤”。例如,水果分類器可能會說“ Apple 0.9,Pear 0.1”而不是“ Apple 1.0,Pear 0.0”。何必?因為這些“軟標籤”比原始標籤提供的信息更多-告訴學生,是的,特定的蘋果確實有點像梨。學生模型通常可以非常接近教師水平的表現,即使使用的參數減少了1-2個數量級!— 來源
學習:有時候,我們在預測時沒有很多可用的計算,因此我們希望有一個更輕便的模型。我們可以嘗試建立更簡單的模型,或者嘗試針對此類用例使用知識提煉。
5.維護和反饋循環
世界不是恆定不變的,您的模型權重也是如此
我們周圍的世界正在迅速變化,兩個月前可能適用的方法現在可能已不重要。在某種程度上,我們建立的模型是對世界的反映,如果世界在變化,我們的模型應該能夠反映這種變化。
模型性能通常會隨着時間而下降。
因此,我們必須從一開始就考慮在維護周期中升級模型的方法。
此周期的頻率完全取決於您要解決的業務問題。在廣告預測系統中,用戶往往會變幻無常,並且購買模式不斷出現,因此頻率需要非常高。在評論情緒分析系統中,頻率不必那麼高,因為語言不會改變其結構。
我還想承認反饋循環在機器學習系統中的重要性。假設您預測在狗對貓分類器中,特定圖像是狗的可能性很小。我們可以從這些低置信度的例子中學到什麼嗎?您可以將其發送到手動審閱,以檢查它是否可以用於重新訓練模型。這樣,我們就可以在不確定的實例上訓練分類器。
學習:考慮生產時,還要提出一個計劃,以使用反饋來維護和改進模型。
結論
在考慮將模型投入生產之前,這些都是我發現重要的事情。
儘管這並不是您需要考慮的事情的清單,也可能會出錯的事情的清單不完整,但無疑會在您下次創建機器學習系統時起到深思熟慮的作用。
本文轉自medium,原文地址
Comments