來自 | AI開發者
在傳統的軟體開發中,一個 bug 通常會導致程序崩潰。這對用戶來說是很煩人的,因此解決這些問題對開發人員來說很重要——當程序失敗時,開發人員可以檢查錯誤以了解原因。
在機器學習模型中,開發人員有時會遇到錯誤,但經常會在沒有明確原因的情況下導致程序崩潰。雖然這些問題可以手動調試,但機器學習模型通常由於輸出預測不佳而失敗。更糟糕的是,當模型失敗時,通常沒有信號顯示模型失敗的原因或時間。而使情況更為複雜的是,這可能是由於一些因素造成的,包括糟糕的訓練數據、高損失誤差或缺乏收斂速度。
在這篇博客文章中,我們將討論如何調試這些無聲故障,以便它們不會影響我們機器學習算法的性能。以下是我們將要介紹的內容的簡要概述:
如何發現輸入數據中的缺陷。
如何使模型從較少的數據中學到更多。
如何為訓練準備數據,避免常見陷阱。
如何尋找最優模型超參數。
如何安排學習速率以減少過擬合。
如何用權重和偏差監測訓練進度。
值得注意的是,作為一名數據科學/機器學習實踐者,你需要認識到機器學習項目失敗的原因有很多。大多數與工程師和數據科學家的技能無關(僅僅因為它不起作用並不意味著你有缺陷)。我們的收穫是,如果我們能夠儘早發現常見的陷阱或漏洞,我們可以節省時間和金錢。在金融、政府和醫療等高風險應用領域,這將是至關重要的。
1 如何發現輸入數據中的缺陷
在想知道我們的數據是否能夠勝任訓練一個好模型的任務,可以考慮兩個方面:
為了弄清楚我們的模型是否包含預測信息,我們可以捫心自問:給定這些數據,人類能做出預測嗎?
如果一個人不能理解一幅圖像或一段文字,那麼我們的模型也不會預測出有意義的結果。如果沒有足夠的預測信息,給我們的模型增加更多的輸入並不會使它變得更好;相反,模型會過擬合,變得不太準確。
一旦我們的數據有足夠的預測信息,我們就需要弄清楚我們是否有足夠的數據來訓練一個模型來提取信號。有幾個經驗法則可以遵循:
對於分類,我們每類至少應有 30 個獨立樣本。
對於任何特徵,特別是結構化數據問題,我們至少應該有 10 個樣本。
數據集的大小與模型中參數的數量成正比。這些規則可能需要根據你的特定應用程式進行調整。如果你能利用遷移學習,那麼你可以大大減少所需樣本的數量。
2 如何使模型從較少的數據中學習更多
在許多情況下,我們只是沒有足夠的數據。在這種情況下,最好的選擇之一是擴充數據。再進一步,我們可以用自動編碼器和生成對抗網絡等生成模型生成自己的數據。
同樣,我們可以找到外部公共數據,這些數據可以在網際網路上找到。即使數據最初不是為我們的目的而收集的,我們也可以潛在地重新標記它或將其用於遷移學習。我們可以在一個大數據集上為不同的任務訓練一個模型,然後使用該模型作為任務的基礎。同樣,我們可以找到一個別人為不同任務訓練過的模型,並將其重新用於我們的任務。
重要的是,要記住,在大多數情況下,數據的質量勝過數據的數量。擁有一個小的、高質量的數據集並訓練一個簡單的模型是在訓練過程早期發現數據中問題的最佳實踐。許多數據科學家犯的一個錯誤是,他們花時間和金錢獲取一個大數據集,但後來發現他們的項目有錯誤的數據類型。
3 如何準備訓練數據並避免常見的陷阱
標準化:確保所有數據的平均值為 0,標準偏差為 1。這是減少特徵的最常見方式。如果你懷疑數據中包含異常值,那麼它甚至更有用。
最小 — 最大重縮放:通過減去最小值,然後除以值的範圍,將所有數據的值縮放到 0 和 1 之間。
平均值規範化:確保數據的值介於(-1)和 1 之間,平均值為 0。我們減去平均值,除以數據的範圍。
import wandb# Your custom arguments defined hereargs = …wandb.init(config=args, project=」my-project」)wandb.config[「more」] = 「custom」def training_loop():while True:# Do some machine learningepoch, loss, val_loss = …# Framework agnostic / custom metricswandb.log({「epoch」: epoch, 「loss」: loss, 「val_loss」: val_loss})或者,我們可以將 Tensorboard 集成在一行中(https://docs.wandb.com/integrations/tensorboard):wandb.init(sync_tensorboard=True)TensorBoard 是 TensorFlow 擴展,它允許我們在瀏覽器中輕鬆監視模型。為了提供一個接口,我們可以從中觀察模型的進程,tensorboard 還提供了一些對調試有用的選項。例如,我們可以在訓練過程中觀察模型的權重和梯度的分布。如果我們真的想深入研究這個模型,tensorboard 提供了一個可視化的調試器。在這個調試器中,我們可以逐步執行 tensorflow 模型並檢查其中的每個值。如果我們正在研究複雜的模型,比如變分自動編碼器,並且試圖理解複雜事物為什麼會崩潰,這一點尤其有用。我們現在有大量的工具可以幫助我們運行實際的機器學習項目。確保模型在部署之前能夠正常工作是至關重要的,如果不這樣做,我們會損失很多錢。希望這篇博客文章能為你提供實用的技術,使模型具有通用性,易於調試。
via:https://mc.ai/six-ways-to-debug-a-machine-learning-model/