深度學習之優化算法詳解

 

梯度下降(batch gradient descent, stochastic gradientdescent, 以及 mini-batchgradient descent)現在的SGD一般都指mini-batch gradient descent

(1)Batch gradientdescent:最小化所有訓練樣本的損失函數。得到的是一個全局最優解,但是每迭代一步,都要用到訓練集所有的數據,如果m很大,那麼可想而知這種方法的迭代速度慢;對於convex error surfaces可以得到global minimum,而對於non-convex errorsurfaces能得到local minimum

(2) Stochasticgradient descent: -最小化每條樣本的損失函數,雖然不是每次迭代得到的損失函數都向着全局最優方向,但是大的整體的方向是向全局最優解的,最終的結果往往是在全局最優解附近。通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬)。但是,SGD伴隨的一個問題是噪音較BGD要多,使得SGD並不是每次迭代都向着整體最優化方向。相較於BGDSGD更容易從一個local minimum跳到另一個local minimum(但是當learning rate過小時,performance便和BGD相似);High variance,更容易使得loss curve產生震盪

(3)Mini-batch gradientdescent: 計算whole dataset某個子集(通常設置爲50-256)對於paremeters的偏導,而後更新梯度;SGD更穩定,更易收斂;能夠使用高效的矩陣化trick,使得在runing的時候更加efficient

SGD就是每一次迭代計算mini-batch的梯度,然後對參數進行更新,是最常見的優化方法了。即:

中,η是學習率,gt是梯度 SGD完全依賴於當前batch的梯度,所以可理解爲允許當前batch的梯度多大程度影響參數更新。

1)       選擇合適的learning rate比較困難,太小了收斂很慢,太大了容易在local minimum周圍晃動,甚至發散- 對所有的參數更新使用同樣的learning rate。對於稀疏數據或者特徵,有時我們可能想更新快一些對於不經常出現的特徵,對於常出現的特徵更新慢一些,這時候SGD就不太能滿足要求;

2)       SGD容易收斂到局部最優

 

Momentum

遇到溝壑問題(一個方向的坡度比其他方向明顯要陡峭,大多數情況下都會對應到一個local minimum)時,SGD不會沿着溝壑加速下降到local minimum,而Momentum的想法則是將上一次更新時的梯度乘以一個因數γ(一般設置爲0.9)然後加上此時的梯度若兩個梯度的方向類似,則會加速在這一方向上的移動,即加速了收斂

u爲動量因子。

特點:下降初期時,使用上一次參數更新,下降方向一致,乘上較大的因子能夠進行很好的加速;下降中後期時,在局部最小值來回震盪的時候,梯度趨於0,使得更新幅度增大,跳出陷阱;momentum項能夠在相關方向加速SGD,抑制振盪,從而加快收斂。

缺點 Momentum的一個問題是盲目,即不判斷下一步將要下降到哪,就一直加速下降,所以在坡度開始由下降轉爲上升時,可能會越過local minimum

Nesterov

先大概預測下一步要下降到的位置,再做出修正,梯度更新時做一個校正,避免前進太快,同時提高靈敏度;

 將上一節中的公式展開可得:

加上nesterov項後,梯度在大的跳躍後,對當前梯度進行校正。

 

 

momentum首先計算一個梯度(短的藍色向量),然後在加速更新梯度的方向進行一個大的跳躍(長的藍色向量)nesterov項首先在之前加速的梯度方向進行一個大的跳躍(棕色向量),計算梯度然後進行校正(綠色梯向量)

上述方法均需人工調整學習率,接下來介紹幾種自適應學習率的方法

Adagrad

Adagrad其實是對學習率進行了一個約束gt1t進行一個遞推形成一個約束項regularizer:

特點:前期gt較小的時候, regularizer較大,能夠放大梯度;後期gt較大的時候,regularizer較小,能夠約束梯度;適合處理稀疏梯度。Adagrad不需要精調learning rate(一般設置爲0.01即可)。

缺點:由公式可以看出,仍依賴於人工設置一個全局學習率η設置過大的話,會使regularizer過於敏感,對梯度的調節太大;中後期,分母上梯度平方的累加將會越來越大,使梯度趨於0,使得訓練提前結束。

經驗之談:

1.對於稀疏數據,儘量使用學習率可自適應的優化方法,不用手動調節,而且最好採用默認值

2.SGD通常訓練時間更長,但是在好的初始化和學習率調度方案的情況下,結果更可靠

3.如果在意更快的收斂,並且需要訓練較深較複雜的網絡時,推薦使用學習率自適應的優化方法。

4.AdadeltaRMSpropAdam是比較相近的算法,在相似的情況下表現差不多。

5.在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。

牛頓法:思想:在現有極小點估計值的附近對f(x)做二階泰勒展開,進而找到極小值點的下一個估計值;

f(x)xk附近的二階泰勒展開。滿足從而

牛頓法是採用其損失函數的二階偏導數尋找更好的訓練下降方向,所以它相比梯度下降只要更少的迭代次數就能下降到損失函數的極小值,因此函數收斂速度也會大幅度地加快。

 

優點:對於非二次函數,若函數的二次性態較強,或迭代點已進入極小點的鄰域,則其收斂速度很快;缺點:是一個定步長迭代,對非二次型目標函數,函數值有時會上升,不能保證函數值穩定下降;計算量大。

擬牛頓法(DFPBFGSL-BFGS:求解非線性優化問題;不用二階偏導數二構造出可近似Hessian矩陣的正定對稱陣。

優缺點:無需選擇學習率α,更快,但是更復雜

 

 

 

 

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