神經(jīng)網(wǎng)絡(luò)debug太難了,這里有六個(gè)實(shí)用技巧
神經(jīng)網(wǎng)絡(luò)的 debug 過程著實(shí)不容易,這里是一些有所幫助的 tips。
在面對(duì)各種各樣的問題后,有人總結(jié)了一些幫助調(diào)試神經(jīng)網(wǎng)絡(luò)的實(shí)用 tips,希望能夠減少大家調(diào)試神經(jīng)網(wǎng)絡(luò)的成本。
檢查梯度問題
有時(shí)梯度是引發(fā)問題的原因。下面是幾種與梯度相關(guān)的調(diào)試方法:
數(shù)值計(jì)算每個(gè)權(quán)重的梯度。這通常被稱為「梯度檢查」,有助于確保正確計(jì)算梯度,其中一種方法是使用有限差分。
比較每個(gè)權(quán)重的大小和梯度的大小。要確保大小的比率是合理的。如果梯度大小遠(yuǎn)小于權(quán)重大小,網(wǎng)絡(luò)將花費(fèi)很長(zhǎng)時(shí)間進(jìn)行訓(xùn)練。如果梯度大小與權(quán)重大小大致相同或更大,網(wǎng)絡(luò)將非常不穩(wěn)定,可能根本不會(huì)訓(xùn)練。
檢查梯度爆炸或消失。如果梯度變?yōu)?0 或 nan/infinity,則可以確定網(wǎng)絡(luò)沒有被正確訓(xùn)練。需要首先弄清楚為什么會(huì)發(fā)生爆炸 / 消失梯度,是否步數(shù)太大。一旦弄清楚梯度爆炸 / 消失的原因,就有各種解決方案來解決這個(gè)問題,例如添加殘差連接以更好地傳播梯度或簡(jiǎn)單地使用較小的網(wǎng)絡(luò)。
激活函數(shù)也會(huì)導(dǎo)致梯度爆炸 / 消失。如果 sigmoid 激活函數(shù)的輸入太大,梯度將非常接近 0。隨著時(shí)間的推移檢查激活函數(shù)的輸入,然后確保這些輸入不會(huì)導(dǎo)致梯度始終為 0 或很大。
經(jīng)常檢查網(wǎng)絡(luò)的訓(xùn)練進(jìn)度可以節(jié)省時(shí)間。以訓(xùn)練貪吃蛇游戲?yàn)槔?,不是?xùn)練網(wǎng)絡(luò)好幾天,然后再檢查網(wǎng)絡(luò)是否學(xué)到了什么,而是每十分鐘用當(dāng)前學(xué)到的權(quán)重運(yùn)行游戲。幾個(gè)小時(shí)后,如果我們注意到每次都在做同樣的事情并且獲得零獎(jiǎng)勵(lì),就知道可能有問題了,而這節(jié)省了幾天的訓(xùn)練時(shí)間。
不要依賴定量輸出
嘗試小數(shù)據(jù)集
確定代碼是否存在 bug 或數(shù)據(jù)是否難以訓(xùn)練的另一種方法是首先擬合較小的數(shù)據(jù)集,比如將數(shù)據(jù)集中 100000 個(gè)訓(xùn)練示例修剪成只有 100 個(gè)甚至 1 個(gè)訓(xùn)練示例。如果在一個(gè)訓(xùn)練示例的情況下,網(wǎng)絡(luò)仍然有很高的測(cè)試錯(cuò)誤,不能夠非常好地?cái)M合數(shù)據(jù),那么幾乎可以肯定網(wǎng)絡(luò)代碼有問題。
如果全尺寸網(wǎng)絡(luò)在訓(xùn)練時(shí)遇到問題,可以嘗試使用層數(shù)較少的較小網(wǎng)絡(luò),這樣可以更快地訓(xùn)練。如果較小的網(wǎng)絡(luò)在全尺寸網(wǎng)絡(luò)失敗的情況下成功了,則表明全尺寸模型的網(wǎng)絡(luò)架構(gòu)過于復(fù)雜。如果簡(jiǎn)單網(wǎng)絡(luò)和全尺寸網(wǎng)絡(luò)都失敗,則代碼中可能存在 bug。
如果沒有使用機(jī)器學(xué)習(xí)框架編寫神經(jīng)網(wǎng)絡(luò)的代碼,那么可以通過在機(jī)器學(xué)習(xí)框架中編寫相同的網(wǎng)絡(luò)架構(gòu)來檢查問題何在。然后將打印語句放入非框架版本和框架版本中逐層比較輸出,直到找到打印語句出現(xiàn)差異的位置,即錯(cuò)誤所在。如果在反向傳播期間發(fā)生錯(cuò)誤,則可以從最后一層開始逐層打印權(quán)重的漸變,直到找到差異。但是此方法僅適用于網(wǎng)絡(luò)的第一次迭代,因?yàn)橛捎诘谝淮蔚敵龅牟町?,第二次及以后的迭代將具有不同的起點(diǎn)。
參考內(nèi)容:https://towardsdatascience.com/debugging-tips-for-neural-networks-f7dc699d6845
推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
統(tǒng) 計(jì) 學(xué) 無 用 了 ???
現(xiàn)代統(tǒng)計(jì)的思想飛躍:過去、現(xiàn)在到未來(伯克利丁鵬博士萬字長(zhǎng)文)
老鐵,三連支持一下,好嗎?↓↓↓
