模型效果差?你可能需要試試這六種調試方法

2021-03-02 深度學習這件小事

來自 | AI開發者

在傳統的軟體開發中,一個 bug 通常會導致程序崩潰。這對用戶來說是很煩人的,因此解決這些問題對開發人員來說很重要——當程序失敗時,開發人員可以檢查錯誤以了解原因。

在機器學習模型中,開發人員有時會遇到錯誤,但經常會在沒有明確原因的情況下導致程序崩潰。雖然這些問題可以手動調試,但機器學習模型通常由於輸出預測不佳而失敗。更糟糕的是,當模型失敗時,通常沒有信號顯示模型失敗的原因或時間。而使情況更為複雜的是,這可能是由於一些因素造成的,包括糟糕的訓練數據、高損失誤差或缺乏收斂速度。

在這篇博客文章中,我們將討論如何調試這些無聲故障,以便它們不會影響我們機器學習算法的性能。以下是我們將要介紹的內容的簡要概述:

如何發現輸入數據中的缺陷。

如何使模型從較少的數據中學到更多。

如何為訓練準備數據,避免常見陷阱。

如何尋找最優模型超參數。

如何安排學習速率以減少過擬合。

如何用權重和偏差監測訓練進度。

值得注意的是,作為一名數據科學/機器學習實踐者,你需要認識到機器學習項目失敗的原因有很多。大多數與工程師和數據科學家的技能無關(僅僅因為它不起作用並不意味著你有缺陷)。我們的收穫是,如果我們能夠儘早發現常見的陷阱或漏洞,我們可以節省時間和金錢。在金融、政府和醫療等高風險應用領域,這將是至關重要的。

1  如何發現輸入數據中的缺陷

在想知道我們的數據是否能夠勝任訓練一個好模型的任務,可以考慮兩個方面:

為了弄清楚我們的模型是否包含預測信息,我們可以捫心自問:給定這些數據,人類能做出預測嗎?

如果一個人不能理解一幅圖像或一段文字,那麼我們的模型也不會預測出有意義的結果。如果沒有足夠的預測信息,給我們的模型增加更多的輸入並不會使它變得更好;相反,模型會過擬合,變得不太準確。

一旦我們的數據有足夠的預測信息,我們就需要弄清楚我們是否有足夠的數據來訓練一個模型來提取信號。有幾個經驗法則可以遵循:

對於分類,我們每類至少應有 30 個獨立樣本。

對於任何特徵,特別是結構化數據問題,我們至少應該有 10 個樣本。

數據集的大小與模型中參數的數量成正比。這些規則可能需要根據你的特定應用程式進行調整。如果你能利用遷移學習,那麼你可以大大減少所需樣本的數量。

2 如何使模型從較少的數據中學習更多

在許多情況下,我們只是沒有足夠的數據。在這種情況下,最好的選擇之一是擴充數據。再進一步,我們可以用自動編碼器和生成對抗網絡等生成模型生成自己的數據。

同樣,我們可以找到外部公共數據,這些數據可以在網際網路上找到。即使數據最初不是為我們的目的而收集的,我們也可以潛在地重新標記它或將其用於遷移學習。我們可以在一個大數據集上為不同的任務訓練一個模型,然後使用該模型作為任務的基礎。同樣,我們可以找到一個別人為不同任務訓練過的模型,並將其重新用於我們的任務。

重要的是,要記住,在大多數情況下,數據的質量勝過數據的數量。擁有一個小的、高質量的數據集並訓練一個簡單的模型是在訓練過程早期發現數據中問題的最佳實踐。許多數據科學家犯的一個錯誤是,他們花時間和金錢獲取一個大數據集,但後來發現他們的項目有錯誤的數據類型。

3 如何準備訓練數據並避免常見的陷阱

標準化確保所有數據的平均值為 0,標準偏差為 1。這是減少特徵的最常見方式。如果你懷疑數據中包含異常值,那麼它甚至更有用。

最小 — 最大重縮放通過減去最小值,然後除以值的範圍,將所有數據的值縮放到 0 和 1 之間。

