CS231n學習筆記——更好的優化算法

CS231n學習筆記——更好的優化算法

SGD的缺點:
優化的軌跡會如圖所示,因爲很多函數的梯度方向並不是直接朝向最小值的,所以沿着梯度前進的時候可能會來回反覆。這個問題在高維空間中更加普遍,
在這裏插入圖片描述
而且SGD很容易陷入局部最小值
而且在mini batch訓練中,每次都取出一小部分數據學習梯度,導致學習到的梯度與正真的梯度有些偏差,特別是在存在噪聲的數據中,這樣的SGD可能需要更多時間去找到最小值點
在這裏插入圖片描述
而在隨機梯度下降中加入一個動量項,

在這裏插入圖片描述
構造一個保持不變的項——速度v,把每一次算出來的梯度都加到這個速度上,在這個速度方向上步進而不是梯度上。這相當於給梯度加上了一個動量,讓它在局部最小值點或者鞍點上不會輕易停下來。
在每一次計算速度上,都要加上一個rho係數,也就是摩擦係數,讓上一次的速度乘以0.9再加上這次新的梯度,綜合來看,每一次的速度值都是之前所有梯度的加權和,越近的梯度權重越大,越久遠的梯度權重越小。所以可以把它看成一個最近梯度平均的平滑移動。
另一種有輕微變化的叫Nesterov Momentum會在速度方向上重新選擇步進值。
在這裏插入圖片描述在這裏插入圖片描述
由於Nesterov有校正因子的存在,他不會那麼劇烈越過局部極小值點。

AdaGrad優化算法

在這裏插入圖片描述
保持計算每一步的梯度平方和的持續估計,訓練時會一直持續疊加當前梯度的平方和到這個梯度平方項,當我們在更新我們的參數向量時,我們會除以這個梯度平方項
所以使用AdaGrad的時候步長會變得越來越小,在學習目標是一個凸函數時,這個特徵效果很好,因爲當快到達極值點時會逐漸慢下來最後到達收斂,但是在非凸函數情況下,當到達一個局部極值點時AdaGrad會讓訓練在這裏被困住。
所以對AdaGrad有一個變體叫RMSProp
在這裏插入圖片描述
在RMSProp裏並不是單純的疊加梯度的平方,而是會讓平方梯度按照一定比率下降

Adam算法

Adam算法是Momentum和RMSProp的合體,
在這裏插入圖片描述
因爲人爲的將第二動量second_moment初始化爲0,第一步算出的第二動量值很小很小,導致x步長一開始就非常非常大。所以完整版的Adam增加了偏置校正項,避免出現開始時得到很大步長:
在這裏插入圖片描述
Adam對任何問題基本都有不錯的表現,所以遇見新的問題時可以先嚐試用Adam,特別是如果將beta1設置爲0.9,beta2設置爲0.999,學習率設置爲1e-3,無論使用什麼網絡構架基本都能很好的開始。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章