?

深度學習常用優化算法研究

2019-07-19 01:30
網絡安全與數據管理 2019年7期
關鍵詞:動量集上梯度

賈 桐

(華北計算機系統工程研究所,北京 100083)

0 引言

隨著人工智能技術的盛行,深度學習越來越受到學術界和工業界的關注,而優化算法的選擇和使用則直接決定了一個深度學習任務的成敗[1]。本文將依次介紹深度學習領域常用的梯度下降和其啟發式變種優化算法,從理論角度剖析每種算法的設計思想和原理,分析算法的優缺點,并在實際數據集上對比不同優化算法的性能,最后對深度學習任務中優化算法的使用技巧和注意事項進行總結。

1 深度學習建模

1.1 優化建模

深度學習[2](deep learning)本質為一個無約束優化問題,可以將其建模為一個最小化期望風險(expected risk)的問題,形式化表示如下:

minJ(θ)εD~p(x,y)L(f(x;θ)

(1)

其中,x和y分別為樣本的特征向量和監督值;f為模型的推理函數,θ為該推理函數的參數,形式固定;L為損失函數,一般情況下回歸問題的損失函數定義為平方誤差(mean squared error),分類問題的損失函數定義為交叉熵(cross entropy)。

通常情況下假設所有樣本滿足獨立同分布的條件,因此目標函數可以定義為所有訓練樣本上的經驗風險[3](empirical risk):

minJ(θ)=εD~p(x,y)L(f(x;θ),y)

(2)

因此求解一個深度學習模型的最優解,可等價地轉換為求解式(2)表示的一個無約束優化問題。

1.2 優化策略

一般而言,考慮到深度學習龐大的參數量和高度非凸性,通常采用迭代式、基于梯度信息的優化求解策略。選擇迭代式的算法,使得可以持續優化目標函數,逐步逼近并收斂于最優解所在位置。而采取梯度信息而不計算Hessian矩陣,從理論角度,算法迭代的每一步都使用采樣數據進行優化,因此具有很強的隨機性,所以此時采用更精確的方式計算優化方向并無太大意義;從工程角度,由于深度學習模型本身巨大的參數量,計算Hessian矩陣會帶來非常巨大的時間和空間開銷,甚至實際設備資源和任務實效要求根本無法滿足支持計算Hessian[4]。

因此一般而言,只計算目標函數關于訓練參數的梯度,并且在具體每一步優化迭代中,會隨機從所有訓練樣本中抽樣部分樣本用于當前梯度計算,即選擇批數據量。

1.3 批數據量選擇

以最基本的梯度下降(gradient descent)優化算法為例,根據批數據量大小選擇的不同,優化算法可分為批梯度下降算法(batch gradient descent)、隨機梯度下降算法(stochastic gradient descent)和迷你批梯度下降算法(mini-batch gradient descent)。批梯度下降算法在每一步迭代過程中使用全部訓練樣本,因此參數更新方向最穩定,但是時間開銷和空間開銷最大;與之恰恰相反,隨機梯度下降算法在每一步迭代過程中只使用隨機抽樣的一個樣本,因此時間和空間開銷都是最小的,但是由于樣本的隨機性,參數的更新方向是最不穩定的;迷你批梯度下降算法則是二者的折中,算法每一次迭代隨機從n個樣本中采樣m個樣本,因此該方式中和了批梯度下降和隨機梯度下降的優勢和劣勢,使得在空間開銷和時間開銷合理的情況下,獲得相對較為穩定的參數更新方向。注意其中迷你批量m的大小為優化算法的超參數,一般而言當樣本分布的隨機性強時,m可設置為相對較大的值以平穩化隨機性[5]。

在實際優化問題中一般均采用迷你批梯度下降算法及其變種。

2 基于梯度計算的優化算法

2.1 隨機梯度下降

隨機梯度下降[6](Stochastic Gradient Descent,SGD)是最基本的基于梯度的優化算法,并且是其他一階優化算法的基礎。在每一步迭代中,選擇最優優化方向的最直觀方式為:沿最陡峭的方向,即最速下降的方向進行迭代更新,因此隨機梯度下降算法又被稱為最速下降(steepest descent)算法,而這個方向就是梯度(最速上升方向)的反方向。因此算法每一步迭代的更新公式如下:

(3)

θ←θ-η⊙g

(4)

其中,η表示當前迭代步的學習率(learning rate)。

2.2 動量法

隨機梯度下降算法在每一步優化方向更新時只使用了當前步隨機采樣樣本的信息,因此具有相對較強的隨機性,從而使得優化方向一直“震蕩”,同時由于震蕩的原因,收斂速度相對較慢,因此引入了動量優化算法[7](Momentum)。該算法在每一步迭代過程中,保留上一輪更新后的參數動量,并加入該輪的梯度,從而降低算法在收斂過程中的震蕩程度,同時提高收斂速度。迭代更新公式如下:

(5)

v←α·v-η·g

(6)

其中,α為動量累積系數,一般設置為0.9,動量算法相當于累積過去最近1/(1-α)步更新方向。

2.3 Nesterov動量法

Nesterov[8]動量算法是2.2節所述動量算法的更新,該算法與Momentum唯一的不同在于,Nesterov算法會先根據當前位置預判前方地形,從而移動到一個新的預估位置,然后在該位置計算梯度,最后將所得梯度與歷史累積動量加權后的方向作為真正更新方向。因此算法迭代更新公式如下:

(7)

(8)

v←α·v-η·g

(9)

θ←θ+v

(10)

對于式(7)、式(8)可以理解為優化過程中順應大勢所趨,在主流的方向上先行邁出一步,因此在一定程度上會加速收斂速度。

2.4 AdaGrad

上述動量法和Nesterov動量法雖然相較于SGD優化了更新方向,但是對于學習率卻沒有起到調節作用,因此在實際深度學習的優化過程中,存在以下問題:(1)在每一步迭代更新中,學習率的大小需要人為設置。學習率太小導致收斂速度太慢,學習率太大又會導致在損失函數最小值點附近波動甚至發散,因此找到一個合適的學習率十分困難。(2)若想要調節學習率,就得人為設置學習率衰減策略,然而在訓練過程中,人為設置衰減策略的學習率不能夠自動匹配數據的特征。(3)所有參數維度的更新都使用相同的學習率。如果數據非常稀疏,并且特征的頻率大為不同,那么不應該對所有的特征使用相同的學習率,而應對出現頻率低的特征使用相對較大的學習率以保障學習充分,對出現頻率高的特征使用相對較小的學習率以防止過度學習。(4)很難避免鞍點(saddle point)。因此解決辦法是使用自適應學習率的優化算法(adaptive learning rate optimization algorithm)。

AdaGrad[9]就是最基本的自適應學習率優化算法,其更新方式如下:

(11)

r←r+g⊙g

(12)

(13)

θ←θ+Δθ

(14)

該算法利用變量r累積二階動量,從而使得更新頻繁的維度擁有較大的累積動量平方值,因此實際更新的學習率較小,從而避免了過度更新;而總是得不到更新的維度對應有較小的累積動量平方值,因此實際更新時會執行較大的學習率,從而保障了充分更新。

該算法雖然實現了不同維度上學習率自適應地調節,但是存在一個嚴重的問題:訓練后期更新速度停滯不前甚至終止更新。因為隨著動量平方的不斷累積,每一個維度r的對應值都不斷增大,導致每一個維度的學習率逐漸變小,從而當訓練到后期階段時,由于學習率過小使得訓練停滯甚至提前終止。因此為了解決這個問題,之后又出現了更為智能的優化算法,使得在任意特定維度上,隨著訓練階段的變換,學習率也可以進行增大縮小的自適應調節。

2.5 RMSProp

RMSProp[10]優化算法是對AdaGrad算法最直接的改進,參考于動量方法在累積動量上采用滑動平均,RMSProp在累積動量平方上采取滑動平均,從而避免了累積動量平方越來越大的問題,因此該算法只是將式(12)替換為了如下形式:

r←ρr+(1-ρ)g⊙g

(15)

于是該變量相當于累積過去最近1/(1-p)個迭代的動量,如果某一維度上變量相較于過去一直沒有得到有效充分的更新,那么其對應的累積動量平方值將會變小,因此學習率將會變大,這就是RMSProp算法可以使同一維度在不同時間段進行學習率自適應調節的原因。

2.6 Adam

Adam[11]算法為集大成于一身的優化方式,其對于優化方向的選擇采取了Momentum動量法的方式,對于學習率的選擇采取了RMSProp的方式。在此基礎上,該算法還對一階動量累積和二階動量累積進行了校正,近似為對期望的無偏估計。算法的迭代更新公式如下:

(16)

t←t+1

(17)

s←ρ1s+(1-ρ1)g

(18)

r←ρ2r+(1-ρ2)g⊙g

(19)

(20)

(21)

(22)

θ←θ+Δθ

(23)

3 算法應用選擇策略

實際應用算法時有以下選擇策略:

(1)算法孰優孰劣尚無定論。一般而言入門建議選擇Nesterov優化算法或Adam優化算法。

(2)選擇自身熟練的優化算法。這樣在優化過程中可以更熟練地利用經驗進行超參數調優,大大減少模型優化過程帶來的意外性和不確定性。

(3)在訓練前期選擇較大批數據量,在訓練后期選擇較小批數據量。批數據量較大時,數據方差理論上較小,因此計算所得梯度更加穩定,從而使得在前期的訓練優化中少走彎路,以較為平穩的方式到達最優點附近;在訓練后期選擇相對較小的批數據量可以充分利用數據的不穩定性,增強隨機震蕩的程度,從而更有可能跳出鞍點。

(4)在選擇優化算法前需要先充分了解數據,如果數據維度之間的分布均勻,那么推薦使用譬如SGD的非自適應的算法;而當數據非常稀疏時,則需優先考慮譬如Adam等自適應優化算法。

(5)需要根據階段需求選擇優化算法。在模型設計實驗階段,因為需要快速驗證新模型的效果,所以可先使用Adam算法進行快速實驗;而在模型上線或待發布階段,因為需要追求極致的效果,所以可用精調的SGD優化算法或動量算法進行模型的極致優化。

(6)先用小數據集進行實驗。因為一般而言數據都是從原始特征空間中抽樣而得到的,因此優化算法的收斂速度與數據集的大小關系不大[12]。因此可以先利用一個具有代表性的小數據集進行實驗,測試得到最好的優化算法,并通過參數搜索尋找最優的優化超參數。

(7)考慮不同算法的組合。實際優化的時候,可以先采取Adam優化算法進行快速逼近收斂,而后在某個特定條件下切換至SGD算法進行精確搜索。

(8)訓練數據集一定要充分打散。這樣在使用自適應算法時,可以避免因為學習過度或不足,導致優化方向出現偏差的問題。

(9)訓練過程中需要持續監控訓練集和驗證集。具體是監控目標函數值以及一系列評價指標。其中監控訓練集是為了保障模型進行充分、正確的訓練,即優化方向正確,學習率適宜充足;而監控驗證集是為了避免模型訓練過擬合,當出現訓練集上得分很好而驗證集上評價準則得分過低時,需要及時終止訓練過程,重新評估數據、模型、目標函數和優化算法,制定新的學習策略。

(10)為訓練過程制定合適的學習率衰減策略。因為需要保證訓練前期的學習率足夠大,快速收斂,而后期學習率相對較小,從而避免不收斂甚至發散的問題。具體的制定策略有很多,譬如每遍歷N遍數據集就衰減一次。一般采取余弦周期學習率衰減策略,有助于跳出鞍點。

4 實驗與結果分析

4.1 數據集介紹

實驗中使用MNIST[13]數據集,該數據集為全球最權威的手寫體識別數據集,由美國郵政系統開發,手寫內容為0~9阿拉伯數字,內容采集于美國人口統計局的員工和高中生。

4.2 實驗設置

實驗選取其中的37 000張圖片作為訓練集,5 000 張圖片作為測試集,模型選擇經典的LeNet[14],所有優化算法的初始學習率均設置為0.001 5。

訓練階段,數據在進入訓練前均已充分打散,同時在所有優化算法的訓練中批次讀入順序相同。每種優化算法對應的模型使用相同的初始化方式和種子,每300步迭代記錄一次訓練集上的損失函數值,所有模型總訓練迭代次數均為6 000步。

測試階段,選擇針對所有類別的準確率作為評價指標,利用每種優化算法對應的訓練好的模型,分別在相同測試集上進行測試,得到對應的準確率評分。

4.3 實驗結果

4.3.1 訓練集上交叉熵損失結果

六種優化算法在訓練集上的交叉熵損失記錄如圖1所示,可見Adam優化算法和RMSProp優化算法擁有最快的收斂速度;SGD算法的收斂速度最慢。

圖1 算法訓練損失對比

4.3.2 測試集上準確率結果

六種優化算法在相同測試集上的損失及準確率評價指標對比結果如表1所示。RMSProp優化算法的泛化性能最佳;綜合在訓練集上的表現,SGD算法存在欠擬合的問題,而AdaGrad存在易過擬合的問題。

4.4 結果分析

根據上述實驗結果可得,SGD算法的收斂速度最慢;Momentum動量和Nesterov動量算法加速了SGD的收斂速度;AdaGrad算法由于梯度平方的不斷累積導致學習率不斷變小,影響了學習效率,因此收斂效果不如動量算法;RMSProp和Adam算法擁有最佳的收斂速度,同時RMSProp算法在測試集上擁有最佳的泛化效果。

表1 六種優化算法驗證集評價指標對比

5 結論

通過對深度學習各種常用優化算法的理論分析和實驗,可得各種優化算法針對學習率和更新方向進行了啟發式設置。動量算法對更新方向進行了優化,提升了收斂速度,但需要精細設置超參數;自適應優化算法對學習率和方向均進行了優化,超參數設置相對簡單,擁有較快的收斂速度,普遍作為首選優化算法,且特別適用于稀疏數據。

猜你喜歡
動量集上梯度
磁共振梯度偽影及常見故障排除探討
基于應變梯度的微尺度金屬塑性行為研究
關于短文本匹配的泛化性和遷移性的研究分析
基于互信息的多級特征選擇算法
應用動量守恒定律解題之秘訣
原子物理與動量、能量的結合
動量相關知識的理解和應用
一個具梯度項的p-Laplace 方程弱解的存在性
基于數字虛擬飛行的民機復飛爬升梯度評估
師如明燈,清涼溫潤
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合