姬壯偉
(長治學院計算機系,山西長治 046011)
深度學習是近年來發展十分迅速的研究領域,并且在人工智能的很多子領域都取得了巨大的成功,從移動端的人臉識別,到alphago機器人擊敗人類職業圍棋選手,現代人的生活已經和人工智能密切相關。
人工神經網絡是人工智能研究領域最熱的深度學習模型,由早期的神經科學家受到人腦神經系統的啟發構造而成,該網絡是指由很多人工神經元構成的網絡結構模型,這些人工神經元之間的連接強度便是可學習的參數。隨著人工神經網絡越來越復雜,數據越來越多,計算量急劇增加,我們需要在神經網絡參數學習上花費的時間也就越來越多,可是現實中往往為了解決復雜的問題,復雜的網絡結構和大數據又是不可避免的,神經網絡的優化器便由此而生,通過優化算法加速神經網絡的訓練,加速參數的學習。
Gradient Descent,即梯度下降算法,由Cauchy,Augustin 于1847 年首次提出,依據數學理論解決了神經網絡中參數學習的方向問題,基于此算法,往后的科研人員做出了許多優化。在1951 年,SGD 算法的早期形式被提出,隨機梯度下降的參數學習方法被廣泛應用,由于SGD 學習效率的局限,在1964 年,由Polyak 提出了Momentum 的優化算法,此算法利用給學習參數附加慣性值,大大提高了參數學習的效率。在神經網絡興起的這幾年中,優化算法也從沒停止發展,2011 年John Duchi 提出了通過優化學習率參數來提高學習效率的AdaGrad 優化算法,2015年Diederik P.Kingma 和Jimmy Lei Ba 提出的Adam 優化算法集合了Momentum 和AdaGrad 算法的優點,進一步提高了學習效率。在接下來的幾年中,相繼提出了AdaMax、Nadam、SGDW、Adabound、RAdam 等優化算法。
總體來說,目前的優化算法皆是從調整學習率和調整梯度方向兩方面來優化訓練速度,各優化算法匯總如表1所示。

表1 神經網絡常用優化算法匯總
SGD[1-2]即隨機梯度下降,是梯度下降算法的變種。批量梯度下降算法在梯度下降時,每次迭代都要計算整個訓練數據上的梯度,當遇到大規模訓練數據時,計算資源需求多,數據通常也會非常冗余。隨機梯度下降算法則把數據拆成幾個小批次樣本,每次只隨機選擇一個樣本來更新神經網絡參數,如圖1所示。

圖1 SGD優化算法示意圖
實驗表明,每次使用小批量樣本,雖然不足夠反應整體數據的情況,但卻很大程度上加速了神經網絡的參數學習過程,并且還不會丟失太多準確率。
動量是物理學中的概念,是指物體在它運動方向上保持運動的一種趨勢,Momentum 方法[3-4]則將其運用到神經網絡的優化中,用之前累計的動量來替代真正的梯度,計算負梯度的“加權移動平均”來作為參數的更新方向,其參數更新表達式為

其中ρ為動量因子,通常設為0.9,α 為學習率。這樣,每個參數的實際更新差值取決于最近一段時間內梯度的加權平均值,當某個參數在最近一段時間內的梯度方向不一致時,其真是的參數更新幅度變小;相反,當在最近一段時間內的梯度方向都一致時,其真實的參數更新幅度變大,起到加速作用,相比SGD,能更快的到達最優點。
在標準的梯度下降算法中,每個參數在每次迭代時都使用相同的學習率,AdaGrad 算法[5]則改變這一傳統思想,由于每個參數維度上收斂速度都不相同,因此根據不同參數的收斂情況分別設置學習率。
AdaGrad 算法借鑒正則化思想,每次迭代時自適應的調整每個參數的學習率,在進行第t次迭代時,先計算每個參數梯度平方的累計值,其表達式為

其中⊙為按元素乘積,gt是第t次迭代時的梯度。然后再計算參數的更新差值,表達式為

其中α 是初始的學習率,ε 是為了保持數值穩定性而設置的非常小的常數。
在Adagrad 算法中,如果某個參數的偏導數累積比較大,其學習率相對較小;相反,如果其偏導數累積較小,其學習率相對較大。但整體是隨著迭代次數的增加,學習率逐漸縮小。
RMSprop 算法[6-7]對AdaGrad 算法進行改進,在AdaGrad 算法中由于學習率逐漸減小,在經過一定次數的迭代依然沒有找到最優點時,便很難再繼續找到最優點,RMSprop算法則可在有些情況下避免這種缺點。
RMSprop 算法首先計算每次迭代梯度gt平方的指數衰減移動平均,

其中β為衰減率,然后用和AdaGrad 同樣的方法計算參數更新差值,從表達式中可以看出,RMSprop算法的每個學習參數不是呈衰減趨勢,既可以變小也可以變大。
Adam算法[8-9]即自適應動量估計算法,是Momentum 算法和RMSprop 算法的結合,不但使用動量作為參數更新方向,而且可以自適應調整學習率。
Adam 算法一方面計算梯度平方的指數加權平均(和RMSprop 類似),另一方面計算梯度的指數加權平均(和Momentum法類似),其表達式為

其中β1和β2分別為兩個移動平均的衰減率,Adam算法的參數更新差值為

Adam 算法集合了Momentum 算法和RMSprop 算法的優點,因此相比之下,Adam 能更快更好的找到最優點,迅速收斂。
使用由Facebook 開源的Pytroch[10]神經網絡框架,該框架是基于Python 的張量庫,近幾年和Tensorflow 成為該研究領域的主流框架,并且通過Python 的Matplotlib 可視化工具包將實驗結果展示出來。用神經網絡領域典型的回歸問題來測試我們不同優化算法的參數學習效率和收斂速度。
訓練數據為5000 個偽數據點,由平方曲線的正太上下浮動生成,訓練時的批量大小為64,學習率為0.01,如圖2所示。

圖2 實驗數據展示圖
每個優化算法使用的都是同一個神經網絡,本實驗中搭建的神經網絡的輸入層包含1 個輸入神經元,共兩層隱藏層,每層隱藏層包含20 個神經元,輸出層包含1 個輸出神經元,每層神經網絡這件用RELU激活函數進行激活,神經網絡搭建好后,用不同的神經網絡優化算法對同一神經網絡進行參數優化,對比不同優化算法的參數收斂速度,以及訓練誤差,并通過Matplotlib 可視化工具對結果進行可視化展示,如圖3所示。

圖3 不同優化算法收斂展示圖
圖3 中橫軸為訓練時間線,縱軸為誤差率,在同一圖中展示了不同的優化算法在同一神經網絡的參數收斂速度,以及不同優化算法的誤差率。
通過用不同優化算法對同一神經網絡的多次訓練,可以看出,幾乎沒有任何加速效果的SGD 優化算法參數收斂速度最慢,且誤差率最高,而將SGD 改良后Momentum 則由于動量的存在,相比之下參數更快的收斂,誤差達到一個穩定的低值,而RMSprop 和Adam 是進一步優化算法升級,明顯收斂速度逐步增加,誤差率更早達到穩定狀態。
優化算法對神經網絡的學習效率影響很大,如今的優化算法從調整學習率和調整梯度兩個方向,來優化訓練速度,在神經網絡處理的不同數據中,要多次嘗試選擇合適的優化器才能讓神經網絡的性能最大化。