梯度下降演算法
指數加權平均演算法
動量梯度下降
RMSprop演算法
Adam優化演算法
常用的優化演算法在面試的時候也會經常被問到。
一、梯度下降演算法
在訓練模型之前會先定義一個代價函式,然後通過不停的迭代訓練資料利用梯度下降演算法來減少每次迭代的誤差,從而使得代價函式最小化。梯度下降演算法主要包括三種,隨機梯度下降、batch梯度下降、mini-batch梯度下降。最常用的是mini-batch梯度下降演算法。
隨機梯度下降
隨機梯度下降演算法是指在訓練模型的時候,每次迭代只從訓練資料中隨機抽取一個數據來計算梯度更新模型的引數。隨機梯度下降演算法永遠無法收斂,容易受到噪聲的干擾,訓練時間長,代價函式最終會圍繞全域性最小值或者區域性極小值震盪。
batch梯度下降
batch梯度下降演算法是指在訓練模型的時候,每次迭代時使用所有的訓練資料來計算梯度更新模型的引數。batch梯度下降演算法適用於小資料集的訓練,對於大資料集(大於2000)不太適應,因為每次訓練的時候都要使用所有的訓練資料,會導致需要消耗大量的記憶體,增加電腦的計算量,計算時間長。batch梯度下降不容易受到噪聲資料的干擾,在迭代的時候能夠保證向全域性最小值或區域性極小值的方向進行收斂。
mini-batch梯度下降
mini-batch梯度下降演算法是指在訓練模型的時候,每次迭代時會使用一個mini-batch資料來計算梯度更新模型的引數,這個mini-batch通常取64、128、256、512,通常採用2^n作為一個mini-batch,符合電腦的記憶體結構在一定程度上可以加快計算機的計算速度,從而減少訓練的時間。mini-batch梯度下降演算法是最常用的梯度下降演算法,mini-batch對計算機的記憶體要求不高,收斂速度相對較快,在迭代的時候不能保證每次迭代都像全域性最小值進行收斂,但是整體的趨勢是向全域性最小值進行收斂的。當mini-batch取1時,就變成了隨機梯度下降演算法,當mini-batch的大小為整個訓練資料集的大小時就變成了batch梯度下降。
二、指數加權平均值
指數加權平均值,也被稱為移動平均值,從名字可以看出來它其實也是一種求平均值的演算法,在後面介紹動量、RMSProp和Adam的時候都需要用到它。
上圖中,橫軸表示的是天數,縱軸表示的是溫度。通過上圖可以發現,其中紅色曲線的β \\betaβ為0.9,黃色曲線的β \\betaβ小於0.9,綠色曲線的β \\betaβ大於0.9,當β \\betaβ越來越大時,指數加權平均值曲線會慢慢的向右移動,反映溫度的變化會延時,曲線會越來平滑。
指數加權平均演算法相對於直接求平均值演算法的優勢在於,指數加權平均值只需要極小的空間就可以計算出近似平均值,而直接使用平均值演算法需要儲存以前所有的資料,相對而言指數加權平均值的計算出來平均值的精度沒有那麼高,它是犧牲了一定的精度來換取空間和速度的。由於它在空間上具有極大的優勢,所以應用範圍還是很廣泛。
三、動量梯度下降演算法
動量梯度下降演算法在梯度下降演算法的基礎上做了一些優化,梯度下降演算法的收斂如下圖所示
其中黑點表示的是起點,紅點表示的是終點。通過梯度下降演算法不停的迭代,慢慢的從黑點移動到紅點的位置,通過上圖可以發現黑點的移動軌跡在y方向上一直存在上下波動,而這個對於黑點移動到紅點的位置沒有任何的幫助,反而是在浪費時間,因為我們更希望減少這種不必要的計算,加速x軸方向上的移動步伐,如下圖所示
而上圖正是動量梯度下降演算法所追求的效果,那麼它到底是如何實現的呢?
上式中α \\alphaα表示學習率,通過上式可以發現,動量梯度下降演算法在更新引數的時候並不是直接使用的梯度,它還利用到以前的梯度,具體到多少,與β \\betaβ的大小有關,β \\betaβ越大使用到以前的梯度越多,β \\betaβ越小使用到以前的梯度越小。
因為在y軸方向上梯度是有正有負的,所以均值就近似為0,即在y軸方向上不會有太大的變化。而x軸方向上的梯度都是一致的,所以能夠為x軸方向上提供動量加速更新。由於動量梯度下降演算法,在更新引數的時候不僅使用到了當前的梯度還使用到了以前梯度的均值作為動量,當陷入到區域性極小值(梯度接近於0),在更新的時候動量梯度下降演算法還可以利用以前梯度的均值來跳出區域性極小值,而梯度下降演算法只會陷入到區域性極小值。在使用動量梯度下降演算法的時候β \\betaβ通常可以取0.9。
四、RMSprop演算法
RMSprop演算法全稱root mean square prop,RMSprop演算法的思想和Moment演算法的思想是一致的都是通過減少在y軸方向上的抖動,加大x軸方向上的移動步長。而在實現上略有不同,Moment主要是利用累積以前的梯度來實現加速,而RMSprop演算法的思想是利用梯度下降演算法在y軸方向上的梯度比較大,而在x軸方向上的梯度相對較小。在進行引數更新的時候,讓y軸方向上的梯度除以一個大的數,這樣y軸更新的幅度就小。而x軸方向上的梯度除以一個小的數,這樣x軸更新的幅度就大。從而實現了,減小了y軸方向上的更新步長,增大了x軸方向上的更新步長,使得演算法能夠更快的收斂。更新公式如下:
五、Adam演算法
Adam演算法全稱Adaptive Moment Estimation,主要是結合了Moment演算法和RMSprop演算法。公式如下:
六、總結
最後我們用兩張圖來比較一下演算法的表現,這張圖表示的是在同樣的等高線的情況下各個演算法的收斂情況
下面這張圖表示的是不同演算法在遇到鞍點時的表現