隨著gradient不斷地update, 最後走向了gradient =0或是gradient非常小時,Loss無法在優化的狀況 → 通常我們會判斷是走到了critical point → 但真的是critical point嗎?
-> 調整學習速率幫助我們檢查和更進一步優化loss。
為什麼需要動態的learning rate?
我們可以想像一個error surface的最低點位在兩個狹窄的山壁之間,此時如果我們的learning rate很大,那就會不斷地在山壁間打轉,始終沒辦法往下;反之,如果我們設定learning rate很小,雖然可以往下優化loss,但因為底部非常平滑,就會導致花了很大量的時間更新,還是沒辦法得到loss的最佳解。因此我們需要一個動態的learning rate。
一般我們更新參數θ的方式: θi = θi-1 - η*g
那在動態的learning rate中,我們加上一個控制learning rate的參數σ。
=> θi = θi-1 - (η/σt) *g. *(η/σt)被稱為dependent learning
=> σt= 所有使用過的gradient值開根號平方的平均。
=> 這是被Root Mean Square的動態learning rate。
為什麼能夠動態呢?
想像當我們的曲線平緩的時候,gradient就小 -> σt就小 -> dependent learning就會變大。
在RMS的方法中,每一個gradient值的權重都是相同的,但在RMSProp中,我們可以自行決定當前gradient值的權重α,以及剩餘的gradient值的權重(1-α)
→ 為的是更快反應當前的位置與平緩程度。當前算出來的gradient代表的是當前的位置以及平緩程度,因此我們可以藉由調整α值,讓更新可以更快被反應,而不會像原本的RMS反應得如此緩慢。
*至今最常用的optimization策略: Adam = RMSProp + Momentom
但是透過RMSProp的方法有可能造成下圖突然暴衝的狀況! → 因為過去累積太多縱軸移動的值σ,雖然最後還是會回歸到原本的位置,但就會有這種狀況 → 如何避免? → 進行Learning rate Scheduling
Learning rate Scheduling兩種方法: