1.原因
W = W + learning rate * dJ/dW
讓我們問一個簡單的問題:什麼時候一個神經網絡停止學習?這是什麼時候(學習速率* dJ / dW)是0的條件。實際上,如果使用反向傳播,權值就會停止更新,而網絡會自動調整,以獲得更好的精度。
除了消失梯度等技術原因外(即因為某些激活函數將它們映射到一個小範圍內,所以如果網絡太深,誤差梯度不能回流到起始層),一個明顯的原因與局部最優有關和鞍點。
在局部最優點或鞍點處,誤差和權重的梯度幾乎為0,減慢了訓練過程。在某個方向上有足夠大的推動力,希望我們能擺脫這種情況。
但是,糟糕的是,the push,部分取決於學習率,是不夠的。為什麼?
在最佳值附近:大Vs小的學習率
我們知道學習速率不是固定的,而是在訓練過程中動態調整的。研究人員希望梯度下降在遠離()最適宜的情況下快速移動,但在接近最佳狀態時緩慢移動和仔細搜索。所以學習的速度在開始時是高的但在訓練結束時是小的。
這是流行學習率更新方法的策略,比如momentum、RMSProp和Adam優化器。
2.目前的解決方案
Cyclical Learning Rates
提高學習率(LR)可以更快速地穿越鞍點plateaus。簡單來說,這個想法告訴我們,當LR通過LR更新方法達到一個較低值並且梯度下降滯留在鞍點一段時間時,請將LR增加到較高值。這很簡單。
本文建議通過在幾個時期運行模型來估計LR的最小和最大邊界,同時讓LR在低值和高值之間線性增加。典型的我們應該嘗試1e-6和1e-1。這有助於我們估計LR損失函數下降的最大值(最大LR),LR值損失變為停滯(最小LR)。
使用Jeremy Howard 的fast.ai library,我繪製了一個例子下面。在這種情況下,損失梯度在2e-2附近LR很高,所以我們應該選擇最大LR = 2e-2。對於最小LR,你可以選擇它非常低(1e-10)。在fast.ai中,該方案更簡單:您從最大LR開始,運行優化程序n個epochs,然後跳回到最大LR。這與本文中討論的固定步長跳轉類似。希望跳躍會將優化器推出任何鞍點。然後我們可以高興地繼續訓練,而不需要重新設置每個事物(即將所有權重重新初始化為隨機值)。如果我們重新初始化,它與舊的解決方案沒有什麼不同:產生不同的隨機起始權重和獨立訓練以避免局部最優,這是* 低效*)。
學習率檢查。用fast.ai庫創建
我們來看看上述解決方案的效果
Illustration from Cyclical Learning Rates for Training Neural Networks(http://arxiv.org/abs/1506.01186).
從性能上的差異來看,只要有助於跳出鞍點/本地架構,我認為一個固定的步長方案仍然可以。當然其他方案如LR餘弦退火周期也會起作用。
其他想法
現在你已經理解了周期性學習率概念,還有一些其他想法需要了解。
每次跳躍後增加周期長度