實驗不同的學習速率

轉於:https://blog.csdn.net/lqfarmer/article/details/77689148

實驗不同的學習速率


學習速率是控制更新步長大小的超參數。隨着學習速率的增加,振盪次數也在增加。如圖2所示,隨着學習速率的增加,存在很多混亂或隨機噪聲。圖2中的所有曲線都是針對MNIST數據集訓練,採用單層神經網絡。

我們可以從圖中推斷,高學習速率更有可能使整個模型爆炸,導致數值更新不穩定,如上溢或下溢,這也是運行這些實驗時,得到的一些經驗性的結果。事實上,NAN在第一個epoch之後就會出現這種情況。

圖2. 不同學習速率下,loss per epoch。資料來源:Siddha Ganju。

圖2顯示不同學習速率下,loss per epoch的曲線。比較兩種不同的損失函數,即交叉熵和分類誤差。這些圖顯示,在較低的學習速率下,提升(improvement)是線性的(學習速率.01)。當學習速率較高時,幾乎可以看到指數級跳躍(學習速率1和.5)。更高的學習速率能夠使損失衰減地更快,但缺點是較的jump,可能會使模型訓練陷入局部極小值,然後陷入更差的損失函數值。

這種現象經常被看作是在圖中的振盪,表明所學習的參數主要是彈跳,不能穩定,使梯度朝着全局最小方向前進。如果驗證曲線緊跟訓練曲線變換,則網絡是正確訓練。然而,驗證和訓練曲線之間的差距比較大,表明網絡在訓練集上過度擬合(學習速率.01)。可以通過使用dropout或其他正則化技術來減少過度擬合的出現的機率。

對每個連接使用單獨的自適應的學習速率


       具有多個層的網絡是常見的。每個層都有不同的輸出或輸入數量,這會導致衝擊效應,這一效應是由於同時更新一個單元(unit)的輸入權重產生,這一更新的目的旨在糾正相同錯誤(如全局學習速率的情況)。另外,梯度的幅值對於不同的層也是不同的,特別是如果初始權重很小(始終是初始化的情況)。因此,針對不同的權重值,合適的學習速率可能存在很大的差異。

       這個問題的一個解決方案是設置全局學習速率,並將其乘以一個局部增益,這個關於每個權重的局部增益憑經驗確定。爲了強化網絡的性能,收益應處於在合理的預定範圍內。當使用獨立的自適應學習速率時,應將整個批次用於學習,或者應使用更大的batch size,以確保梯度符號的變化並不是主要是由於小批量的抽樣誤差或隨機波動導致。這寫per-weight自適應學習速率也可以與動量相結合。(有關更多信息,請參見第6b節,神經網絡,Coursera。)

遷移學習的學習速率


       遷移學習旨在修改現有的預訓練模型以供另一應用使用。這種模型的重用是必要的,因爲用於訓練目的的相當大的數據集在應用程序域中相對較少。微調(Fine-tuning)是一種遷移學習方式,網絡的一部分被修改,比如,網絡的最後一層被修改以得到特性的應用的輸出,等等。還有其他類型的遷移學習方法

       由於網絡被預先訓練,網絡已經獲得了大部分需要的信息,因此微調所需的時間要少得多,而且只能在微調階段來提純(refine)知識。

       微調時,我們降低整體學習速率,同時提高切片(最後一層或新層)的學習速率。例如,在開源Caffe框架中,base_lr應該在求解器prototxt中減少,而對於新引入的層,lr_mult應該增加。這有助於實現整體模型的緩慢變化,同時,在新的層中使用新的數據,不會導致劇烈的變化。經驗法則是使學習過的層的學習速率保持在比其他靜態層(全局學習速率)小至少10倍以上。(靜態層是指?不是指未修改的網絡部分嗎)
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章