【轉載】你的神經網絡不work? 這37個原因總有一款適合你锣枝!

o. 如何使用本指南泣侮?(https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607#b6fb**

I. 數(shù)據(jù)集問題(https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607#678a**

II. 數(shù)據(jù)歸一化/擴增問題(https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607#86fe**

III. 執(zhí)行問題(https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607#95eb**

IV. 訓練問題(https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607#74de**

0. 如何使用本指南析既?

其實笆焰,可能導致錯誤的影響因素有很多, 不過總有一些“出鏡率”比較高氢妈。如果出現(xiàn)問題粹污,我通常從下面的列表開始:

  1. 從一種可用于此類型數(shù)據(jù)的已知簡單模型開始試驗(比如用于圖像識別的VGG模型)。 如果可能首量,使用標準損失壮吩。
  2. 關閉所有“鈴聲和口哨”(譯者注:即使用最基礎的模型),比如不再使用正則化和數(shù)據(jù)擴增加缘。
  3. 調模型時鸭叙,請仔細檢查預處理,確保使用和我們訓練原始模型一樣的預處理拣宏。
  4. 驗證輸入數(shù)據(jù)是否正確沈贝。
  5. 從一個非常小的數(shù)據(jù)集(2-20個樣本)開始,先讓模型過度擬合勋乾,再逐漸增加更多的數(shù)據(jù)宋下。
  6. 逐漸添加之前被省略的部分:數(shù)據(jù)擴增/正則化,自定義損失函數(shù)辑莫,嘗試更復雜的模型学歧。

如果上述內容還不能解決問題,那接下來各吨,請繼續(xù)閱讀枝笨,我們之后會還有一份大型影響因素清單,建議逐一驗證。

I. 數(shù)據(jù)集問題

1. 檢查輸入數(shù)據(jù)

檢查一下你輸入訓練模型的數(shù)據(jù)是否正確横浑。之前剔桨,曾經好多次我都搞混了圖像的寬度和高度,還有的時候徙融,我手誤輸入一堆多余的零领炫,還有,曾經發(fā)生過多次重復輸入同一批次數(shù)據(jù)的情況……

總之张咳,記得仔細檢查一開始幾個批次輸入和輸出情況,盡可能保證看起來正常似舵。

2. 隨機輸入驗證

嘗試往訓練項目中輸入一些隨機數(shù)據(jù)脚猾,然后看看模型報錯,和之前的報錯情況是否一致砚哗。 如果一致龙助,那肯定是在模型的某個階段出了問題,將數(shù)據(jù)轉換成了垃圾蛛芥。 之后提鸟,逐層調試,找到出錯的地方就好仅淑。

3. 檢查數(shù)據(jù)加載器

有時候称勋,數(shù)據(jù)本身可能沒問題,出問題的可能是將數(shù)據(jù)輸入到網絡的代碼涯竟。 因此赡鲜,在任何操作之前,請打印第一層的輸入檢查檢查庐船。

4. 確保輸入連接到輸出

檢查幾個輸入樣品是否有正確的標簽银酬。 同時還要確保輸入樣本與輸出標簽的重新排序方式相同。

5. 輸入與輸出之間的隨機比例問題

如果模型中筐钟,輸入輸出之間的非隨機部分揩瞪,相比隨機部分比例過小,那么我們可以確定篓冲,輸入和輸出無關的可能性比較大李破。 因為這往往取決于數(shù)據(jù)的性質,目前纹因,針對這個情況喷屋,我還沒找到更簡便的方式來檢測,畢竟這與數(shù)據(jù)本身的特質息息相關瞭恰。

6. 數(shù)據(jù)集中是否有太多噪音屯曹?

之前有一次,我打算從食品站點上整理一組圖像數(shù)據(jù)集,放到我的神經網絡模型恶耽,結果就碰到了這個問題密任。里面很多數(shù)據(jù)都顯示損壞標簽,才影響到模型結果偷俭。建議手動檢查一些輸入樣本浪讳,看看它們顯示的標簽。

對于多少噪音才是神經網絡訓練的臨界點目前仍有爭議涌萤,比如淹遵,這篇文章(https://arxiv.org/pdf/1412.6596.pdf) 顯示,在一定條件下负溪,在使用了50%損壞標簽的MNIST數(shù)據(jù)集中透揣,準確率仍可以達到50%以上。

7. 對數(shù)據(jù)集重新排序

如果數(shù)據(jù)集沒有重新排序川抡,并且有特定的順序(按照標簽排序)辐真,這可能會對學習產生負面影響。 記得給數(shù)據(jù)集隨機重新排序崖堤,也別忘了將輸入和標簽用同樣的方式重新排序侍咱。

8. 減少標簽不平衡

圖像種類B和圖像種類A是1:1000嗎? 如果這樣密幔,我們可能需要平衡損失功能或嘗試其他標簽不平衡數(shù)據(jù)的應對方法 (http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/**)楔脯。

9. 你的訓練數(shù)據(jù)夠多嗎?

從頭開始訓練一個神經網絡胯甩,是需要大量數(shù)據(jù)的淤年。 在圖像分類方面, 有人建議每個類別需要約1000張圖片或更多蜡豹。(https://stats.stackexchange.com/a/226693/30773**)麸粮。

10. 確保批次數(shù)據(jù)不為單一標簽

這可能發(fā)生在有序數(shù)據(jù)集中(即前一萬個樣本擁有同一個標簽)。 通過將數(shù)據(jù)集重新排序可輕松修復這個問題镜廉。

11.減少每個批次的容量

這篇文章(https://arxiv.org/abs/1609.04836**)指出弄诲,擁有非常大的批次可以降低模型的泛化能力。

添加 1.使用標準數(shù)據(jù)集(例如mnist娇唯,cifar10)

感謝@ hengcherkeng提出這一點:

當測試新的網絡架構或編寫新的代碼片段時齐遵,首先使用標準數(shù)據(jù)集,而不是自己的數(shù)據(jù)塔插。 這樣梗摇,我們就可以參考前人的數(shù)據(jù)集總結,這樣做的好處是想许,不存在標簽噪音伶授、訓練/測試分配差異断序、數(shù)據(jù)集難度過大等問題。

II. 數(shù)據(jù)歸一化/增強

12. 特征標準化

你有沒有標準化你的輸入數(shù)據(jù)糜烹,它們是否具有零均值和單位標準差违诗?

13. 你是否做了太多的數(shù)據(jù)擴增?

數(shù)據(jù)擴增具有正則化效果疮蹦。 太多的數(shù)據(jù)擴增诸迟,再加上其他形式的正則化(比如weight L2, dropout等等)愕乎,都可能導致網絡擬合不足阵苇。

14. 檢查預訓練模型的預處理

如果您使用預先訓練好的模型,請確保您正在使用與該模型訓練時相同的規(guī)范化和預處理感论。 例如慎玖,圖像像素是在[0,1]、[-1,1]還是[0,255]的范圍內笛粘?

15. 檢查訓練集/驗證集/測試集的預處理

CS231n指出了一個常見的陷阱(http://cs231n.github.io/neural-networks-2/#datapre**) :

“......任何預處理統(tǒng)計值(如數(shù)據(jù)均值)只能在訓練數(shù)據(jù)上計算,然后應用于驗證/測試數(shù)據(jù)湿硝。 例如薪前,計算平均值并從整個數(shù)據(jù)集中的每個圖像中減去它,然后將數(shù)據(jù)分割成訓練集/驗證集/測試集將是一個錯誤关斜。 “

另外示括,請檢查每個樣品或批次中是否使用了不同的預處理。

III.執(zhí)行問題

資料來源: https://xkcd.com/1838/**

16. 嘗試簡化問題

簡化問題能夠幫助你發(fā)現(xiàn)異常痢畜。如果目前你的模型輸出了對象的分類和坐標垛膝,那就嘗試只輸出對象的分類。

17. “隨機”尋找正常范圍的損失

源自卓越的cs231n課程:用少量的參數(shù)來初始化丁稀,不加正則化吼拥。比如,如果我們有十個類线衫,“隨機”意思是10%的時候我們會得到正確結果凿可,softmax損失是負對數(shù)概率:-ln(0.1) = 2.302。
然后授账,再試著增加正則化的強度枯跑,從而增加損失。

18. 檢查你的損失函數(shù)

如果你自己實現(xiàn)了損失函數(shù)白热,那檢查bugs敛助,再加上單位測試。之前屋确,我的損失函數(shù)稍微有些偏差纳击,降低了網絡的性能续扔。

19. 驗證損失的輸入

如果你正在使用“已有框架”提供的損失函數(shù),那你一定要按照指定方法輸入指定數(shù)據(jù)评疗。 在PyTorch里测砂,我會弄混NLLLoss和CrossEntropyLoss,前者需要softmax輸入百匆,但后者不需要砌些。

20. 調整損失的權重

如果你的損失是由幾個小的損失函數(shù)組成的,確保他們的相關權重是合適的加匈。這也許包括了測試幾種不同的權重組合存璃。

21. 監(jiān)測其他度量標準

有時候損失并不是最好的測量標準來衡量你的網絡是否訓練良好。如果可以雕拼,可以使用其他的纵东,比如準確率。

22. 測試每一個自定制網絡層

你自己完成了網絡里的層嗎啥寇?檢查偎球,再檢查,確保這些層運行正確辑甜。

23. 檢查“凍結”的網絡層或者變量

檢查你是不是無意間限制了可更新層與變量的更新衰絮。

24. 增加網絡大小

也許你網絡的指數(shù)級力度不足以描述目標函數(shù)。嘗試增加更多的層磷醋,或者全鏈接的隱藏單元數(shù)猫牡。

25. 檢查隱藏維錯誤

如果你的輸入是(k, H, W) = (64, 64, 64),那很容易錯過關于錯誤維度的錯誤邓线。使用奇怪的數(shù)字設置輸入維度(比如淌友,對不同的維度使用不同的素數(shù)),來檢查它們是怎么在網絡傳播骇陈。

26. 進行梯度檢查

如果你自己手動實現(xiàn)了梯度下降法震庭,檢查梯度,以確保你的后向傳播運行良好你雌。

IV.訓練問題

資料來源: http://carlvondrick.com/ihog/**

27. 解決一個小的數(shù)據(jù)集

過擬合一個很小的數(shù)據(jù)子集归薛,確保它可行。比如匪蝙,用1到2個例子進行訓練主籍,看看是否你的網絡能分類正確。然后再每個類添加更多的例子逛球。

28. 檢查權重的初始化

如果不確定千元,就使用Xavier或者He來初始化。初始化可能會把你引向一個有問題的最小局部颤绕,所以幸海,你可以嘗試不同的初始化祟身,看是否有幫助。

29.改變超參數(shù)

也許你使用的超參數(shù)集有問題物独。如果可以袜硫,可以嘗試http://scikit-learn.org/stable/modules/grid_search.html**

30.減少正則化

過度的正則化會讓網絡擬合不足挡篓。嘗試減少過度的正則化婉陷,諸如,dropout官研,batch norm秽澳,權重/偏差 L2正則化,等等戏羽。在“實用深度學習程序員必讀”這門課中担神,Jeremy Howard建議先排查擬合不足。這意味著你先使訓練集過擬合始花,而且只有過擬合妄讯。

31. 給你的訓練網絡多一點的時間

有時候并不是網絡出現(xiàn)了問題,也有可能你太心急了酷宵。請在作出有價值的預測之前亥贸,給你的網絡再多一些的訓練時間。如果這個過程中忧吟,如果你觀察到損失在穩(wěn)定減少,那放輕松斩披,給它再多一些的訓練時間吧溜族。

32. 訓練模式與測試模式的轉換

某些框架的網絡層,類似batch norm垦沉,dropout煌抒,它們的效果在訓練和測試模式是不一樣的。請選擇合適的模式厕倍,以確保你的網絡預測更好寡壮。

33. 可視化訓練的過程

監(jiān)控每層的激活函數(shù),權重和更新情況讹弯。確保它們的值是對得上的况既。比如,參數(shù)(權重和偏差)的更新值應該是1-e3组民。
考慮諸如Tensorboard和Crayon的可視化庫棒仍。你還可以打印出來,檢查權重/偏差/激活函數(shù)值臭胜。
注意查找網絡層的激活函數(shù)值莫其,均值遠遠大于0的那些癞尚。嘗試Batch Norm或者ELUs。
Deeplearning4j (https://deeplearning4j.org/visualization#usingui**)描述了乱陡,理想狀態(tài)的權重和偏差柱狀圖:

拿權重來說浇揩,柱狀圖應該呈現(xiàn)近似高斯分布的特征。而偏差憨颠,在柱狀圖中應該從0開始胳徽,最后也近似高斯分布(LSTM是個例外)。注意觀察那些趨于正負無窮大的參數(shù)烙心,以及那些變的特別大的偏差值膜廊。有時候會發(fā)生在分類的輸出層,如果類的分布很不平衡的話淫茵∽希”

檢查一下層更新,它們也應該是高斯分布匙瘪。

34. 嘗試不同的優(yōu)化器

優(yōu)化器的選擇上铆铆,要注意,不要選對你的訓練可能造成很大影響的那些丹喻。好的優(yōu)化器可以讓你在最短的時間達到最好的效果薄货。許多描述算法的論文都有說明相關的優(yōu)化器,如果沒找到碍论,我一般使用Adam或者帶勢的SGD谅猾。

可以查看這篇很好的文章(http://ruder.io/optimizing-gradient-descent/**),作者是Sebastian Ruder鳍悠,里面你會知道很多關于梯度下降優(yōu)化器税娜。

35. 逐一檢查那些爆炸性增長/消失不見的梯度

檢查層的更新,如果出現(xiàn)很大的值藏研,那可能預示著爆炸性增長的梯度值敬矩。梯度剪切會有幫助。檢查層的激活函數(shù)值蠢挡。Deeplearning4j一文中(https://deeplearning4j.org/visualization#usingui**)弧岳,給出了不錯的建議:“激活函數(shù)值好的標準偏差范圍大致在0.5 到2.0,如果超出這個范圍過多业踏,則可能會出現(xiàn)激活函數(shù)值消失不見禽炬、或爆炸性增長的情況∏诩遥“

36. 增加/減少學習率

學習率過低瞎抛,可能會導致你的模型收斂的很慢。而學習率過高却紧,也會有一些不良影響————起初損失快速減少桐臊,但是最后卻不易找到良好解決辦法胎撤。建議改變你的學習率,可以嘗試乘以0.1或10断凶。

37. 解決非數(shù)值數(shù)

如果訓練RNNs伤提,出現(xiàn)非數(shù)值數(shù)可能是個需要關注的問題。建議你嘗試下列方式改進這個情況:

減少學習率认烁,尤其是在開始的100個回合里有非數(shù)值數(shù)時候肿男。

非數(shù)值數(shù)來自于除以0,或者0與負數(shù)的自然對數(shù)却嗡。

Russell Steward也給出了很多參考片方法舶沛,來應對非數(shù)值數(shù)(http://russellsstewart.com/notes/0.html**)。

嘗試逐層評估你的網絡窗价,找出產生非數(shù)值數(shù)的確切位置如庭。

原文鏈接:https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撼港,隨后出現(xiàn)的幾起案子坪它,更是在濱河造成了極大的恐慌,老刑警劉巖帝牡,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件往毡,死亡現(xiàn)場離奇詭異,居然都是意外死亡靶溜,警方通過查閱死者的電腦和手機开瞭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罩息,“玉大人嗤详,你說我怎么就攤上這事】弁簦” “怎么了断楷?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵锨匆,是天一觀的道長崭别。 經常有香客問我,道長恐锣,這世上最難降的妖魔是什么茅主? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮土榴,結果婚禮上诀姚,老公的妹妹穿的比我還像新娘。我一直安慰自己玷禽,他們只是感情好赫段,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布呀打。 她就那樣靜靜地躺著,像睡著了一般糯笙。 火紅的嫁衣襯著肌膚如雪贬丛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天给涕,我揣著相機與錄音豺憔,去河邊找鬼。 笑死够庙,一個胖子當著我的面吹牛恭应,可吹牛的內容都是我干的。 我是一名探鬼主播耘眨,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼昼榛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毅桃?” 一聲冷哼從身側響起褒纲,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钥飞,沒想到半個月后莺掠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡读宙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年彻秆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片结闸。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡唇兑,死狀恐怖,靈堂內的尸體忽然破棺而出桦锄,到底是詐尸還是另有隱情扎附,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布结耀,位于F島的核電站留夜,受9級特大地震影響,放射性物質發(fā)生泄漏图甜。R本人自食惡果不足惜碍粥,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黑毅。 院中可真熱鬧嚼摩,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潮秘,卻和暖如春掘猿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唇跨。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工稠通, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人买猖。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓改橘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玉控。 傳聞我的和親對象是個殘疾皇子飞主,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容