训练深度神经网络的时候需要注意的一些小技巧
翻譯網(wǎng)上的哈,我覺得有很大一部分從沒看到過,所以就翻譯了下,如有不對(duì)的地方,歡迎指正:
1、準(zhǔn)備數(shù)據(jù):務(wù)必保證有大量、高質(zhì)量并且?guī)в懈蓛魳?biāo)簽的數(shù)據(jù),沒有如此的數(shù)據(jù),學(xué)習(xí)是不可能的
2、預(yù)處理:這個(gè)不多說,就是0均值和1方差化
3、minibatch:建議值128,1最好,但是效率不高,但是千萬(wàn)不要用過大的數(shù)值,否則很容易過擬合
4、梯度歸一化:其實(shí)就是計(jì)算出來(lái)梯度之后,要除以minibatch的數(shù)量。這個(gè)不多解釋
5、下面主要集中說下學(xué)習(xí)率
- 總的來(lái)說是用一個(gè)一般的學(xué)習(xí)率開始,然后逐漸的減小它
- 一個(gè)建議值是0.1,適用于很多NN的問題,一般傾向于小一點(diǎn)。
- 一個(gè)對(duì)于調(diào)度學(xué)習(xí)率的建議:如果在驗(yàn)證集上性能不再增加就讓學(xué)習(xí)率除以2或者5,然后繼續(xù),學(xué)習(xí)率會(huì)一直變得很小,到最后就可以停止訓(xùn)練了。
- 很多人用的一個(gè)設(shè)計(jì)學(xué)習(xí)率的原則就是監(jiān)測(cè)一個(gè)比率(每次更新梯度的norm除以當(dāng)前weight的norm),如果這個(gè)比率在10-3附近,如果小于這個(gè)值,學(xué)習(xí)會(huì)很慢,如果大于這個(gè)值,那么學(xué)習(xí)很不穩(wěn)定,由此會(huì)帶來(lái)失敗。
6、使用驗(yàn)證集,可以知道什么時(shí)候開始降低學(xué)習(xí)率,和什么時(shí)候停止訓(xùn)練。
7、關(guān)于對(duì)weight初始化的選擇的一些建議:
- 如果你很懶,直接用0.02*randn(num_params)來(lái)初始化,當(dāng)然別的值你也可以去嘗試
- 如果上面那個(gè)不太好使,那么久依次初始化每一個(gè)weight矩陣用init_scale / sqrt(layer_width) * randn,init_scale可以被設(shè)置為0.1或者1
- 初始化參數(shù)對(duì)結(jié)果的影響至關(guān)重要,要引起重視。
- 在深度網(wǎng)絡(luò)中,隨機(jī)初始化權(quán)重,使用SGD的話一般處理的都不好,這是因?yàn)槌跏蓟臋?quán)重太小了。這種情況下對(duì)于淺層網(wǎng)絡(luò)有效,但是當(dāng)足夠深的時(shí)候就不行了,因?yàn)閣eight更新的時(shí)候,是靠很多weight相乘的,越乘越小,有點(diǎn)類似梯度消失的意思(這句話是我加的)
8、如果訓(xùn)練RNN或者LSTM,務(wù)必保證gradient的norm被約束在15或者5(前提還是要先歸一化gradient),這一點(diǎn)在RNN和LSTM中很重要。
9、檢查下梯度,如果是你自己計(jì)算的梯度。
10、如果使用LSTM來(lái)解決長(zhǎng)時(shí)依賴的問題,記得初始化bias的時(shí)候要大一點(diǎn)
12、盡可能想辦法多的擴(kuò)增訓(xùn)練數(shù)據(jù),如果使用的是圖像數(shù)據(jù),不妨對(duì)圖像做一點(diǎn)扭轉(zhuǎn)啊之類的,來(lái)擴(kuò)充數(shù)據(jù)訓(xùn)練集合。
13、使用dropout
14、評(píng)價(jià)最終結(jié)果的時(shí)候,多做幾次,然后平均一下他們的結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的训练深度神经网络的时候需要注意的一些小技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10个关于人工智能和机器学习的有趣开源项
- 下一篇: 运用神经网络方法找寻集成学习中的最优权重