在神經網絡中,廣泛的使用反向傳播和梯度下降算法調整神經網絡中參數的取值。

梯度下降和學習率:
假設用 θ 來表示神經網絡中的參數, J(θ) 表示在給定參數下訓練數據集上損失函數的大小。
那么整個優化過程就是尋找一個參數θ, 使得J(θ) 的值最小, 也就是求J(θ) 的最小值
損失函數J(θ)的梯度 = ∂ J(θ) / ∂ θ
此時定義一個學習率 η
梯度下降法更新參數的公式為: θn+1 = θn - η ( ∂ J(θn) / ∂ θn )
將這個公式循環的重復下去,θ的值就從高處逐漸向最低處一小步一小步的移動
舉個例子:
使用梯度下降 使得損失函數函數 J(x) = x2 的值盡量小, 由二次函數圖像開口向上可以知道,二次函數最小值為0,
梯度 ▽ = ∂ J(x) / ∂ x = 2x
假設初始值為 x= 5, 設置學習率為0.3
使用梯度下降更新x的值 步驟如下:
輪數 當前參數x 梯度 * 學習率 更新后參數
1 5 2*5*0.3 = 3 5-3=2
2 2 2*2*0.3 = 1.2 2-1.2 = 0.8
3 0.8 2*0.8*0.3 = 0.48 0.8-0.48 = 0.32
4 0.32 2*0.32*0.3 = 0.192 0.32-0.192=0.128
5 0.128 2*0.128*0.3=0.0768 0.128-0.0768=0.0512
經過五次迭代x從5變成了0.0512, 已經和0非常接近了。
但是梯度下降並不能每次都能獲得全局最優解。
如果學習率過小,可能會導致陷入局部最優解的情況。如圖:

如果學習率過大,很可能在最優解兩側來回回盪,永遠也到不了最低點。
舉個例子:
使用梯度下降 使得損失函數函數 J(x) = x2 的值盡量小, 由二次函數圖像開口向上可以知道,二次函數最小值為0,
梯度 ▽ = ∂ J(x) / ∂ x = 2x
假設初始值為 x= 5, 設置學習率為 1
使用梯度下降更新x的值 步驟如下:
輪數 當前參數x 梯度 * 學習率 更新后參數
1 5 2*5*1= 10 5-10 = -5
2 -5 2*-5*1 =-10 -5+10 = 5
繼續下去他仍會來回擺盪,永遠無法收斂
可見, 學習率過大或者過小都不好。
tensorflow為我們提供了一種靈活的學習率設置方式----指數衰減: tf.train.exponential_decy函數
每一輪的學習率 = 學習率 * 衰減系數^(global_steps/decay_steps)
隨着步數的增加,學習率在變小,並且步數越多,變小的速度越慢
learning_rate = tf.train.exponential_decay(學習率, global_step, decay_step, 衰減系數,staircase=True)
global_step 是當前已經執行多少步了
decay_step 是下降速度,指的是 每隔多少步,學習率指數增長一個
例如:
tf.train.exponential_decay(0.1, global_step, 100, 0.96,staircase=True)
初始學習率0.1 每隔100步 學習率乘以0.96
stairecase 為true的時候,以階梯方式下降, 為False時候 以平滑曲線下降
