[DeeplearningAI筆記]第二章2.6-2.9Momentum/RMSprop/Adam與學習率衰減
覺得有用的話,歡迎一起討論相互學習~
2.6 動量梯度下降法(Momentum)
-
另一種成本函數優化算法,優化速度一般快於標准的梯度下降算法.
-
基本思想:計算梯度的指數加權平均數並利用該梯度更新你的權重
-
假設圖中是你的成本函數,函數形象如圖所示.其中紅點所示就是你的最低點.使用常規的梯度下降方法會有擺動,這種波動減緩了你訓練模型的速度,不利於使用較大的學習率,如果學習率使用過大則可能會偏離函數的范圍.為了避免擺動過大,你需要選擇較小的學習率.

- 而是用Momentum梯度下降法,我們可以在縱向減小擺動的幅度在橫向上加快訓練的步長.
基本公式
\[Vd_{w}=\beta Vd_{w}+(1-\beta)d_{w} \]
\[Vd_{b}=\beta Vd_{b}+(1-\beta)d_{b} \]
- 在縱軸方向上,你希望放慢一點,平均過程中,正負數相互抵消,平均值接近於零.
- 橫軸方向所有的微分都指向於橫軸方向,所以橫軸的平均值仍較大.
- 橫軸方向運動更快,縱軸方向擺動幅度變小.
- 兩個超參數 \(\alpha控制學習率,\beta控制指數加權平均數,\beta最常用的值是0.9\)
- 此處的指數加權平均算法不一定要使用帶修正偏差,因為經過10次迭代的平均值已經超過了算法的初始階段,所以不會受算法初始階段的影響.
2.7 RMSprop(均方根)
- RMSprop (root mean square prop),也可以加速梯度下降.

- 對於梯度下降,橫軸方向正在前進,但是縱軸會有大幅度的波動.我們現將橫軸代表參數W,縱軸代表參數b.橫軸也可以代表\(W_{[1]},W_{[2]},W_{[3]}...W_{[n]}\),但是為了便於理解,我們將其稱之為b和W.
- 公式
\[S_{dw}=\beta S_{dw}+(1-\beta)(dw)^{2} \]
\[S_{db}=\beta S_{db}+(1-\beta)(db)^{2} \]
\[接着RMSprop會這樣更新參數值 \]
\[W=W-\alpha \frac{dw}{\sqrt{S_{dw}}} \]
\[b=b-\alpha \frac{db}{\sqrt{S_{db}}} \]
- w的在橫軸上變化變化率很小,所以dw的值十分小,所以\(S_{dw}\)也小,而b在縱軸上波動很大,所以斜率在b方向上特別大.所以這些微分中,db較大,dw較小.這樣W除數是一個較小的數,總體來說,W的變化很大.而b的除數是一個較大的數,這樣b的更新就會被減緩.縱向的變化相對平緩.
- 注意:這里的W和b標記只是為了方便展示,在實際中這是一個高維的空間,很有可能垂直方向上是W1,W2,W5..的合集而水平方向上是W3,W4,W6...的合集.
- 實際使用中公式建議為:
\[W=W-\alpha \frac{dw}{\sqrt{S_{dw}+\epsilon}} \]
\[b=b-\alpha \frac{db}{\sqrt{S_{db}+\epsilon}} \]
- 為了保證實際使用過程中分母不會為0.
- 主要目的是為了減緩參數下降時的擺動,並允許你使用一個更大的學習率 \(\alpha\),從而加快你的算法速率.
2.8 Adam算法
- Adam 算法基本原理是將Momentum和RMSprop結合在一起.
算法原理

超參數取值
- 學習率 \(\alpha\) 十分重要,也經常需要調試.
- \(\beta_{1}\) 常用的缺省值是0.9
- \(\beta_{2}\) Adam的發明者推薦使用的數值是0.999
- \(\epsilon 的取值沒有那么重要,Adam論文的作者建議為\epsilon=10^{-8}\)
- 在實際使用中,\(\beta_{1},\beta_{2},\epsilon 都是使用的推薦的缺省值,一般調整的都是學習率\alpha\)
- Adam: Adaptive Moment Estimation(自適應估計時刻)
2.9 學習率衰減(learning rate decay)
- 加快學習算法的一個辦法就是隨時間慢慢減少學習率,我們將之稱為學習率衰減(learning rate decay)
概括
- 假設你要使用mini-batch梯度下降法,mini-batch數量不大,大概64或者128個樣本,但是在迭代過程中會有噪音,下降朝向這里的最小值,但是不會精確的收斂,所以你的算法最后在附近擺動.,並不會真正的收斂.因為你使用的是固定的 \(\alpha\),在不同的mini-batch中有雜音,致使其不能精確的收斂.

- 但如果能慢慢減少學習率 \(\alpha\) 的話,在初期的時候,你的學習率還比較大,能夠學習的很快,但是隨着 \(\alpha\) 變小,你的步伐也會變慢變小.所以最后的曲線在最小值附近的一小塊區域里擺動.所以慢慢減少 \(\alpha\) 的本質在於在學習初期,你能承受較大的步伐, 但當開始收斂的時候,小一些的學習率能讓你的步伐小一些.

細節
- 一個epoch表示要遍歷一次數據,即就算有多個mini-batch,但是一定要遍歷所有數據一次,才叫做一個epoch.
- 學習率 \(\alpha ,其中 \alpha_{0}表示初始學習率, decay-rate是一個新引入的超參數\) :
\[\alpha = \frac{1}{1+decay-rate*epoch-num}*\alpha_{0} \]

其他學習率衰減公式
指數衰減
\[\alpha = decay-rate^{epoch-num}*\alpha_{0} \]
\[\alpha = \frac{k}{\sqrt{epoch-num}}*\alpha_{0}其中k是超參數 \]
\[\alpha = \frac{k}{\sqrt{t}}*\alpha_{0}其中k是超參數,t表示mini-batch的標記數字 \]




