王昕
摘要:梯度下降法是機器學(xué)習(xí)算法中廣泛使用的方法,特別是在神經(jīng)網(wǎng)絡(luò)中。本文首先概述了梯度下降法和其三種實現(xiàn)框架,描述其優(yōu)缺點。針對算法訓(xùn)練時間緩慢的缺陷,首先從最經(jīng)典且主流的梯度下降優(yōu)化算法開始介紹,闡述研究動機、基本思想、其解決的問題,最后對比流行的梯度下降優(yōu)化算法進行實驗分析。
關(guān)鍵詞:梯度下降法;機器學(xué)習(xí);優(yōu)化算法;發(fā)展方向
中圖分類號:TP311? ? ? ? 文獻標(biāo)識碼:A
文章編號:1009-3044(2022)08-0071-03
引言
在機器學(xué)習(xí)領(lǐng)域中,因為有些目標(biāo)模型的損失函數(shù)非常復(fù)雜,不能有效得到參數(shù)估計值的表達式。對此針對模型的損失函數(shù)優(yōu)化問題,實際應(yīng)用中,通常采用梯度下降法來對目標(biāo)進行訓(xùn)練,使其訓(xùn)練的結(jié)果趨勢會降至最小值,但是梯度下降法訓(xùn)練的過程極其緩慢,也對學(xué)習(xí)率和權(quán)重衰減等超參數(shù)極其敏感。至此,學(xué)者對這兩方面因素做了調(diào)整,通過動量加速平衡權(quán)重衰減和在自適應(yīng)學(xué)習(xí)率的大小帶來的影響,極大改進了收斂速度和訓(xùn)練消耗時長。
最新的研究進展方向表明,為了更好應(yīng)對該算法下模型訓(xùn)練產(chǎn)生的大量計算成本,第一種方法是在梯度下降法的基礎(chǔ)上展現(xiàn)了一種混合策略,如SWATS、Lookahead、AdaSVRG等算法,將動量加速思想[1]和自適應(yīng)學(xué)習(xí)率方法相結(jié)合,旨在在大多非凸優(yōu)化問題上,可通過很少的計算和訓(xùn)練的內(nèi)存成本,來提高訓(xùn)練穩(wěn)定性,表現(xiàn)出很好的泛化能力。第二種方法采用分布式訓(xùn)練的策略,將模型或數(shù)據(jù)部署在不同設(shè)備上,如dbs-sgd[2]等算法,在數(shù)據(jù)較多或者模型較大時使用,可以有效地提高機器學(xué)習(xí)模型訓(xùn)練的效率。
根據(jù)已有的知識,本文簡單介紹梯度下降原理思想,實驗對比經(jīng)典的梯度下降優(yōu)化算法,和介紹其最新領(lǐng)域的研究進展。
1梯度下降法
相比于最新的深度學(xué)習(xí)優(yōu)化算法,梯度下降算法可以說是最初的起點。要實現(xiàn)梯度下降法的思想是需要不停地進行迭代,當(dāng)損失函數(shù)的值小于一超參數(shù)閾值后,結(jié)束算法,這個時候梯度下降達到了最優(yōu)值,由以下算法給出:
其中,[θt+1]表示第t+1時間步的參數(shù)值,[θt]表示第t時間步的參數(shù)值,[gt]表示第t時間步的梯度,[η]表示學(xué)習(xí)率。
1.1梯度下降法框架
梯度下降法由更新訓(xùn)練樣本數(shù)據(jù)的規(guī)模展現(xiàn)了三種不同的形式:批量梯度下降法(batch gradient decent,BGD)、隨機梯度下降法(Stochastic gradient descent,SGD)、小批量隨機梯度下降法(Mini-batch gradient descent,MBGD):
針對批量梯度下降法,思想是將該整批訓(xùn)練數(shù)據(jù)用于迭代計算,雖然最終會緩慢訓(xùn)練至最小值,但是每次訓(xùn)練都會產(chǎn)生大量冗余計算。對比這個不足,隨機梯度下降法通過一次執(zhí)行一次更新的策略進行了改進。但是由于隨機梯度下降法抽取數(shù)據(jù)中的樣本的隨機性,導(dǎo)致每次更新方向的不確定,執(zhí)行頻繁更新會產(chǎn)生振蕩。但從全局來看,隨著迭代次數(shù)的增加,還是會接近最小值。小批量梯度下降采取了BGD和SGD的優(yōu)點,沒有用整批訓(xùn)練數(shù)據(jù)或隨機抽取的單個樣本,而是通過每次小部分的隨機樣本來執(zhí)行迭代的策略。
1.2梯度下降法帶來的問題
雖然隨機梯度下降法是一種能力很強的算法,但面對各種應(yīng)用場景,仍需要進一步地擴展和增強。主要表現(xiàn)在以下4個方面:
(1)選擇一個合適的學(xué)習(xí)率對訓(xùn)練過程有非常大的影響。學(xué)習(xí)率太小訓(xùn)練會減慢收斂速度,增加消耗時長;學(xué)習(xí)率太高在訓(xùn)練趨于平緩時難以收斂至最優(yōu)值,會導(dǎo)致過大的振蕩性;
(2)每次模型參數(shù)更新使用相同的學(xué)習(xí)率。若數(shù)據(jù)樣本表現(xiàn)出不同頻率的特征,不希望將所有特征更新到相同的程度;
(3)學(xué)習(xí)率調(diào)整策略受限于預(yù)先指定的調(diào)整規(guī)則;
(4)高度非凸的損失函數(shù)的優(yōu)化過程,訓(xùn)練會陷入眾多次優(yōu)的局部最小值或鞍點。
針對這4個方面的問題,國內(nèi)外許多學(xué)者做了大量的改進和擴展,取得了比較好的成果。
2梯度下降優(yōu)化算法研究進展
對不同的梯度下降優(yōu)化算法而言,研究的核心差異在于確立尋優(yōu)的下降方向和學(xué)習(xí)率調(diào)整策略。D. Im等由嚴(yán)密的實驗論證表明,不同的優(yōu)化算法會選擇不同的尋優(yōu)下降方向,最終達到了完全不同的局部次優(yōu)。至此圍繞第一節(jié)中分析的SGD算法存在的一些問題,研究者提供了許多方案,嘗試從不同的方面對SGD進行改造,歸結(jié)起來改進方向主要分為以下兩個方面。
2.1基于動量和方差縮減
為了解決SGD在局部最優(yōu)解的振蕩性,代表性的算法有帶動量的隨機梯度下降法(SGD with momentum,SGDM)等。特點是在取最小值過程中,動量加速思想能快速收斂。不僅在目標(biāo)參數(shù)在局部最小值來回振蕩的時候,使得更新幅度變大,跳出鞍點,也能在梯度改變方向的時候,能夠減少更新,抑制振蕩從而加快收斂。由以下算法給出:
其中,β表示動量因子,[νt]表示第t時間步的動量,[νt-1]表示第t-1時間步的動量。涅斯捷羅夫梯度加速(Nesterov Accelerated Gradient,NAG)是對動量機制的改進,用目標(biāo)函數(shù)二階導(dǎo)數(shù)的梯度近似值更新參數(shù),有著更快的收斂速度,劉宇翔[3]等設(shè)計了一種基于NAG算法的投影次梯度方法,可以在保持收斂性的同時較快地達到穩(wěn)定學(xué)習(xí)的精度。實驗驗證了理論分析的正確性及非精確方法的性能。
由于SGD每次隨機更新參數(shù)來估計梯度,雖然大大減少了計算代價,但也正是如此,在訓(xùn)練后期對梯度估計的噪聲讓它無法進一步收斂。為此解決的代表性算法有隨機方差縮減梯度法(Stochastic Variance Reduction Gradient,SVRG)等,謝濤[4]等在方差消減思想的基礎(chǔ)上,設(shè)計了分布式實現(xiàn)算法DisSAGD:采用自適應(yīng)采樣策略和動量加速思想,加快了收斂速度,在分布式集群中可以獲得近線性的加速。宋杰[5]等在訓(xùn)練過程中使用小批量樣本代替全部樣本,進行平均梯度計算的同時批量減數(shù)更新,得到了基于方差縮減的BSUG算法, 通過對各算法的實驗對比,算法表現(xiàn)出了良好的穩(wěn)定性。下表1對基于動量和方差縮減的隨機梯度下降優(yōu)化算法進行歸納整理。
2.2基于自適應(yīng)學(xué)習(xí)率
為了解決非凸目標(biāo)函數(shù)陷入局部次優(yōu)的問題和進一步提高了算法的收斂速度。代表性的算法有AdaGrad、Adadetla、RMSprop、Adam等。自適應(yīng)學(xué)習(xí)率的優(yōu)化方法在訓(xùn)練較深復(fù)雜的神經(jīng)網(wǎng)絡(luò)上,會得到更好的收斂性。
與自適應(yīng)學(xué)習(xí)方法相比,SGD的一個缺點是,我們在所有參數(shù)中使用單一的學(xué)習(xí)率,并且該學(xué)習(xí)率在整個培訓(xùn)過程中是固定的。理想情況下,更新頻率越高的參數(shù)學(xué)習(xí)率越低,更新頻率越低的參數(shù)學(xué)習(xí)率越高。至此,Dean et al.提出了AdaGrad算法,算法由下:
其中,[θt+1,i]表示第i個參數(shù)在第t+1時間步的參數(shù)值,[θt,i]表示第i個參數(shù)在第t時間步的參數(shù)值,[ε]表示避免被零除的平滑項。
不同于AdaGrad不斷的累加梯度的平方,產(chǎn)生訓(xùn)練中后期使得學(xué)習(xí)率在達到最小值前就變得太小而梯度消失的問題。Adadelta和RMSProp另辟蹊徑。其中,Adadelta算法只累加固定大小的項,對其進行衰減平均遞歸計算,大大避免AdaGrad后期更新系數(shù)過小的問題。而RMSprop可以算作Adadelta的一個特例,引入了泄露機制,使得保留的歷史梯度信息每次都損失一部分,從而使得更新步長不再是單調(diào)遞減。
Adam算法有著所需要訓(xùn)練占用的內(nèi)存少,收斂快速等特點,集齊了上述自適應(yīng)學(xué)習(xí)方法的優(yōu)點,是主流的自適應(yīng)優(yōu)化方法。這類經(jīng)典的自適應(yīng)學(xué)習(xí)率算法在實驗中訓(xùn)練效果優(yōu)異,但與帶動量的隨機梯度下降相比,Adam、Adadelta、RMSprop 等自適應(yīng)性優(yōu)化算法的推廣效果不佳。這是因為自適應(yīng)學(xué)習(xí)方法有兩個缺點:泛化性能差于SGDM和非收斂性的問題。最新研究進展以Adam算法為例,以這兩個方面學(xué)者提出了很多變體優(yōu)化算法:
(1)為了解決Adam的收斂性在簡單凸優(yōu)化上的不穩(wěn)定的問題,Sashank J. Reddi提出了AMSGrad算法,此算法對過去梯度的“長期記憶”,經(jīng)過實驗論證可以修復(fù)收斂問題。Liyuan Liu等提出了Radam算法,通過在訓(xùn)練的前幾個階段使用較小的學(xué)習(xí)率,可以減少算法的不穩(wěn)定,在經(jīng)過圖像分類等大量實驗結(jié)果驗證了該Radam算法的有效性和魯棒性。
(2)為了增強Adam的泛化能力,Liangchen Luo等提出了AdaBound,該算法將利用學(xué)習(xí)率的動態(tài)邊界來實現(xiàn)從自適應(yīng)方法到SGD的逐漸平滑過渡。大量實驗結(jié)果表明,AdaBound可以消除自適應(yīng)方法和SGD之間的泛化差距,同時在訓(xùn)練初期保持較高的學(xué)習(xí)速度。特別是在復(fù)雜的深層網(wǎng)絡(luò)上改進顯著。Ilya Loshchilov提出了AdamW算法,通過從梯度更新中將權(quán)重衰減分離出來,修改Adam中權(quán)重衰減的特有實現(xiàn)方法。實驗證明,該算法大幅提高了Adam的泛化性能,可以與SGDM在圖像分類數(shù)據(jù)集上競爭。
下表2是對基于自適應(yīng)學(xué)習(xí)率的隨機梯度下降優(yōu)化算法歸納整理:
3優(yōu)化算法實驗對比
實驗評估了Adagrad、Adadelta、RMSprop、Adam、Adamax、NAdam自適應(yīng)學(xué)習(xí)算法。學(xué)習(xí)率調(diào)整0.01,以32的批量進行訓(xùn)練,以訓(xùn)練10輪為標(biāo)準(zhǔn),使用了MNIST-MLP、cifar10-VGG16的設(shè)置,在訓(xùn)練前期內(nèi),在兩個模型架構(gòu)的性能上對訓(xùn)練集和測試集的損失值、精度值和運行時間進行對比。
3.1實驗設(shè)置
MNIST-MLP:MNIST包含訓(xùn)練集為 60000 張 28×28 像素灰度圖像,測試集為 10000 同規(guī)格圖像,有10 類數(shù)字標(biāo)簽。MLP神經(jīng)網(wǎng)絡(luò)包括三層:輸入層、隱含層和輸出層,MLP神經(jīng)網(wǎng)絡(luò)不同層之間是全連接的。
Cifar10-VGG16:CIFAR10包含60000個32×32×3圖像,帶有50000個訓(xùn)練集和10000個測試集圖像,有10類數(shù)字標(biāo)簽。VGG16是一個16層深的卷積神經(jīng)網(wǎng)絡(luò),廣泛使用3×3卷積濾波器。
3.2實驗結(jié)果對比
下面的兩種實驗設(shè)置表3和表4顯示中,Adamax算法的檢測性能最優(yōu)。雖然Adam是最流行的自適應(yīng)學(xué)習(xí)率算法,但很明顯,在這種經(jīng)典的圖像分類識別實驗的訓(xùn)練前期對比中,不管在簡單的MLP網(wǎng)絡(luò)還是在較深層網(wǎng)絡(luò)VGG16中,Adam的性能并不是最好的,雖然消耗的訓(xùn)練時長占優(yōu),但是訓(xùn)練集和驗證集的精度值落后于Adagrad、Adamax、NAdam算法。Adagrad訓(xùn)練前期檢測精度增長迅速,隨著訓(xùn)練次數(shù)的增加會趨于平緩甚至梯度消失;NAdam在Adam算法基礎(chǔ)上使用了動量加速思想,其收斂速度略優(yōu)于Adam算法,但是兩種主干網(wǎng)絡(luò)下的運行時間卻是最長的。而Adamax顯然是在對比實驗里性能最好的,尤其在深層的神經(jīng)網(wǎng)絡(luò)里,表現(xiàn)出有良好的運行時長消耗和較快的收斂速度。
4 結(jié)論
本文對梯度下降算法做了簡單的描述,介紹了其3種變體框架,并分析和總結(jié)了經(jīng)典的梯度下降優(yōu)化算法的優(yōu)缺點。其中為代表的是SGDM和Adam算法,它們算法的缺陷成了后續(xù)研究者的研究動機,因此,在這兩個算法的基礎(chǔ)上,又出現(xiàn)了優(yōu)秀的改進算法,并對現(xiàn)有的改進優(yōu)化算法進行了概述。闡述了各種SGD改進算法解決的問題以及他們各自的優(yōu)缺點。最后把六種典型的SGD改進算法實驗對比進行驗證。未來優(yōu)化算法的研究方向我覺得仍然是在學(xué)習(xí)率這個超參數(shù)上做文章,用來提高算法的收斂速度,跳過局部次優(yōu)和鞍點,因此如何自適應(yīng)選擇合適的學(xué)習(xí)率仍是一大熱點研究方向;其次是在提升算法的泛化能力,在真實的數(shù)據(jù)集上仍表現(xiàn)出良好的性能。
參考文獻:
[1] Qian N.On the momentum term in gradient descent learning algorithms[J].Neural Networks,1999,12(1):145-151.
[2] 紀(jì)澤宇,張興軍,付哲,等.分布式深度學(xué)習(xí)框架下基于性能感知的DBS-SGD算法[J].計算機研究與發(fā)展,2019,56(11):2396-2409.
[3] 劉宇翔,程禹嘉,陶卿.梯度有偏情形非光滑問題NAG的個體收斂性[J].軟件學(xué)報,2020,31(4):1051-1062.
[4] 謝濤,張春炯,徐永健.基于歷史梯度平均方差縮減的協(xié)同參數(shù)更新方法[J].電子與信息學(xué)報,2021,43(4):956-964.
[5] 宋杰,朱勇,許冰.批量減數(shù)更新方差縮減梯度下降算法BSUG[J].計算機工程與應(yīng)用,2020,56(22):117-123.
【通聯(lián)編輯:聞翔軍】