機器學習之路: 深度學習 tensorflow 神經網絡優化算法 學習率的設置


 

 

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

 

 

 

 

梯度下降和學習率:

  假設用 θ 來表示神經網絡中的參數, J(θ) 表示在給定參數下訓練數據集上損失函數的大小。

  那么整個優化過程就是尋找一個參數θ, 使得J(θ) 的值最小, 也就是求J(θ) 的最小值

  

  損失函數J(θ)的梯度 = ∂ J(θ) / ∂ θ 

  此時定義一個學習率 η 

  梯度下降法更新參數的公式為: θn+1 = θ- η ( ∂ J(θn) / ∂ θn )

  將這個公式循環的重復下去,θ的值就從高處逐漸向最低處一小步一小步的移動

 

舉個例子:

  使用梯度下降 使得損失函數函數 J(x) = x的值盡量小,  由二次函數圖像開口向上可以知道,二次函數最小值為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) = x的值盡量小,  由二次函數圖像開口向上可以知道,二次函數最小值為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時候 以平滑曲線下降

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM