1. 程式人生 > >人工神經網路演算法的學習率有什麼作用

人工神經網路演算法的學習率有什麼作用

神經網路的結構(例如2輸入3隱節點1輸出)建好後,一般就要求神經網路裡的權值和閾值。現在一般求解權值和閾值,都是採用梯度下降之類的搜尋演算法(梯度下降法、牛頓法、列文伯格-馬跨特法、狗腿法等等),這些演算法會先初始化一個解,在這個解的基礎上,確定一個搜尋方向和一個移動步長(各種法算確定方向和步長的方法不同,也就使各種演算法適用於解決不同的問題),使初始解根據這個方向和步長移動後,能使目標函式的輸出(在神經網路中就是預測誤差)下降。 然後將它更新為新的解,再繼續尋找下一步的移動方向的步長,這樣不斷的迭代下去,目標函式(神經網路中的預測誤差)也不斷下降,最終就能找到一個解,使得目標函式預測誤差)比較小。
而在尋解過程中,步長太大,就會搜尋得不仔細,可能跨過了優秀的解,而步長太小,又會使尋解過程進行得太慢。因此,步長設定適當非常重要。
學習率對原步長(在
梯度下降
法中就是梯度的長度)作調整,如果學習率lr = 0.1,那麼梯度下降法中每次調整的步長就是0.1*梯度,
而在matlab神經網路工具箱裡的lr,代表的是初始學習率。因為matlab工具箱為了在尋解不同階段更智慧的選擇合適的步長,使用的是可變學習率,它會根據上一次解的調整對目標函式帶來的效果來對學習率作調整,再根據學習率決定步長。
機制如下:
if newE2/E2 > maxE_inc %若果誤差上升大於閾值
lr = lr * lr_dec; %則降低學習率
else
if newE2 < E2 %若果誤差減少
lr = lr * lr_inc;%則增加學習率
end

詳細的可以看《神經網路之家》nnetinfo裡的《[重要]寫自己的BP神經網路(traingd)》一文,裡面是matlab神經網路工具箱梯度下降法的簡化程式碼

轉自:https://zhidao.baidu.com/question/586131376953268525.html