日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)

發(fā)布時間:2024/10/8 编程问答 31 如意码农
生活随笔 收集整理的這篇文章主要介紹了 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

這里討論的優(yōu)化問題指的是,給定目標(biāo)函數(shù)f(x),我們需要找到一組參數(shù)x,使得f(x)的值最小。

本文以下內(nèi)容假設(shè)讀者已經(jīng)了解機(jī)器學(xué)習(xí)基本知識,和梯度下降的原理。

Batch gradient descent

梯度更新規(guī)則:
BGD 采用整個訓(xùn)練集的數(shù)據(jù)來計算 cost function 對參數(shù)的梯度:

 
 

缺點(diǎn):
由于這種方法是在一次更新中,就對整個數(shù)據(jù)集計算梯度,所以計算起來非常慢,遇到很大量的數(shù)據(jù)集也會非常棘手,而且不能投入新數(shù)據(jù)實(shí)時更新模型。

我們會事先定義一個迭代次數(shù) epoch,首先計算梯度向量 params_grad,然后沿著梯度的方向更新參數(shù) params,learning rate 決定了我們每一步邁多大。

Batch gradient descent 對于凸函數(shù)可以收斂到全局極小值,對于非凸函數(shù)可以收斂到局部極小值。

SGD(Stochastic gradient descent)

梯度更新規(guī)則:
和 BGD 的一次用所有數(shù)據(jù)計算梯度相比,SGD 每次更新時對每個樣本進(jìn)行梯度更新,
對于很大的數(shù)據(jù)集來說,可能會有相似的樣本,這樣 BGD 在計算梯度時會出現(xiàn)冗余,
而 SGD 一次只進(jìn)行一次更新,就沒有冗余,而且比較快,并且可以新增樣本。

 
缺點(diǎn):
但是 SGD 因?yàn)楦卤容^頻繁,會造成 cost function 有嚴(yán)重的震蕩。

BGD 可以收斂到局部極小值,當(dāng)然 SGD 的震蕩可能會跳到更好的局部極小值處。

當(dāng)我們稍微減小 learning rate,SGD 和 BGD 的收斂性是一樣的。

Mini-batch gradient descent

梯度更新規(guī)則:
MBGD 每一次利用一小批樣本,即 n 個樣本進(jìn)行計算,
這樣它可以降低參數(shù)更新時的方差,收斂更穩(wěn)定,
另一方面可以充分地利用深度學(xué)習(xí)庫中高度優(yōu)化的矩陣操作來進(jìn)行更有效的梯度計算。

 
 

和 SGD 的區(qū)別是每一次循環(huán)不是作用于每個樣本,而是具有 n 個樣本的批次

超參數(shù)設(shè)定值:
n 一般取值在 50~256

缺點(diǎn):
Mini-batch gradient descent 不能保證很好的收斂性,

  1. learning rate 如果選擇的太小,收斂速度會很慢,如果太大,loss function 就會在極小值處不停地震蕩甚至偏離。

有一種措施是先設(shè)定大一點(diǎn)的學(xué)習(xí)率,當(dāng)兩次迭代之間的變化低于某個閾值后,就減小 learning rate,不過這個閾值的設(shè)定需要提前寫好,這樣的話就不能夠適應(yīng)數(shù)據(jù)集的特點(diǎn)。

  1. 此外,這種方法是對所有參數(shù)更新時應(yīng)用同樣的 learning rate,如果我們的數(shù)據(jù)是稀疏的,我們更希望對出現(xiàn)頻率低的特征進(jìn)行大一點(diǎn)的更新。

  2. 另外,對于非凸函數(shù),還要避免陷于局部極小值處,或者鞍點(diǎn)處,因?yàn)榘包c(diǎn)周圍的error 是一樣的,所有維度的梯度都接近于0,SGD 很容易被困在這里。

鞍點(diǎn)就是:一個光滑函數(shù)的鞍點(diǎn)鄰域的曲線,曲面,或超曲面,都位于這點(diǎn)的切線的不同邊。
例如這個二維圖形,像個馬鞍:在x-軸方向往上曲,在y-軸方向往下曲,鞍點(diǎn)就是(0,0)


Momentum

SGD方法的一個缺點(diǎn)是,其更新方向完全依賴于當(dāng)前的batch,因而其更新十分不穩(wěn)定。解決這一問題的一個簡單的做法便是引入momentum。

momentum即動量,它模擬的是物體運(yùn)動時的慣性,即更新的時候在一定程度上保留之前更新的方向,同時利用當(dāng)前batch的梯度微調(diào)最終的更新方向。這樣一來,可以在一定程度上增加穩(wěn)定性,從而學(xué)習(xí)地更快,并且還有一定擺脫局部最優(yōu)的能力:

Δxt=ρΔxt−1−ηgt

