天天看點

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

聲明:文章僅作知識整理、分享,如有侵權請聯系作者删除博文,謝謝!

關于神經網絡的優化,吳恩達的深度學習課程講解得非常通俗易懂,有需要的可以去學習一下,本人隻是對課程知識點做一個總結。吳恩達的深度學習課程放在了網易雲課堂上,連結如下(免費):

https://mooc.study.163.com/smartSpec/detail/1001319001.htm

神經網絡最基本的優化算法是反向傳播算法加上梯度下降法。通過梯度下降法,使得網絡參數不斷收斂到全局(或者局部)最小值,但是由于神經網絡層數太多,需要通過反向傳播算法,把誤差一層一層地從輸出傳播到輸入,逐層地更新網絡參數。由于梯度方向是函數值變大的最快的方向,是以負梯度方向則是函數值變小的最快的方向。沿着負梯度方向一步一步疊代,便能快速地收斂到函數最小值。這就是梯度下降法的基本思想,從下圖可以很直覺地了解其含義。

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

梯度下降法的疊代公式如下:w=w−α∗dw。

其中w是待訓練的網絡參數,α是學習率,是一個常數,dw是梯度。以上是梯度下降法的最基本形式,在此基礎上,研究人員提出了其他多種變種,使得梯度下降法收斂更加迅速和穩定,其中最優秀的代表便是Mommentum, RMSprop和Adam等。

1、指數權重平均

假設我們有一年365天的氣溫資料θ1,θ2,...,θ365,把他們化成散點圖,如下圖所示:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

這些資料有些雜亂,我們想畫一條曲線,用來表征這一年氣溫的變化趨勢,那麼我們需要把資料做一次平滑處理。最常見的方法是用一個滑動視窗滑過各個資料點,計算視窗的平均值,進而得到資料的滑動平均值。但除此之外,我們還可以使用指數權重平均來對資料做平滑。其公式如下:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

v就是指數權重平均值,也就是平滑後的氣溫。β的典型值是0.9,平滑後的曲線如下圖所示:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

對于vk=βvk−1+(1−β)θk,我們把它展開,可以得到如下形式:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

可見,平滑後的氣溫,是以往每一天原始氣溫的權重平均值,隻是這個權值是随時間的遠近而變化的,離今天越遠,權值越小,且呈指數衰減。從今天往前數k天,它的權值為βk(1−β)。當β=1/1−β時,由于limβ→1βk(1−β)=e−1,權重已經非常小,更久遠一些的氣溫資料權重更小,可以認為對今天的氣溫沒有影響。是以,可以認為指數權重平均計算的是最近1/1−β個資料的權重平均值。通常β取值為0.9,相當于計算10個數的權重平均值。

但是按照原始的指數權重平均公式,還有一個問題,就是當k比較小時,其最近的資料太少,導緻估計誤差比較大。例如v1=0.9v0+(1−0.9)θ1=0.1θ1。為了減小最初幾個資料的誤差,通常對于k比較小時,需要做如下修正:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

1−βk是所有權重的和,這相當于對權重做了一個歸一化處理。下面的圖中,紫色的線就是沒有做修正的結果,修正之後就是綠色曲線。二者在前面幾個資料點之間相差較大,後面則基本重合了。

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

2、Momentum算法

Momentum算法又叫做沖量算法,其疊代更新公式如下:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

光看上面的公式有些抽象,看完指數權重平均,再回過頭來看這個公式,會容易了解得多。

dw是我們計算出來的原始梯度,v則是用指數權重平均計算出來的梯度。這相當于對原始梯度做了一個平滑,然後再用來做梯度下降。實驗表明,相比于标準梯度下降算法,Momentum算法具有更快的收斂速度。為什麼呢?看下面的圖,藍線是标準梯度下降法,可以看到收斂過程中産生了一些震蕩。這些震蕩在縱軸方向上是均勻的,幾乎可以互相抵消,也就是說如果直接沿着橫軸方向疊代,收斂速度可以加快。Momentum通過對原始梯度做了一個平滑,正好将縱軸方向的梯度抹平了(紅線部分),使得參數更新方向更多地沿着橫軸進行,是以速度更快。

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

是以,Momentum算法就是對梯度的指數權重平均濾波,加快網絡收斂速度。

3、RMSprop算法

對于上面的這個橢圓形的抛物面(圖中的橢圓代表等高線),沿着橫軸收斂速度是最快的,是以我們希望在橫軸(假設記為w1)方向步長大一些,在縱軸(假設記為w2)方向步長小一些。這時候可以通過RMSprop實作,疊代更新公式如下:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

觀察上面的公式可以看到,s是對梯度的平方做了一次平滑。在更新w時,先用梯度除以sqrt(s+ϵ),相當于對梯度做了一次歸一化。如果某個方向上梯度震蕩很大,應該減小其步長;而震蕩大,則這個方向的s也較大,除完之後,歸一化的梯度就小了;如果某個方向上梯度震蕩很小,應該增大其步長;而震蕩小,則這個方向的s也較小,歸一化的梯度就大了。是以,通過RMSprop,我們可以調整不同次元上的步長,加快收斂速度。

β的典型值是0.999。公式中還有一個ϵ,這是一個很小的數,典型值是10−8。

4、Adam算法

Adam算法則是以上二者的結合。先看疊代更新公式:

參數優化-Momentum-RMSprop-Adam1、指數權重平均2、Momentum算法3、RMSprop算法4、Adam算法

典型值:β1=0.9,β2=0.999,ϵ=10−8。Adam算法相當于先把原始梯度做一個指數權重平均,再做一次歸一化處理,然後再更新梯度值。

引用文章:

https://www.cnblogs.com/jiaxblog/p/9695042.html

繼續閱讀