目錄
- mini-batch
- 指數加權平均
- 優化梯度下降法:momentum、RMSprop、Adam
- 學習率衰減
- 局部最優問題
一、mini-batch
mini-batch:把訓練集划分成小點的子集
表示法 | $x^{\{1\}}$ | $x^{(1)}$ | $x^{[1]}$ |
意義 | 第一個mini-batch | 第一個樣本 | 第一層的輸入 |
- 為什么用mini-batch:當數據集樣本數較多時,需要對整個數據計算完成后才能進行梯度下降,速度較慢
- epoch:一代,表示遍歷了整個數據集(而不是一個子集)
- 使用mini-batch的梯度下降方法過程:每次以當前的一個mini-batch作為輸入數據
for $t = 1,...,5000$ //forward prop on 第t個minibatch,輸入為$X^{\{t\}}$ for $i=1...l$ //正向計算,共l層 $Z^{[i]}=W^iA^{[i-1]}+b^{[i]}$ $A^{[i]}=g^{[i]}(Z^{[i]}$ //$A^{l}$為最后的輸出結果 計算該mini-batch的cost $J^{\{t\}}=\frac{1}{1000}\sum \mathcal{L}(\widehat{y}^{j},y^{j})$ 反向計算求導$J^{\{t\}}$ 更新參數$W$$b$,$W^{[l]}:=W^{[l]}-\alpha dW^{[l]}$ $b^{[l]}:=b^{[l]}-\alpha db^{[l]}$ |
- 使用mini-batch的成本函數變化趨勢:並不是每一次都下降,但是整體趨勢是下降
- 選擇min-batch的大小
太大的話每次迭代耗時太長,太小的話每次只處理少量效率低(失去了向量加速的優勢)
當數據集比較小(小於2000)時,可以直接使用batch
當數據集比較大時,一般可以用的mini-batch大小:64,128,256, 512...(與CPU/GPU內存相匹配)
二、指數加權平均(指數加權移動平均)exponentially weighted average
例:倫敦的溫度變化
$\theta_{1}=40^{\circ}F$ $\theta_{2}=49^{\circ}F$ $\theta_{3}=45^{\circ}F$ ... |
![]() |
求解$v_{t}$:前$t$天的溫度加權平均值。雖然$v_{t}$包含1~$t$天的溫度,但是越接近第$t$天的權重會更大一點,而較前的就會接近0
$v_{0}=0$ $v_{1}=\beta v_{0} + (1-\beta )\theta_{1}$ $v_{2}=\beta v_{1} + (1-\beta )\theta_{2}$ ... $v_{t}=\beta v_{t-1} + (1-\beta )\theta_{t}$ $=\beta^{t}\theta_{0}+\beta^{t-1}(1-\beta)\theta_{1}$ $+\beta^{t-2}(1-\beta)\theta_{2}+...+(1-\beta)\theta_{t}$ |
藍色點為原始數據,其它為不同的$\beta$取值時,加權平均結果 |
- 應該平均多少天的溫度?當某天溫度的權重很低時就不用再考慮
$y=(1-\varepsilon)^{\frac{1}{\varepsilon}}$單調遞減。當$\varepsilon=0.9$時,$y \approx \frac{1}{e}$。所以,當計算到第$\frac{1}{e}\approx 0.3$天時,溫度會下降到當天的1/3以下,可忽略。因此,可以認為$v_{t}$是$\frac{1}{1-\beta}$天的溫度加權平均值
- 做偏差修正bias correct
為什么需要:開始的時候設置$v_0=0$,容易導致前期的預測會比較實際的小很多,估計不准確
修正方法:$v'_{t}=\frac{v_{t}}{1-\beta^{t}}$,用$v'_{t}$來代替$v_{t}$。前期的值可以變大一些,而后期時$t$較大時,$\beta^{t}$趨於0,$v'_{t}$也就趨於$v_{t}$
下圖中紫線為$v_{t}$,綠色為$v'_{t}$
三、優化梯度下降算法
- 標准梯度下降的問題(下圖藍線效果):從一個隨機的點開始進行梯度下降,可能會像藍色部分波動比較大,下降速度慢;無法使用更大的學習率,因為可能會偏離函數范圍
-
- 優化手段:減少縱向的浮動,加快橫向的移動,以及增大學習率
- 動量梯度下降法momentum
- 優化:利用對梯度求指數加權平均的方法以加快訓練的速度(上圖紅線效果)
通過求平均,可以把縱向的浮動抵消,而橫向的變化依舊,從而加快下降速度
- 具體實現:用加權平均值來代替當前的求導結果;實際中一般不用做偏差修正,大概10次迭代就過了初始期,不再是有偏差的結果;$\beta$取值為0.9
for $t = 1...,$
計算當前mini-batch的$dW, db$
$v_{dW}=\beta v_{dW}+(1-\beta)dW$
$v_{db}=\beta v_{db}+(1-\beta)db$$W:=W-\alpha v_{dW}$, $b:=b-\alpha v_{db}$
- 優化:利用對梯度求指數加權平均的方法以加快訓練的速度(上圖紅線效果)
- RMSprop : root mean square prop
- 均方根:先對$dW$求平方,更新時又除以它的根方
- 為什么有效果
假設$W$和$b$分別表示橫向和縱向變化。
如果要讓縱向也就是$b$的變化慢一點(浮動小一些),也就是更新時減去的值小一些。可以發現原來縱向的變化較大($db$較大),所以$\frac{1}{\sqrt{S_{db}}}$會小一點,由此可讓$db$變化慢點
-
- 具體實現:為了避免除數為0,一般可以加上$\varepsilon=10^{-8}$
for $t = 1,...$ 計算當前mini-batch的$dW,db$ $S_{dW}=\beta_{2}S_{dW}+(1-\beta_{2})dW^{2}$ $S_{db}=\beta_{2}S_{db}+(1-\beta_{2})db^{2}$ $W:=W-\alpha \frac{dW}{\sqrt{S_{dW}}+\varepsilon}$, $b:=b-\alpha \frac{db}{\sqrt{S_{db}}+\varepsilon}$ |
- Adam算法 :momentum與RMSprop的結合,常用的方法
- 具體實現
$for t = 1,...$ 計算當前mini-batch人$dW,db$ //momentum部分 $v_{dW}=\beta_{1} v_{dW}+(1-\beta_{1})dW$, $v_{db}=\beta_{1} v_{db}+(1-\beta_{1})db$ //RMSprop部分 $S_{dW}=\beta_{2}S_{dW}+(1-\beta_{2})dW^{2}$, $S_{db}=\beta_{2}S_{db}+(1-\beta_{2})db^{2}$ //偏差修正 $v^{corrected}_{dW}=\frac{v_{dW}}{1-\beta_{1}^{t}}$,$v^{corrected}_{db}=\frac{v_{db}}{1-\beta_{1}^{t}}$ $S^{corrected}_{dW}=\frac{S_{dW}}{1-\beta_{2}^{t}}$, $S^{corrected}_{db}=\frac{S_{db}}{1-\beta_{2}^{t}}$ //更新 $W:=W-\alpha \frac{v_{dW}^{corrected}}{\sqrt{S_{dw}{corrected}}+\varepsilon}$, $b:=W-\alpha \frac{v_{db}^{corrected}}{\sqrt{S_{db}{corrected}}+\varepsilon}$ |
-
- 超參數選擇
$\alpha$學習率 | $\beta_{1}$用於momentum | $\beta_{2}$用於RMSprop | $\varepsilon$ |
需要調 | 0.9 | 0.999 | $10^{-8}$ |
四、學習率衰減:隨時間逐漸減少學習率
為什么:如果一直用比較大的學習率,當靠近最小值時,結果可能會在較大范圍內進行浮動(不易收斂),而不是在很接近最小值的小范圍內變化
重要性:不是最開始的重點,可以先設置一個固定的,先調整其它的,后期再進行調整
學習率衰減的方式
- $\alpha = \frac{1}{1+decay-rate*epoch-num}\alpha_{0}$
- $\alpha=0.95^{epoch-num}\alpha_{0}$ 指數衰減
- $\alpha=\frac{k}{\sqrt{epoch-num}}\alpha_{0}$
- 每過一段時間,對學習率減半(離散下降discrete staircase)
五、局部最優問題
- 局部最優問題:在做梯度下降時,會不會最后是趨於局部最優的解,而非最優解?
- 答:這不是一個大問題,要找到一個局部最優點,需要它在各個維度都是最優的(比如都是凹/凸)。當維度比較大時,這種情況很難遇到。不過,鞍點還是比較容易遇到的
- 鞍點:在某個位置,各維導數均為0,但是凹凸性不是完全一致的。如下圖右側
- 應該考慮的問題:存在平滑導致梯度下降變化慢的問題
- 解決方法:利用上面提到的幾種優化方法來加快