其中,ρ 即momentum,表示要在多大程度上保留原來的更新方向,這個值在0-1之間,在訓(xùn)練開始時,由于梯度可能會很大,所以初始值一般選為0.5;當(dāng)梯度不那么大時,改為0.9。η 是學(xué)習(xí)率,即當(dāng)前batch的梯度多大程度上影響最終更新方向,跟普通的SGD含義相同。ρ 與 η 之和不一定為1。

Nesterov Momentum

這是對傳統(tǒng)momentum方法的一項(xiàng)改進(jìn),由Ilya Sutskever(2012 unpublished)在Nesterov工作的啟發(fā)下提出的。

其基本思路如下圖:

首先,按照原來的更新方向更新一步(棕色線),然后在該位置計算梯度值(紅色線),(則在計算梯度時,不是在當(dāng)前位置,而是未來的位置上)然后用這個梯度值修正最終的更新方向(綠色線)。上圖中描述了兩步的更新示意圖,其中藍(lán)色線是標(biāo)準(zhǔn)momentum更新路徑。

公式描述為:

Δxt=ρΔxt−1−ηΔf(xt+ρΔxt−1)

Adagrad

上面提到的方法對于所有參數(shù)都使用了同一個更新速率。但是同一個更新速率不一定適合所有參數(shù)。比如有的參數(shù)可能已經(jīng)到了僅需要微調(diào)的階段,但又有些參數(shù)由于對應(yīng)樣本少等原因,還需要較大幅度的調(diào)動。

Adagrad就是針對這一問題提出的,自適應(yīng)地為各個參數(shù)分配不同學(xué)習(xí)率的算法。

其中g(shù)t 同樣是當(dāng)前的梯度,連加和開根號都是元素級別的運(yùn)算。eta 是初始學(xué)習(xí)率,由于之后會自動調(diào)整學(xué)習(xí)率,所以初始值就不像之前的算法那樣重要了。而?是一個比較小的數(shù),用來保證分母非0。

其含義是,對于每個參數(shù),隨著其更新的總距離增多,其學(xué)習(xí)速率也隨之變慢。

Adadelta

Adagrad算法存在三個問題

  • 其學(xué)習(xí)率是單調(diào)遞減的,訓(xùn)練后期學(xué)習(xí)率非常小
  • 其需要手工設(shè)置一個全局的初始學(xué)習(xí)率
  • 更新xt時,左右兩邊的單位不統(tǒng)一

Adadelta針對上述三個問題提出了比較漂亮的解決方案。

首先,針對第一個問題,我們可以只使用adagrad的分母中的累計項(xiàng)離當(dāng)前時間點(diǎn)比較近的項(xiàng)。

這里ρ是衰減系數(shù),通過這個衰減系數(shù),我們令每一個時刻的gt隨之時間按照ρ指數(shù)衰減,這樣就相當(dāng)于我們僅使用離當(dāng)前時刻比較近的gt信息,從而使得還很長時間之后,參數(shù)仍然可以得到更新。

RMSprop

RMSprop 是 Geoff Hinton 提出的一種自適應(yīng)學(xué)習(xí)率方法。

RMSprop 和 Adadelta 都是為了解決 Adagrad 學(xué)習(xí)率急劇下降問題的,

梯度更新規(guī)則:
RMSprop 與 Adadelta 的第一種形式相同:

 
 

超參數(shù)設(shè)定值:
Hinton 建議設(shè)定 γ 為 0.9, 學(xué)習(xí)率 η 為 0.001。

Adam

這個算法是另一種計算每個參數(shù)的自適應(yīng)學(xué)習(xí)率的方法。

除了像 Adadelta 和 RMSprop 一樣存儲了過去梯度的平方 vt 的指數(shù)衰減平均值 ,也像 momentum 一樣保持了過去梯度 mt 的指數(shù)衰減平均值:

 
 

如果 mt 和 vt 被初始化為 0 向量,那它們就會向 0 偏置,所以做了偏差校正,
通過計算偏差校正后的 mt 和 vt 來抵消這些偏差:

 
 

梯度更新規(guī)則:

 
 

超參數(shù)設(shè)定值:
建議 β1 = 0.9,β2 = 0.999,? = 10e−8

實(shí)踐表明,Adam 比其他適應(yīng)性學(xué)習(xí)方法效果要好。

如何選擇?

如果數(shù)據(jù)是稀疏的,就用自適用方法,即 Adagrad, Adadelta, RMSprop, Adam。

RMSprop, Adadelta, Adam 在很多情況下的效果是相似的。

Adam 就是在 RMSprop 的基礎(chǔ)上加了 bias-correction 和 momentum,

隨著梯度變的稀疏,Adam 比 RMSprop 效果會好。

整體來講,Adam 是最好的選擇。

很多論文里都會用 SGD,沒有 momentum 等。SGD 雖然能達(dá)到極小值,但是比其它算法用的時間長,而且可能會被困在鞍點(diǎn)。

如果需要更快的收斂,或者是訓(xùn)練更深更復(fù)雜的神經(jīng)網(wǎng)絡(luò),需要用一種自適應(yīng)的算法。

總結(jié)

以上是生活随笔為你收集整理的各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。