Improving Deep Neural Networks 第二周

Improving Deep Neural Networks 第二周

來自專欄 孝男的深度學習島嶼

由於知乎不支持mathjax公式,所以想獲得良好體驗的可以移步

Improving Deep Neural Networks 第二周?

lixiaonan.coding.me圖標

另外,我在寫這篇文章的時候遇到本地typora渲染結果與hexo渲染不同(具體是某些公式渲染錯誤),通過下面這個鏈接解決了。

hexo博客MathJax公式渲染問題 - VitaHeng - 博客園?

www.cnblogs.com圖標

Mini-Batch

將訓練集分成多個部分,每個部分含若干個example,每次循環僅對其中一個部分進行梯度下降。每次梯度下降不一定使整體的loss變小,但是loss的總體趨勢是越來越小的。有兩種極端,一種是一個訓練集就是一個部分,每次對整個訓練集梯度下降,會導致計算量大且慢。第二種是一個部分僅含一個example,這會導致loss在每次梯度下降後的變化很曲折,且沒有了向量化的加速,我實際試過,也很慢。關於每個部分含多少example,最好是2的指數次,一般是64~512,若訓練集很小,則沒必要用Mini-Batch

Exponentially weighted averages

假設有一年中的溫度數據,一共365個,代表每一天的溫度,$V_t$代表第t天的溫度,那麼它們會很不光滑,很噪,如下圖

如果用下面這個公式對這些數據處理,那麼會有所不同。

$$

V_0=0

$$

$$

V_t = eta V_{t-1}+(1-eta)V_t

$$

紅色:$eta=0.9$ 綠色:$eta=0.98$

視頻里說這相當於令$V_t$約等於前$frac{1}{1-eta}$天的平均溫度。

在後面一個深入指數加權平均的視頻里,可以推出($v_k$指未被處理的溫度,$V_k$指處理過後的)

$$

V_t=(1-eta)sum_{k=0}^teta^{t-k}v_{k}

$$

之所以可以說是約等於前$frac{1}{1-eta}$天的平局溫度是因為$eta$非常接近1,所以$eta^k$與$eta^{k+1}$相差不大,但又提到當k大於$frac{1}{1-eta}$後,$eta^k$很小,所以可以忽略。我覺得有點矛盾,可以理解為吳老師想讓我們對這個的intuition更強烈。還有一點,若$V_0=0$則

$$

V_1=(1-eta)v_1

$$

$$

V_2=(1-eta)(eta v_1+v_2)

$$

導致前$frac{1}{1-eta}?$項太小。若乘$frac{1}{1-eta^t}?$則相當於scaling操作,使各項v的係數和為0。看起來很美好,但實際中一般不用,因為只有前面幾項受到影響,而且費時。

Gradient descent with momentum

對於每一個參數P應用指數加權平均。一開始令$V_{dP}=0$,每次梯度下降中,算出dP,令$V_{dP}=eta V_{dP}+(1-eta)dP$,然後用$P=P-alpha V_{dP}$去更新P,這樣相當於起到一個對每個獨立的參數動態調整學習率的作用,使最後收斂加速。一般$eta$取0.9。需要注意的是,學習率$alpha$是可以隨便調的。

比如說上面這張圖,水平方向代表W,垂直代表b(不一定是W和b也可以是W1與W2,只是為了便於說明),b的梯度來回振蕩,由於$V_{dP}=eta V_{dP}+(1-eta)dP$,所以正負有所抵消,而W的梯度一直向右,所以幾乎不受影響。藍色代表普通梯度下降的情況,綠色代表應用momentum之後的。

RMSprop

與momentum類似,也要對每一個參數P應用指數加權平均。一開始令$S_{dP}=0$,每次梯度下降中,算出dP,令$S_{dP}=eta S_{dP}+(1-eta)dP^2$,然後用$P=P-alphafrac{dP}{sqrt{S_{dP}}}$更新P(一般來說分母會加個$epsilon=10^{-8}$防止分母過小的情況),繼續看上面這張圖,由於b方向梯度大,所以$S_{dP}$大,所以$frac{dP}{sqrt{S_{dP}}}$小,相當於變平緩。而w方向正好相反。我不是很能理解為什麼這能加速收斂,假設一個非常極端的情況,對於某一參數,前多少次的梯度都相同,所以$S_{dp}$正比例於$dP$,而之後$dP$又除了一下$S_dp$的根號,次數相互抵消,相當於就是根據這個參數的梯度正負給出恆定的下降步長。也可以說是自適應的學習率。但這又會引起另一個問題,在收斂的時候振蕩範圍太大了,你可能會想起上面的momentum。這就引出了下面的優化方法。

Adam

這個方法是Momentum與RMSprop的結合。一開始令$V_{dP}=0,S_{dP}=0$,每次梯度下降中,算出dP,$V_{dP}=eta_1V_{dP}+(1-eta_1)dP$,$S_{dP}=eta_1S_{dP}+(1-eta_1)dP^2$,用$P=P-alphafrac{V_{dP}}{sqrt{S_{dP}}}$更新參數P。$eta_1$一般取0.9,$eta_2$一般取0.999。這個方法結合momentum與RMSprop,是個很強的優化方法。名字的由來是Adaptive Moment Estimation,自適應矩估計,和Andrew NG的一個姓Adam的朋友沒關係。

Learning rate decay

建立一個學習率關於迭代次數的函數,從而使學習率隨迭代次數慢慢變小。但這樣並沒有區分各個參數的「獨立學習率」(上面的三種優化方法都是針對各個參數調整學習率的),可能這是讓Andrew NG不優先考慮這個的原因。

The problem of local optima

在上圖中,全局最優是藍色的下凹的那個地方,其他的藍點都是局部最優,在W1和W2方向都是導數為0,二階導為正(下凹,下同)的點。但在高維的情況下,比方說20000維,一個局部最優點一般不可能是20000維上都處於導數為0,二階導為正的點,更有可能出現的是下面這個情況。

有導數接近0,二階導為正的參數,也有導數接近0,二階導為負(上凸,下同)的參數,在這種情況下,普通的梯度下降逃離W2方向上的這個頂點,是很慢的。但應用Momentum,RMSprop,Adam可以加速這種逃離的速度。這就是它們能加速收斂的原因之一。至於為什麼高維很難出現導數為0,二階導全為正的局部最優點,這是一個排列組合的問題呀。如果不是導數全為正,就可以乘一個$sum_{n=1}^{19999} C_{20000}^n$的因子(接近於2的20000次),所以馬鞍形狀出現的概率遠遠大於局部最優點的概率。

Programming exercise : Optimization

這個練習比較簡單,補全各個最優化方法的一些代碼即可,最後還比較了迭代次數一定時三種優化方法的學習曲線與擬合情況。

普通梯度下降:

帶momentum的梯度下降:

Adam:

雖然說前兩種方法可能沒收斂,但也能看出Adam實在太強啦,特別是一開始,loss下降的超快。

推薦閱讀:

TAG:深度學習DeepLearning | 神經網路 | Coursera |