網(wǎng)站制作NEWS
深度學(xué)習(xí)中的優(yōu)化器學(xué)習(xí)總結(jié)
梯度下降法
1.批梯度下降法(Batch Gradient Descent)
一次迭代訓(xùn)練所有樣本,樣本總數(shù)為n, 學(xué)習(xí)訓(xùn)練的模型參數(shù)為W,代價函數(shù)為J(W),輸入和輸出的樣本分別為X^i,Y^i, 則代價函數(shù)關(guān)于模型參數(shù)的偏導(dǎo)數(shù)即相關(guān)梯度為ΔJ(W),學(xué)習(xí)率為η_t
優(yōu)點:理想狀態(tài)下經(jīng)過足夠多的迭代后可以達(dá)到全局最優(yōu);
缺點:對于大數(shù)據(jù)集,訓(xùn)練速度會很慢
2.隨機(jī)梯度下降法(Stochastic Gradient Descent)
為了加快收斂速度,每次訓(xùn)練的都是隨機(jī)的一個樣本;
優(yōu)點:訓(xùn)練速度快,引入了噪聲(隨機(jī)選取樣本),使得可能會避免陷入局部最優(yōu)解;
3.Mini-Batch Gradient Descent
BGD 和 SGD的折中方案, batch_size = 1, 就是 SGD, batch_size = m 就是Mini-Batch Gradient Descent,(現(xiàn)在深度學(xué)習(xí)中很多直接把Mini-Batch Gradient Descent 簡稱為SGD, 提到SGD 一般指的就是Mini-Batch Gradient Descent;
優(yōu)點:mini-batch gradient descent 相對SGD在下降的時候,相對平滑些(相對穩(wěn)定),不像SGD那樣震蕩的比較厲害。
缺點:增加了一個超參數(shù) batch_size,要去調(diào)這個超參數(shù);
動量優(yōu)化法
1.Momentum
從訓(xùn)練集中取一個大小為n的小批量{X^1,X^2,...,X^n}樣本,對應(yīng)的真實值分別為Y^i,則Momentum優(yōu)化表達(dá)式為
其中v_t表示 t 時刻積攢的加速度,α表示動力的大小,一般取值為0.9;
動量主要解決SGD的兩個問題:一是隨機(jī)梯度的方法(引入的噪聲);二是Hessian矩陣病態(tài)問題(不是很理解)。
理解策略為:由于當(dāng)前權(quán)值的改變會受到上一次權(quán)值改變的影響,類似于小球向下滾動的時候帶上了慣性。這樣可以加快小球向下滾動的速度。
2.牛頓加速度梯度法(Nesterov Accelerated Gradient)
理解策略:在Momentun中小球會盲目地跟從下坡的梯度,容易發(fā)生錯誤。所以需要一個更聰明的小球,能提前知道它要去哪里,還要知道走到坡底的時候速度慢下來而不是又沖上另一個坡。計算W_t−αv_{t−1}可以表示小球下一個位置大概在哪里。從而可以提前知道下一個位置的梯度,然后使用到當(dāng)前位置來更新參數(shù)。
自適應(yīng)學(xué)習(xí)率優(yōu)化算法
1.AdaGrad算法
假定一個多分類問題,i表示第i個分類,t表示第t迭代同時也表示分類i累計出現(xiàn)的次數(shù)。η_0表示初始的學(xué)習(xí)率取值一般為0.01,ϵ是一個取值很小的數(shù)(一般為1e-8)為了避免分母為0。W_t表示t時刻即第t迭代模型的參數(shù),g_{t,i}=ΔJ(W_{t,i})表示t時刻,指定分類i,代價函數(shù)J(⋅)關(guān)于W的梯度。
從表達(dá)式可以看出,對出現(xiàn)比較多的類別數(shù)據(jù),Adagrad給予越來越小的學(xué)習(xí)率,而對于比較少的類別數(shù)據(jù),會給予較大的學(xué)習(xí)率。因此Adagrad適用于數(shù)據(jù)稀疏或者分布不平衡的數(shù)據(jù)集。
Adagrad 的主要優(yōu)勢在于不需要人為的調(diào)節(jié)學(xué)習(xí)率,它可以自動調(diào)節(jié);缺點在于,隨著迭代次數(shù)增多,學(xué)習(xí)率會越來越小,最終會趨近于0。
2.RMSProp算法
RMSProp算法修改了AdaGrad的梯度積累為指數(shù)加權(quán)的移動平均,使得其在非凸設(shè)定下效果更好
其中,W_t表示t時刻即第t迭代模型的參數(shù),g_t=ΔJ(W_t)表示t次迭代代價函數(shù)關(guān)于W的梯度大小,E[g^2]t表示前t次的梯度平方的均值。α表示動力(通常設(shè)置為0.9),η0表示全局初始學(xué)習(xí)率。ϵ是一個取值很小的數(shù)(一般為1e-8)為了避免分母為0。
RMSProp借鑒了Adagrad的思想,觀察表達(dá)式,分母為sqrt(E[g^2]_t+ϵ)。由于取了個加權(quán)平均,避免了學(xué)習(xí)率越來越低的問題,而且能自適應(yīng)地調(diào)節(jié)學(xué)習(xí)率。
RMSProp算法在經(jīng)驗上已經(jīng)被證明是一種有效且實用的深度神經(jīng)網(wǎng)絡(luò)優(yōu)化算法。目前它是深度學(xué)習(xí)從業(yè)者經(jīng)常采用的優(yōu)化方法之一。
3. AdaDelta算法
AdaGrad算法和RMSProp算法都需要指定全局學(xué)習(xí)率,AdaDelta算法結(jié)合兩種算法每次參數(shù)的更新步長即:
AdaDelta不需要設(shè)置一個默認(rèn)的全局學(xué)習(xí)率
優(yōu)點:在模型訓(xùn)練的初期和中期,AdaDelta表現(xiàn)很好,加速效果不錯,訓(xùn)練速度快。
缺點:在模型訓(xùn)練的后期,模型會反復(fù)地在局部最小值附近抖動。
4. Adam算法
Adam中動量直接并入了梯度一階矩(指數(shù)加權(quán))的估計,Adam包括偏置修正,修正從原點初始化的一階矩(動量項)和(非中心的)二階矩估計
其中,m_t和v_t分別為一階動量項和二階動量項。β_1,β_2為動力值大小通常分別取0.9和0.999;m^t,v^t分別為各自的修正值。
Adam通常被認(rèn)為對超參數(shù)的選擇相當(dāng)魯棒,盡管學(xué)習(xí)率有時需要從建議的默認(rèn)修改;
對比
① 在運行速度方面
兩個動量優(yōu)化器Momentum和NAG的速度最快,其次是三個自適應(yīng)學(xué)習(xí)率優(yōu)化器AdaGrad、AdaDelta以及RMSProp,最慢的則是SGD。
② 在收斂軌跡方面
兩個動量優(yōu)化器雖然運行速度很快,但是初中期走了很長的”岔路”。
三個自適應(yīng)優(yōu)化器中,Adagrad初期走了岔路,但后來迅速地調(diào)整了過來,但相比其他兩個走的路最長;AdaDelta和RMSprop的運行軌跡差不多,但在快接近目標(biāo)的時候,RMSProp會發(fā)生很明顯的抖動。
SGD相比于其他優(yōu)化器,走的路徑是最短的,路子也比較正。
主流的觀點認(rèn)為:Adam等自適應(yīng)學(xué)習(xí)率算法對于稀疏數(shù)據(jù)具有優(yōu)勢,且收斂速度很快;但精調(diào)參數(shù)的SGD(+Momentum)往往能夠取得更好的最終結(jié)果
多重隨機(jī)標(biāo)簽