導讀
為什么我們的機器學習項目會失敗?
創造一個大的機器學習系統是一門藝術。
在構建一個大的機器學習系統時,有很多事情需要考慮。但作為數據科學家,我們常常只擔心項目的某些部分。
但是我們是否考慮過一旦我們擁有了模型,我們將如何部署它們?
我見過許多 ML 項目,其中許多項目注定要失敗,因為它們從一開始就沒有一個固定的生產計劃。
這篇文章是關于一個成功的 ML 項目的過程需求 —— 一個進入生產的項目。
1. 在開始的時候建立基線
你并不需要用模型來獲得基線結果。
假設我們將使用 RMSE 作為我們的時間序列模型的評估指標。我們在測試集上對模型進行了評估,RMSE 為 3.64。
3.64 是個好 RMSE 嗎?我們怎么知道?我們需要一個基線 RMSE。
這可能來自當前使用的用于相同任務的模型。或者使用一些非常簡單的啟發式。對于時間序列模型,需要打敗的基線是最后一天的預測。即,預測前一天的數字。
如果是圖像分類任務,取 1000 個有標簽的樣本。而人類的準確性可以作為你的基線。如果一個人不能在任務中獲得 70%的預測精度,那么如果你的模型達到類似的水平,你總是可以考慮將流程自動化。
學習:在你創建模型之前,試著了解你將要得到的結果。設定一些不切實際的期望只會讓你和你的客戶失望。
2. 持續集成是前進的方向
你現在已經創建了你的模型。它在本地測試數據集上的性能比基線/當前模型要好。我們應該繼續前進嗎?
我們有兩個選擇:
進一步改進我們的模型,這是一個無止境的循環。
在生產環境中測試我們的模型,得到更多關于可能出錯的信息,然后使用持續集成來改進我們的模型。
我支持第二種方法。Andrew Ng 在 Coursera 上的第三門課,“Deep Learning Specialization”中的“Structuring Machine learning”中說:
“不要一開始就試圖設計和構建完美的系統。相反,應該快速地建立和訓練一個基本的系統 —— 也許只需要幾天的時間。即使基本的系統遠遠不是你能建立的“最好”的系統,檢查基本的系統是有價值的:你會很快找到一些線索,告訴你在哪些方面最值得投入你的時間。
完成比完美更好。
學習:如果你的新模型比當前生產中的模型更好,或者你的新模型比基線更好,那么等待投入生產是沒有意義的。
3. 你的模型可能會進入生產
你的模型是否優于基線?它在本地測試數據集上表現得更好,但是它真的能在整體上工作得很好嗎?
為了測試你的模型優于現有模型的假設的有效性,你可以設置一個A/B 測試。一些用戶(測試組)看到來自你的模型的預測,而一些用戶(控制組)看到來自前一個模型的預測。
事實上,這是部署模型的正確方式。你可能會發現你的模型并沒有看起來那么好。
錯了并不是真的錯,錯的是沒有預料到我們可能會錯。
很難指出你的模型在生產環境中表現不佳的真正原因,但一些原因可能是:
你可能會看到實時的數據與訓練數據有很大的不同。
或者你沒有正確地完成預處理 pipeline。
或者你的實現中有一個 bug。
學習:不要全面投入生產。A/B 測試永遠是前進的好方法。準備一些可以依靠的東西(可能是一個更老的模型)。總有一些東西會出問題,這是你無法預料的。
4. 你的模型可能不會投入生產中
我創建了這個令人印象深刻的 ML 模型,它提供了 90%的準確性,但它需要大約 10 秒鐘來獲取預測。
**這樣可接受嗎?**對于某些用例可能是,但實際上不是。
在過去,有許多 Kaggle 競賽的獲勝者最終創造了非常大的模型集成,占據了排行榜的榜首。下面是一個例子模型,它曾在 Kaggle 上贏得 Otto 分類挑戰:
在Level1上用了33個模型和8種特征工程
另一個例子是 Netflix 百萬美元推薦引擎挑戰。由于涉及的工程成本,Netflix 團隊最終沒有使用獲獎解決方案。
那么,如何讓你的模型在機器上既準確又簡單呢?
這就引出了 Teacher-Student 模型或“知識蒸餾”的概念。在知識蒸餾中,我們在一個更大的已經訓練好的教師模型上訓練一個更小的學生模型。
這里我們使用來自教師模型的軟標簽/概率,并將其作為學生模型的訓練數據。
關鍵是,老師輸出類別概率 —— “軟標簽”而不是“硬標簽”。例如,一個水果分類器可能會說“Apple 0.9, Pear 0.1”而不是“Apple 1.0, Pear 0.0”。為什么要這樣呢?因為這些“軟標簽”比原來的標簽信息更豐富——告訴學生,是的,這個蘋果確實有點像梨。學生模型通常可以非常接近教師水平的表現,即使參數少了 1-2 個數量級!
學習:有時,我們的預測時間很有限,所以我們想要一個更輕的模型。我們可以嘗試構建更簡單的模型,或者嘗試對這樣的用例使用知識蒸餾。
5. 周期性的維護和反饋
世界不是恒定的,你的模型權重也不是恒定的
我們周圍的世界正在迅速變化,兩個月前可能適用的東西現在可能已經不適用了。在某種程度上,我們建立的模型是對世界的反映,如果世界在變化,我們的模型應該能夠反映這種變化。
模型性能通常隨時間而下降。
由于這個原因,我們必須在一開始就考慮將我們的模型升級作為維護的一部分
維護周期的頻率完全取決于你試圖解決的業務問題。在一個廣告預測系統中,用戶往往變化無常,購買模式不斷出現,需要相當高的頻率。而在評論情緒分析系統中,由于語言本身的結構變化不是很大,所以頻率不需要那么高。
我還必須要承認反饋回路在機器學習系統中的重要性。假設你用貓狗分類器預測了一個的圖像是狗,但是概率很低。我們能從這些低置信度的例子中學到什么嗎?你可以將其發送到手動檢查,以檢查它是否可以用于重新訓練模型。通過這種方式,我們可以在它不確定的樣本上訓練分類器。
學習:在考慮生產時,提出使用反饋來維護和改進模型的計劃。
總結
在考慮將模型投入生產之前,我發現這些事情是很重要的。
雖然這并不是你需要考慮的事情和可能出錯的事情的詳盡列表,但它無疑可以作為你下次創建機器學習系統時的思想食糧。
-
機器學習
+關注
關注
66文章
8438瀏覽量
132928
發布評論請先 登錄
相關推薦
評論