建議:能夠查看吳恩達的深度學習視頻,裏面對這幾個算法有詳細的講解。算法
1、指數加權平均
說明:在瞭解新的算法以前須要先了解指數加權平均,這個是Momentum、RMSprop、Adam三個優化算法的基礎。app
一、指數加權平均介紹:
這裏有一個每日溫度圖(華氏攝氏度℉),右邊是每日溫度,$\theta _{i}$表示第i天的溫度:函數
這個時候咱們要用一個曲線來擬合這個散點圖,則曲線某一天的$y$值能夠用某一天的溫度的局部平均值來替代,假設咱們有前i-1天的溫度,這時候要來估計第$i$天的溫度$\theta _{i}$,咱們能夠用第$i$天的前$k$天的平均溫度替代,如:$\theta _{i}^{'}=\frac{\theta _{i}+...+\theta _{i-k}}{k}$。學習
可是這樣的數據容易出現一個問題,當前5天的數值爲十、十一、十二、1三、1四、30,能夠看到第五天的數據異常偏大,若是用通常均值計算的話會致使波動特別大,擬合值容易出錯。優化
解決方法是咱們計算均值的時候,考慮前面k天的影響,對前面的k天加上權值,就可以抵消因爲異常值致使數據的過度偏差,這就有了指數加權平均,公式以下:spa
$$V_{i}=\beta V_{i-1}+(1-\beta )\theta _{i}$$3d
$V_{i}$爲第$i$天的溫度的擬合值,規定$V_{0}=0$,$\theta _{i}$是當天的實際溫度,$\beta$是權重,通常設置爲0.9,這裏列出第$0$天計算到第$i$天的擬合值$V_{i}$的計算公式:調試
\begin{matrix}
& V_{0}=0 \\&V_{1}=\beta V_{0}+(1-\beta )\theta _{1} \\&V_{2}=\beta V_{1}+(1-\beta )\theta _{2} \\& ... \\& V_{i}=\beta V_{i-1}+(1-\beta )\theta _{i}
\end{matrix}orm
因此:視頻
\begin{align*}
V_{i} &= \beta V_{i-1}+(1-\beta )\theta _{i}\\
&= \beta \left (\beta V_{i-2}+(1-\beta )\theta _{i-1} \right )+(1-\beta )\theta _{i}\\
&= \beta^{2}V_{i-2}+\beta(1-\beta )\theta _{i-1}+1(1-\beta )\theta _{i}\\
&= \beta^{2}\left (\beta V_{i-3}+(1-\beta )\theta _{i-2} \right )+\beta(1-\beta )\theta _{i-1}+\beta^{0}(1-\beta )\theta _{i}\\
&= \beta^{3}V_{i-3}+\beta^{2}(1-\beta )\theta _{i-2}+\beta(1-\beta )\theta _{i-1}+\beta^{0}(1-\beta )\theta _{i}\\
&= \beta^{i}V_{0}+\beta^{i-1}(1-\beta )\theta_{1}+...+\beta^{0}(1-\beta )\theta _{i}\\
&= \beta^{i-1}(1-\beta )\theta_{1}+...+\beta^{0}(1-\beta )\theta _{i}\\
&=\sum_{k=1}^{i}\beta^{i-k}(1-\beta )\theta_{k}\\
&=(1-\beta )\sum_{k=1}^{i}\beta^{i-k}\theta_{k}
\end{align*}
這樣咱們就獲得了$V_{i}$的最終等式,把全部的點求解出來而後連線,能夠獲得一個擬合度較好的紅色曲線,這個曲線比較平滑:
二、爲何這個方法會叫作指數加權平均呢?
咱們這裏考慮第$i$天的擬合值$V_{i}$的計算,下圖左邊是溫度散點圖,右邊是指數函數的圖:
因此$V_{i}=\sum_{k=1}^{i}\beta^{i-k}(1-\beta )\theta_{k}$能夠當作是第$i$天以前每一天對應散點值乘以對應低數爲$\beta$的指數函數的值求和,這個就是指數加權。
如今再來看平均的推導:
\begin{align*}V_{i}
&= \sum_{k=1}^{i}\beta^{i-k}(1-\beta )\theta_{k}\\
&= (1-\beta )\sum_{k=1}^{i}\beta^{i-k}\theta_{k}\\
&= (1-\beta )\left ( \beta^{0}\theta_{i}+\beta^{1}\theta_{i-1}+...+\beta^{i-1}\theta_{1}+\beta^{i}\theta_{0} \right )\\
\end{align*}
這裏引入一個等比求和公式:
\begin{matrix}
& summation formula of geometric progression:\\
& beta ^{0}+\beta ^{1}+\beta ^{2}+...+\beta ^{i-1}=\frac{1-\beta ^{i}}{1-\beta} \\
& \lim_{i\rightarrow \infty }\frac{1-\beta ^{i}}{1-\beta}\sim 1
\end{matrix}
能夠看出,當$i$足夠大的時候,全部權重相加爲1,因此這個就是平均,進而$V_{i}=\sum_{k=1}^{i}\beta^{i-k}(1-\beta )\theta_{k}$就是指數加權平均。
三、指數加權平均加權個數k的肯定
當計算低$i$天的時候,若是前面全部的數據進行加權平均,會有這兩個問題:當$i=10000$,$\theta ^{10000}\approx 0$,這樣會使得$\beta^{10000}(1-\beta )\theta _{i-10000}$趨近於0,對估計值$V_{i}$的影響能夠忽略不計。
那麼加權的樣本量怎麼肯定呢,通常是作以下限定:權值爲$\beta^{k}< \frac{1}{e}=0.367879$的數據不加入到加權中,$e$爲天然對數的底數。這樣限制以後指數函數的曲線在第$k$天以後高度會降到原來的$\frac{1}{e}$。樣本量能夠根據$k=\frac{1}{1-\beta }$來求。這個公式的推導以下:
\begin{matrix}
\because \lim_{x \rightarrow \infty}\left ( 1-\frac{1}{x} \right )^{x}\sim \frac{1}{e}
\\
\therefore \lim_{x \rightarrow 0}\left ( 1-x \right )^{\frac{1}{x}}\sim \frac{1}{e}
\\
\therefore \lim_{x \rightarrow 1}\left (x \right )^{\frac{1}{1-x}}\sim \frac{1}{e}
\\
\therefore \lim_{\beta \rightarrow 1}\left (\beta \right )^{\frac{1}{1-\beta}}\sim \frac{1}{e}
\\
\because \beta\geq 0.9
\\
\therefore k\approx \frac{1}{1-\beta}
\end{matrix}
當$\beta=0.9$,$\frac{1}{1-\beta}=10$,因此取樣本量爲k=10,即只取前十個數據來加權平均。
四、誤差修正
首先來下圖,紅色曲線是$\beta=0.9$,紫色曲線是$\beta=0.98$,綠色曲線是$\beta=0.98$並進行了誤差修正的:
會發現沒有進行誤差修正的紫色曲線在開始的位置偏下,遠離真實值,這裏之前兩個點$i=1,2$爲例看怎麼形成的,設:$\theta _{1}=40,\theta _{2}=50,\beta=0.98$:
\begin{matrix}
V_{0}=0\\
V_{1}=0.98V_{0}+0.02\theta _{1}=0.02\theta _{1}=0.8\\
V_{2}=0.98V_{1}+0.02\theta _{2}=0.0169\theta _{1}+ 0.02\theta _{2}=1.676
\end{matrix}
因爲$1-\beta=0.02$因此致使了第一個估計值$V_{1}$遠小於真實值,爲了不初期的估計值與真實值差距過大,須要進行修正,修正方法是對原先計算獲得的每個$V_{i}$都除以$1-\beta ^{i}$來做爲新的估計值$V_{i}^{'}$,即:$V_{i}^{'}=\frac{V_{i}}{1-\beta ^{i}}$,這樣處理以後的真實值的估計爲:
\begin{matrix}
V_{0}^{'}=0\\
V_{1}^{'}=\frac{V_{1}}{1-0.98}=40\\
V_{2}^{'}=\frac{V_{2}}{1-0.98^{2}}=42.3232232...
\end{matrix}
能夠發現這樣就解決了初期數據不夠估計與真實差距過大的問題,而對於後期的數據,有以下狀況:
\begin{matrix}
\lim_{i\rightarrow \infty }\beta ^{i}\sim 0\\
\lim_{i\rightarrow \infty }V_{i}^{'}=\lim_{i\rightarrow \infty }\frac{V_{i}}{1-\beta^{i}}\sim V_{i}
\end{matrix}
因此當$i$足夠大的時候,新的估計$V_{i}^{'}$等於原先的估計值$V_{i}$,因此只要在須要考慮初期的估計須要準肯定時候才須要進行誤差修正,其餘時候能夠選擇不修正。
五、總結
指數加權平均公式:
$$V_{i}= \beta V_{i-1}+(1-\beta )\theta _{i}=\sum_{k=1}^{i}\beta^{i-k}(1-\beta )\theta_{k}$$
通常對於指數加權平均的參數有的建議以下設置:
- $\beta\geqslant 0.9$
- 樣本量$k\approx \frac{1}{1-\beta }$
指數加權平均的做用:
- 減小噪音影響,撫平短時間波動,起到了平滑的做用。
- 刻畫了原數據的趨勢,可以將長線趨勢或週期趨勢顯現出來。
誤差修正公式:
$$V_{i}^{'}=\frac{V_{i}}{1-\beta ^{i}}$$
2、Momentum、RMSprop、ADAM梯度降低
一、普通梯度降低的缺點
回顧一下普通的梯度降低的缺點(以Mini-batch gradient descent爲例):
- 不能保證很好的收斂性,learning rate 若是選擇的過小,收斂速度會很慢,若是太大,loss function 就會在極小值處不停地震盪甚至偏離。(有一種措施是先設定大一點的學習率,當兩次迭代之間的變化低於某個閾值後,就減少 learning rate,不過這個閾值的設定須要提早寫好,這樣的話就不可以適應數據集的特色)。對於非凸函數,還要避免陷於局部極小值處,或者鞍點處,由於鞍點周圍全部維度的梯度都接近於0,SGD 很容易被困在這裏(會在鞍點或者局部最小點震盪跳動,由於在此點處,若是是訓練集全集帶入即BGD,則優化會中止不動,若是是mini-batch或者SGD,每次找到的梯度都是不一樣的,就會發生震盪,來回跳動)。
- SGD對全部參數更新時應用一樣的 learning rate,若是咱們的數據是稀疏的,咱們更但願對出現頻率低的特徵進行大一點的更新。LR會隨着更新的次數逐漸變小。
鞍點就是:一個光滑函數的鞍點鄰域的曲線,曲面,或超曲面,都位於這點的切線的不一樣邊。例如這個二維圖形,像個馬鞍:在x-軸方向往上曲,在y-軸方向往下曲,鞍點就是(0,0),紅色線爲擬合曲線,最後會在紅點處震盪,以下圖。
再來看看普通的提低降低法的擬合軌跡圖,紅點爲擬合的損失函數最小點,藍色線爲梯度降低的過程曲線:
能夠看到正常梯度降低在擬合過程當中出現較大的波動,而這種縱向的較大的波動會影響學習速度,這個沒法經過較大的學習率來解決,由於較大的學習率可能會偏離函數範圍(如紫色線)。因此咱們想要的目的是,使擬合軌跡在縱軸上學習得慢一點,減小這些擺動,可是在橫軸上,學習得快一些,快速地從左向右移移向紅點最小值,那麼訓練的速度就能夠加快不少,因此這就是momentum梯度降低要作的事情。
二、momentum梯度降低
momentum梯度梯度公式:
$$V_{dW^{l}}^{t}=\beta V_{dW}^{t-1}+\left ( 1-\beta \right )dW^{l}$$
$$V_{db^{l}}^{t}=\beta V_{db}^{t-1}+\left ( 1-\beta \right )db^{l}$$
其中$\beta$
迭代更新公式變爲:
$$W^{l}=W^{l}-\alpha V_{dW^{l}}^{t}$$
$$b^{l}=b^{l}-\alpha V_{db^{l}}^{t}$$
以隱藏層第$l$層的權重矩陣$W^{l}$爲例(偏置b同理,可是通常能夠不對b進行momentum梯度降低),在第$t$步的迭代中, 權重$W$的真實梯度爲$dw^{l}$,咱們這裏利用指數加權平均梯度$V_{dw^{l}}^{t}$來代替第$t$次迭代的真實梯度。
若是把梯度降低當作是一個球從山上往下滾動,那麼$V_{dw^{l}}^{t}$能夠當作是在時刻$t$的速度,$V_{dw^{l}}^{t}$受到上一時刻的速度、摩擦力以及加速的影響,則$V_{dw^{l}}^{t-1}$爲上一時刻的速度;$V_{dw^{l}}^{t-1}$乘以$\beta$是由於有摩擦力,下一時刻的速度縮小成上一刻的速度的$\beta$倍;而因爲重力提供了加速度$\left ( 1-\beta \right )dW^{l}$,因此這種梯度降低稱之爲momentum梯度降低。
momentum梯度降低的梯度擬合軌跡能夠當作是下圖的紅色線,參考指數加權平均的做用是使得數據更平滑,因此可使得藍色曲線在縱向上的波動更小,由於縱向上的加權平均有很大一部分能夠相互抵消(梯度是矢量,方向相反的梯度能夠相互抵消),而在水平方向上的速度不變,效果比普通的梯度降低好。
三、RMSprop梯度降低
Adagrad梯度降低:
在瞭解RMSprop算法以前先來了解一下Adagrad梯度降低,Adagrad梯度降低的更新公式爲:
$$W_{t}^{l}=W_{t-1}^{l}- \frac{\alpha}{\sqrt{\sum_{i=1}^{t-1}\left (dW_{i} \right )^{2} }+\varepsilon }\cdot dW_{t-1}^{l}$$
$$b_{t}^{l}=b_{t-1}^{l}- \frac{\alpha}{\sqrt{\sum_{i=1}^{t-1}\left (db_{i} \right )^{2} }+\varepsilon }\cdot db_{t-1}^{l}$$
$$\left (dW_{i} \right )^{2} = W_{i}\bigodot W_{i},\left (db_{i} \right )^{2} = b_{i}\bigodot b_{i}$$
其中,t爲當前迭代次數,$\bigodot$是hadamard積(是矩陣的一類運算,若A=(aij)和B=(bij)是兩個同階矩陣,若cij=aij×bij,則稱矩陣C=(cij)爲A和B的哈達瑪積,或稱基本積)。$\sum_{i=1}^{t-1}\left (dW_{i} \right )^{2} $與$\sum_{i=1}^{t-1}\left (db_{i} \right )^{2} $分別表示歷史前t-1個權重梯度$dW$的hadamard求和與前t-1個偏置梯度$db$的hadamard求和。$\varepsilon$是一個平滑參數(一般取$\varepsilon=1e−8$),用來避免出現分母爲0的狀況。
優勢:因爲學習率$\alpha$除以了一個前$t-1$個梯度的和,因此每次迭代的學習率都會不一樣,且由於梯度會累加得愈來愈大,也就能夠達到衰減學習率的效果,能夠避免在最後收斂的時候學習率過大致使一直在最優勢附近震盪。
缺點:須要計算參數梯度序列平方和,而且學習速率趨勢會較快衰減達到一個很是小的值。
RMSprop梯度降低:
在Adagrad的啓發下,爲了緩解Adagrad學習率衰減過快,首先想到下降分子裏的平方和項,由此引伸出了RMSprop梯度降低(全稱爲root mean square prop),RMSprop是經過將平方和變爲加權平方和.也就是說平方和項隨着時間不斷衰減,過遠的梯度將不影響學習率。
RMSprop的加權平方和公式爲:
$$S_{dW_{t}^{l}}=\beta S_{dW_{t-1}^{l}}+\left ( 1-\beta \right )*\left ( dW \right )^{2}=\beta S_{dW_{t-1}^{l}}+\left ( 1-\beta \right )*dW\bigodot dW$$
$$S_{db_{t}^{l}}=\beta S_{db_{t-1}^{l}}+\left ( 1-\beta \right )*\left ( db \right )^{2}=\beta S_{db_{t-1}^{l}}+\left ( 1-\beta \right )*db\bigodot db$$
其中$\beta=0.999$
RMSprop的迭代更新公式爲:
$$W_{t}=W_{t-1}-\frac{\alpha }{\sqrt{S_{dW_{t-1}^{l}}}+\varepsilon }\cdot dW_{t}$$
$$b_{t}=b_{t-1}-\frac{\alpha }{\sqrt{S_{db_{t-1}^{l}}}+\varepsilon }\cdot db_{t}$$
RMSprop梯度的做用:
咱們先來看一下用普通梯度降低的圖:
藍色線爲梯度降低軌跡,紅點爲最優勢,假設縱向爲偏置b橫向爲權重W(這裏只是爲了便於理解作假設,實際狀況可能縱向爲W一、W2橫向爲W三、W4),縱向上波動較大,或者說梯度較大,而在橫向上梯度正常或者較小。那麼咱們但願達到這麼一個效果,縱向b的爲了消除擺動咱們但願學習率較低,而橫向W咱們但願每次迭代的學習率足夠大。
對於於縱向b,因爲每一次迭代的梯度較大,因此$S_{db_{t}^{l}}$會比較大,這時候咱們更新b的時候學習率會除以一個較大的$S_{db_{t}^{l}}$,從而咱們的學習率$\frac{\alpha }{\sqrt{S_{db_{t-1}^{l}}}+\varepsilon }$會變小,因此在縱向b前進的幅度減少。
對於於縱向W,因爲每一次迭代的梯度較小,因此$S_{db_{t}^{l}}$會比較小,這時候咱們更新b的時候學習率會除以一個較小的$S_{db_{t}^{l}}$,從而咱們的學習率$\frac{\alpha }{\sqrt{S_{db_{t-1}^{l}}}+\varepsilon }$會變大,因此在縱向b前進的幅度減大。
經過對學習率的除以一個平方和加權值,咱們減緩了縱向的學習進度而加大了橫向的學習進度,因此咱們能夠獲得以下的迭代軌跡,如綠色線:
優點:咱們能夠設置一個較大的學習率,由於算法會自適應的調整學習率。
四、Adam梯度降低
在學習了前兩種算法以後,將兩個算法結合起來就是Adam,Adam已被證實適用於不一樣的深度學習結構,對於第$t$次迭代Adam公式以下:
梯度的指數加權平均(Momentum):
$$V_{dW_{t}^{l}}=\beta_{1} V_{dW}^{t-1}+\left ( 1-\beta_{1} \right )dW_{t}^{l}$$
$$V_{db_{t}^{l}}=\beta_{1} V_{db}^{t-1}+\left ( 1-\beta_{1} \right )db_{t}^{l}$$
加權平方和(RMSprop):
$$S_{dW_{t}^{l}}=\beta_{2} S_{dW_{t-1}^{l}}+\left ( 1-\beta_{2} \right )*\left ( dW \right )^{2}=\beta_{2} S_{dW_{t-1}^{l}}+\left ( 1-\beta_{2} \right )*dW\bigodot dW$$
$$S_{db_{t}^{l}}=\beta_{2} S_{db_{t-1}^{l}}+\left ( 1-\beta_{2} \right )*\left ( db \right )^{2}=\beta_{2} S_{db_{t-1}^{l}}+\left ( 1-\beta_{2} \right )*db\bigodot db$$
迭代更新公式:
$$W_{t}=W_{t-1}-\frac{\alpha }{\sqrt{S_{dW_{t-1}^{l}}}+\varepsilon }\cdot V_{dW_{t}^{l}}$$
$$b_{t}=b_{t-1}-\frac{\alpha }{\sqrt{S_{db_{t-1}^{l}}}+\varepsilon }\cdot V_{db_{t}^{l}}$$
Adam 超參數設置建議:
- 學習率 α:須要嘗試一系列的值,來尋找比較合適的;
- β1:經常使用的缺省值爲 0.9;
- β2:Adam 算法的做者建議爲 0.999;
- ϵ:不重要,不會影響算法表現,Adam 算法的做者建議爲 10−8;
- β一、β二、ϵ 一般不須要調試。