平均值規範化:確保數據的值介於(-1)和 1 之間,平均值為 0。我們減去平均值,除以數據的範圍。

然而,我們在準備特徵時,只測量測試集上的度量因子、平均值和標準差是很重要的。如果我們在整個數據集上測量這些因素,由於信息暴露,算法在測試集上的性能可能會比在實際生產中更好。手動調整神經網絡模型的超參數可能非常繁瑣。這是因為當涉及到超參數調整時,沒有科學的規則可供使用。這就是為什麼許多數據科學家已經轉向自動超參數搜索,使用某種基於非梯度的優化算法。
為了了解如何在權重和偏差的情況下找到模型的最優超參數,讓我們看看 mask r-cnn 計算機視覺模型的這個例子(https://www.wandb.com/articles/mask-r-cnn-hyperparameter-experiments-with-weights-and-biases)。為了實現語義分割任務的 mask r-cnn,connor 和 trent 調整了控制模型運行方式的不同超參數(https://github.com/connorhough/Mask_RCNN/blob/master/mrcnn/config.py):學習速率、梯度剪輯歸一化、權重衰減、比例、各種損失函數的權重……他們想知道圖像的語義分割是如何進行的。由於模型使用不同的超參數進行訓練,因此他們集成了一個 imagecallback()類(https://github.com/connorhough/Mask_RCNN/blob/master/samples/coco/coco.py)來同步到 wandb。此外,他們還寫了一個腳本(https://github.com/connorhough/Mask_RCNN/blob/master/samples/coco/inspect_weights.ipynb),用於運行參數掃描,這些掃描可以適應不同的超參數或同一超參數的不同值。
他們的結果可以在 Wandb Run 頁面上找到(https://app.wandb.ai/trentwatson1/mask-rcnn/runs)。高梯度裁剪集和高學習速率可以提高模型精度,在迭代次數增加的情況下,驗證損失分數會迅速下降。其中最重要的超參數之一是學習速率,這是很難優化的。學習速率小導致訓練速度慢,學習速率大導致模型過度擬合。在尋找學習速率方面,標準的超參數搜索技術不是最佳選擇。對於學習速率,最好執行一個行搜索並可視化不同學習速率的損失,因為這將使你了解損失函數的行為方式。在進行直線搜索時,最好以指數方式提高學習率。你更可能關心學習速率較小的區域。一開始,我們的模型可能離最優解很遠,因此,我們希望儘可能快地移動。然而,當我們接近最小損失時,我們希望移動得更慢以避免超調。因此,我們應該定義一個學習速率表,以便在訓練期間根據指定的規則更新速率。調試模型的一個重要部分是,在投入大量時間訓練模型之前,先搞清楚什麼時候會出問題。wandb 提供了一種無縫的方式來可視化和跟蹤機器學習實驗。你可以搜索/比較/可視化訓練運行,分析運行時的系統使用指標,複製歷史結果,等等。安裝完 wandb 之後,我們要做的就是在我們的訓練腳本中包含這段代碼:
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/

相關焦點

  • 為什麼我們要重視機器學習模型的調試?
    人們逐漸意識到ML模型可能會失敗,這是模型需要調試的原因,理解和修復ML模型中的問題對ML的未來至關重要。如果無法在模型表現不佳或行為異常時對它們進行故障排除,大規模採用和部署ML將無法實現。因為所有ML模型都會出錯,所以所有關心ML的人也應該關心模型調試。
  • 在python中使用SageMaker Debugger進行機器學習模型的開發調試
    如果你從事軟體開發,你就會知道 Bug 是生活的一部分。當你開始你的項目時,Bug 就可能存在,當你把你的產品交付給客戶時,Bug 也可能存在。在過去的幾十年中,軟體開發社區已經開發了許多的技術工具、IDE、代碼庫等來幫助開發者儘早地發現 Bug,以避免在產品交付的時候仍舊存在 Bug。
  • 模型可解釋性差?你考慮了各種不確定性了嗎?
    在過去幾年裡,因為意識到了模型可解釋性的重要作用,研究員們已經研究出了好幾種方法,並且在去年的 NIPS 會議中也有一個專門的研究展示會(workshop) 負責討論相關主題。提供模型可解釋性的方法包括:不過在開始深入探究如何使用不確定性來調試和解釋模型之前,讓我們先來理解為什麼不確定性如此重要。為何我們需要關注不確定性?
  • 軟體工程——認識方法、模型、工具和技術
    做任何事情都要講究一個方法,好的方法可以起到事半功倍的效果,提高我們的做事效率。在我們身邊,有的人做事效率很高,處理事情井井有條;有的人做事效率就比較低下,處理事情拖拖拉拉。做事效率低下的人不代表他們的工作能力就差,而是沒有一個好的做事方法,來指導他們如何去處理各類事情。
  • 臥室隔音差怎麼辦?六種方法,還你一夜好睡眠
    臥室作為睡覺、休息的場所,最需要安靜。可是如果自己家的臥室隔音太差怎麼辦呢?別怕,我們還有下面六種方法來幫你。換門隔絕同一樓層的噪音,比如家人的噪音、樓道裡的噪音,關鍵就在於臥室門。好的臥室門能把聲音完美的隔絕開來,可如果門沒有選好,不僅噪音大,就連基礎的保溫功能都成問題。
  • 乾貨| 模型表現不好怎麼辦?37條妙計助你扭轉局勢
    「我哪一步做錯了呢?」你迷茫地問你的電腦,而電腦卻笑而不語。如果你的模型輸出來的都是辣雞——例如你想預測所有輸出的平均值,或者模型的精度很低——該從哪兒開始檢查?可能出錯的地方多了去了。經過很多次的調試,我常常做此類檢查。我根據自己的經驗以及很多好的想法,寫了以下這個指引。希望對你們也有用。
  • 數學模型回顧:基於有限差分方法的傳熱模型
    傳熱模型等一系列有限差分模型在數學應用領域佔據著重要的地位。其算法結構簡單,數學理論成熟,並且求解精度相對來說有一定保障。
  • 14 個你可能不知道的 JavaScript 調試技巧
    (點擊上方公眾號,可快速關注)英文: raygun   譯文:oschinahttps
  • 14個你可能不知道的JavaScript調試技巧
    儘管江湖傳言 JavaScript 很難調試,但如果你掌握了幾個技巧,就能用很少的時間來解決錯誤和 bug.文中已經列出了 14 個你可能不知道的調試技巧,但是可能需要你牢記在心,以便在下次需要調試 JavaScript 代碼時使用!
  • 100種分析思維模型(007號)
    正態分布的特點,是大部分數據都離平均值很近,幾乎不可能出現極端異常的值。所以在現實世界中,你看不到一噸重的老鼠,也看不到一斤重的大象。2.應用舉例正態分布在生產管理中經典應用是「六西格瑪」方法,簡寫為「6σ」,也就是對產品屬性進行建模,明確誤差要減小到什麼程度,產品合格率才算達標。這樣企業就有了量化的目標,從而可以花大力氣去改善產品的質量。
  • 這六種驅蚊方法效果顯著又無害
    可惡的蚊子,不僅吸你的血,讓你得不到好好休息,它還會傳播疾病。所以,夏天驅蚊是非常重要的一項工作。蚊蟲最怕六種味道茶葉驅蚊將曬乾後的殘茶葉燃燒,可以驅除蚊蟲。大蒜吃大蒜後人會分泌一種味道,蚊子就會躲得遠遠的。
  • 腳上長蹠疣怎麼辦,試試六種方法,幫助緩解
    腳上長蹠疣怎麼辦,試試這六種方法1、薏苡仁粥:準備適量的鮮薏仁,把裡面的雜質等挑出來,清洗乾淨,接著放到鍋裡面,加水熬粥。等大火煮開以後,用小火慢慢燉。即將準備進食的時候,可以稍微放點白糖調調味的,空著肚子的時候吃,每天一頓。
  • 政策效果評估:DID模型
    非隨機分配政策實施組和對照組的試驗稱為自然試驗( natural trial) ,此類試驗存在較顯著的特點,即不同組間樣本在政策實施前可能存在事前差異,僅通過單一前後對比或橫向對比的分析方法會忽略這種差異,繼而導致對政策實施效果的有偏估計。DID 模型正是基於自然試驗得到的數據,通過建模來有效控制研究對象間的事前差異,將政策影響的真正結果有效分離出來。
  • 如何調試複雜的實時嵌入式系統?
    這種方法有一個負面的影響:它將阻止任何準備好運行的高優先級的線程。這一現象被稱為優先級倒置。將中斷關閉是最安全的方法,對於執行時間短的情形來說是理想選擇。於是,最差情況的中斷延遲就是所有未發生中斷的持續時間的總和。在硬實時系統中,一般來說,一個中斷功能可以被關閉的時間存在上限。
  • 房子隔音差,這5種隔音方法,讓你每晚,舒舒服服入睡
    房子隔音差,這5種隔音方法,讓你每晚舒舒服服入睡。房子是每家都離不開的一個話題,那麼如果住在隔音差的房子裡面是一個什麼樣的體驗那?我家住在高速公路附近,雖然是附近,但是每天晚上,跟飛機場一樣,嗡嗡嗡的不停。
  • 優思學院|六西格瑪 和 思維模型
    標準差的級數增加,所出現的瑕疵就越少 -「六」這個數字代表的是幾近完美的境界。假如你有一臺溫度控制器,你希望把房間的溫度維持在70度左右。如果溫度維持在67度到73度之間,我們認為這是客戶滿意的標準。結果這臺機器將溫度維持在68度到72度,這樣的變異相當小,因此這臺溫度控制器的製程能力(process capability)是可以接受的,是在所要求的範圍之內。
  • 深度 提升深度學習模型的表現,你需要這20個技巧(附論文)
    你可以怎樣讓你的深度學習模型實現更好的表現?這是一個我常被問到的問題:「我該怎麼提升準確度?」或者「如果我的神經網絡表現很糟糕我該怎麼辦?」……我常常給出的回答是:「我也不完全知道,但我有很多想法。」然後我開始列出所有我可以想到的可能能夠帶來效果改進的想法。
  • 誇孩子時別再用「你真棒」,試試這幾種方法,孩子受用效果也翻倍
    寶媽們,平時帶孩子、誇孩子的時候,如果要表揚孩子,你會怎麼說呢?真心建議,寶媽們不要不管孩子做了什麼,都簡單地用「天才」或者「你真棒」去敷衍。多試試下面這些話,孩子更受用,誇讚效果也是翻倍的。(漂亮)極了」第一種誇讚方法,寶媽們肯定孩子努力的過程,這樣不管最終孩子努力後有沒有成功,媽媽們的誇讚都是對孩子努力的一種肯定。
  • 試試這四招 六種食物效果好
    【消除春困 試試這四招】 「一般來講,成年人的睡眠時間以6—8小時為宜,每天睡8個小時足以恢復體力。對於老年人來說,睡眠不要超過8小時。」山西省中醫學院附屬醫院預防保健科副主任醫師陳燕清建議。方法如下:用雙手十指指端由前向後、由中間向兩側用力按摩10次;再短距離往返搔抓3次;最後輕緩按摩5次。 2、出行遠眺。解春困,最宜加大感官刺激。春季是適合外出的季節,空閒時不妨走到戶外,欣賞自然風光。多做遠眺能給視覺帶來良好刺激,有助消除春困。
  • 這六種方法很重要,最後才用第一種
    如果經常耳鳴,究竟怎樣治療效果好呢?大家可以試試以下這6種方法,對於耳鳴的治療效果非常不錯。二、屏氣治療如果大家只是偶爾出現了一次耳鳴的問題,不妨試一試屏氣治療,這種治療對於偶然出現的耳鳴有很有效的效果,大家需要在嘴裡鼓一口氣,然後屏住呼吸一小段時間,恢復正常呼吸之後,大家會發現耳鳴的情況有所緩解。