什么是學習率?
學習率是指導我們,在梯度下降法中,如何使用損失函數的梯度調整網絡權重的超參數。
new_weight = old_weight - learning_rate * gradient
學習率對損失值甚至深度網絡的影響?
學習率如果過大,可能會使損失函數直接越過全局最優點,此時表現為loss過大或者為nan
學習率如果過小,損失函數的變化速度很慢,會大大增加網絡的收斂復雜度,並且很容易被困在局部最小值或者鞍點
圖片來自吳恩達的機器學習課
以上只是從理論上來說明,學習速率對loss值的影響。實際表現中,不同的初始化學習率導致的不同的loss結果如下圖。
學習率的作用
由以上可以看出,為深度網絡選擇一個良好的學習率更新策略,可以抽象為以下兩點好處:
- 更快地達到loss的最小值
- 保證收斂的loss值是神經網絡的全局最優解
如何選擇學習率?
現階段研究中,共同認同的學習率設置標准為:首先設置一個較大的學習率,使網絡的損失值快速下降,然后隨着迭代次數的增加一點點減少學習率,防止越過全局最優解。
那么我們現在面臨兩個兩個問題:
- 如何選取初始的學習率
- 如何根據迭代次數更新學習率(即衰減學習率策略)
對於問題2有兩類解決方法:
- 從初始學習率不停地向下衰減,策略一般有如下三種方式:輪數衰減、指數衰減、分數衰減
輪數減緩,如五輪訓練后學習率減半,下一個五輪后再次減半;
指數減緩,即學習率按訓練輪數增長指數插值遞減等;
分數減緩,若原始學習率為 ,學習率按照下式遞減 -
=
/(1 + kt),其中k 為超參數用來控制學習率減緩幅度,t 為訓練輪數
2. 設置學習率更新范圍(最大值與最小值),使學習率在區間內按照一定的更新策略運行,常用的策略如下圖:
“三角方法”
“余弦方法”
對於問題1,也可以歸結為有兩類解決方法:
- 大多數的網絡的學習率的初始值設置為0.01和0.001為宜
- 在Leslie N. Smith 在2015年的一篇論文中尋找初始學習率的方法
這個方法在論文中是用來估計網絡允許的最小學習率和最大學習率,我們也可以用來找我們的最優初始學習率。
首先我們設置一個非常小的初始學習率,比如le-5,然后在每個batch之后都更新網絡,同時增加學習率,統計每個batch計算出的loss。
最后我們可以描繪出學習率的變化曲線和loss的變化曲線,從中就能夠發現最好的學習率。
下面就是隨着迭代次數的增加,學習率不斷增加的曲線,以及不同的學習率對應的loss的曲線。
在本例中,最優的學習率變化范圍是從 0.001 到 0.01,初始學習率值可以設置為0.01
轉自:https://zhuanlan.zhihu.com/p/41681558