梯度下降算法中的Adagrad和Adadelta

梯度下降算法

目錄

Adagrad

與梯度下降不同的是,更新規則中,對於學習率不在設置固定的值,每次迭代過程中,每個參數優化時使用不同的學習率。
假設 某次迭代時刻t,gt,i=θJ(θi) 是目標函數對參數的梯度,普通的隨機梯度下降算法,對於所有的θi 都使用相同的學習率,因此迭代到第t次時,某一個參數向量θi 的變化過程如下:

θt+1,i=θt,iηgt,i

而在Adagrad的更新規則中,學習率 η 會隨着每次迭代而根據歷史梯度的變化而變化。
θt+1,i=θt,iηGt+ϵgt,i

GtRd×d 是一個對角矩陣,每個對角線位置i,i 的值累加到t次迭代的對應參數 θi 梯度平方和。ϵ 是平滑項,防止除零操作,一般取值1e8 。爲什麼分母要進行平方根的原因是去掉平方根操作算法的表現會大打折扣。

Adadelta

爲了避免前文提到的問題,削弱單調猛烈下降的減少學習率,Adadelta產生了1。Adadelta限制把歷史梯度累積窗口限制到固定的尺寸w ,而不是累加所有的梯度平方和。
Adagrad的一大優勢時可以避免手動調節學習率,比如設置初始的缺省學習率爲0.01,然後就不管它,另其在學習的過程中自己變化。當然它也有缺點,就是它計算時要在分母上計算梯度平方的和,由於所有的參數平法必爲正數,這樣就造成在訓練的過程中,分母累積的和會越來越大。這樣學習到後來的階段,網絡的更新能力會越來越弱,能學到的更多知識的能力也越來越弱,因爲學習率會變得極其小,爲了解決這樣的問題又提出了Adadelta算法。
梯度和是遞歸的定義成歷史梯度平方的衰減平均值。動態平均值E[g2]t 僅僅取決於當前的梯度值與上一時刻的平均值:

E[g2]t=γE[g2]t1+(1γ)g2t

γ 類似於衝量項,大約在0.9附近。需要說明的是,現在將SGD更新的參數變化向量θt
θt=ηgt,i

θt+1=θt+θt

在Adagrad中,θt 是由
θt=ηGt+ϵgt,i
表示的,現在用E[g2]t 簡單代替原來的對角矩陣Gt :
θt=ηE[g2]t+ϵgt,i

將分母簡記爲RMS,表示梯度的均方根誤差的意思。
θt=ηRMS[g]tgt

[6]作者說,更新中,定義指數衰減均值,代替梯度平方,二用參數平方來更新:
E[θ2t]t=γE[θ2t]t1+(1γ)θ2t
RMS[θ]t1 代替學習率η ,則得到Adadelta更新規則:
θt=RMS[θ]t1RMS[g]tgt

θt+1=θt+θt

由此看出,甚至不需要設定缺省學習率,因爲更新規則已經不受它影響了

本文參考文獻資料地址,更多詳情請點擊


1: Duchi et al. give this matrix as an alternative to the full matrix containing the outer products of all previous gradients, as the computation of the matrix square root is infeasible even for a moderate number of parameters dd. http://sebastianruder.com/optimizing-gradient-descent/index.html#fnref:24
2: Zeiler, M. D. (2012). ADADELTA: An Adaptive Learning Rate Method. Retrieved from http://arxiv.org/abs/1212.5701

發佈了34 篇原創文章 · 獲贊 31 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章