當我們在談論 Deep Learning:DNN 與它的參數們(貳)

本系列意在長期連載分享,內容上可能也會有所增刪改減;

因此如果轉載,請務必保留源地址,非常感謝!

知乎專欄:當我們在談論數據挖掘

Gradient Descent Optimization

Mini-batch SGD

在當我們在談論 Deep Learning:DNN 與它的參數們(壹)中我們介紹過 Mini-batch SGD,它是 GD 與 SGD 的一個折中選擇,有著較好的收斂效果與速度。在此,我們回顧一下此演算法的步驟

對於theta=theta-epsilon hat g,我們可以這樣理解:某次迭代的參數初始位置為theta,該參數以勻速-epsilon hat g發生位移,時長為單位時間,得到的新的位置,即新的theta。由於hat g是根據訓練樣本的一個 Batch 求得的,所以變化可能會比較劇烈,也容易收雜訊干擾,從而減慢收斂速度。

Momentum

為了提高 Mini-batch SGD 的收斂速度,利用動量(Momentum)來加速收斂的方法被提了出來,其步驟如下

可以看出,與 Mini-batch SGD 的區別,其中一個就是theta=theta+v這個步驟。即,參數改變的速度變成了v,而不再是-epsilon hat g。同時,v=alpha v-epsilon g,即此時-epsilon g可以看作是速度v的加速度,且valpha發生衰減。

於是有:

  1. 參數以速度v發生改變,v的加速度是-epsilon g。此時,每一個 Batch 的g的改變會以加速度的方式影響v,而v不會再突變(比如v方向的劇烈改變),這就帶來了一定的抗雜訊能力

  2. 當速度v與加速度-epsilon g長期方向一致時,即使-epsilon g比較小,速度v也會逐漸加快,從而加快收斂速度

  3. 同時,可以通過設置alpha來改變前期梯度g對當前v的影響。alpha越小,則前期的梯度g對現在的速度v的影響越小。alpha的含義可以類別成運動時的摩擦力,使參數不會無止境的改變下去。

Nesterov Momentum

Nesterov Momentum (Sutskever I, Martens J, Dahl G, et al. On the importance of initialization and momentum in deep learning. 2013.)是對 Momentum 方法的一種修改,又稱為 NAG(Nesterov Accelerated Gradient),其步驟如下

可以看出,Nesterov Momentum 是先對新的參數進行了預估,theta=theta+alpha v,再進行梯度的計算。雖然只是進行了細微的改變,Nesterov Momentum 在效果上比 Momentum 卻有著顯著的提升。關於對這種提升原因的分析,可以參考比Momentum更快:揭開Nesterov Accelerated Gradient的真面目,這裡就不再贅述了。

AdaGrad

SGD 在參數更新的過程中,經常需要對epsilon進行衰減,原因也是很直觀的:前期參數距離最優解比較遠,需要較大的更新速度;而當到達了最優解附近,則需要較小的速度以精細搜索最優解。

而以上介紹的方法,它們的學習率epsilon都需要提前設定。如果想需要對epsilon進行衰減,衰減的策略也需要自己去設置。對於多維數據,不同維度的數據還需要考慮是否需要不同的epsilon衰減策略。於是,有學者在 Mini-Batch SGD 的基礎上提出了自適應衰減epsilon的方法(Duchi J, Hazan E, Singer Y. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. 2011.),其步驟如下

可以看出,它與 Mini-Batch SGD 的區別在於:epsilon在更新的過程中一直在自適應的衰減。學習率epsilon衰減的幅度與該維度上梯度g的累計平方和成反比,即:如果某個維度上g一直較大,則該維度上的學習率epsilon衰減的較快;g較小,則該維度上的學習率epsilon衰減的較慢。

但按照《Deep Learning》的說法,在 DNN 的訓練中,AdaGrad 在某些模型上效果不錯,但並非全部。

RMSProp

RMSProp(Tieleman, T. and Hinton, G. Lecture 6.5 - rmsprop, COURSERA: Neural Networks for Machine Learning.2012)是 AdaGrad 的一種修改形式,用於改善 AdaGrad 在非凸場景效果不好的情況。RMSProp 的步驟如下

可以看出,RMSProp 與 AdaGrad 最大的區別就是在計算累計梯度時,多了一個衰減參數rho

AdaGrad 在計算累計梯度時,使用的是過去所有梯度的平方和。於是,在更新參數的過程中,如果某些迭代計算出的g使累計梯度太大,後續參數更新速度就會劇烈減少從而過早停止更新。

RMSProp 通過衰減參數rho,降低較為久遠的g的影響,從而改善了上述情況。由於其實踐中較好的效果,RMSProp 也是目前 Deep Learning 中最常用的優化方法之一。

RMSProp + Nesterov Momentum

當我們將 RMSProp 和 Nesterov Momentum 融合,也即同時考慮了自適應更新學習率,以及 Momentum 的思想,就有如下演算法

Adam

Adam 的全稱是 Adaptive Moment(Kingma, D. P., & Ba, J. L. Adam: a Method for Stochastic Optimization. 2015.),同樣也是一種融合了自適應學習率,以及 Momentum 思想的方法。其步驟如下

可以看出,Adam 就是在 RMSProp 的基礎上,又考慮了 Momentum。

由於rho_1, rho_2的設置近似1,Adam 中的s, r其實分別是梯度g的一階矩、二階矩的估計。因此,hat s/ hat r屬於[0,1],於是Delta theta也有了約束。按照原文的說法,這個性質可以幫助我們更好地調節epsilon;同時,《Deep Learning》中也提到,這使 Adam 對參數更加的魯棒。

Others

不得不說,Gradient Descent Optimization 這個課題在 Deep Learning 火熱起來後也越發熱鬧,各種方法絡繹不絕。其它的方法如 Adamax、Nadam 等等,有興趣的同學可以去進行更多的學習。而到底哪個方法最好,還是要根據實際場景選擇,Mini-batch SGD 可能效果已經滿足需求,而 RMSprop 是現階段比較常用的方法之一。

Dropout

Dropout 是 Hinton 在2014年提出的一種優化 DNN 的一種通用方法(Srivastava N, Hinton G, Krizhevsky A, et al. Dropout: a simple way to prevent neural networks from overfitting. 2014)。雖然作者在文章中並沒有對 Dropout 的原理進行太多的理論分析,但是他用大量的對比實驗證明此方法的有效性與效果的穩定性。而隨後,Dropout 也確實在實踐中被證明是非常簡單,且有效提高 DNN 效果的一種優化方法。(恩,這很 Deep Learning。。。所以很多老 ML 專家不喜歡 Deep Learning 論文其實是可以被理解的。)

接下來簡單介紹一下 Dropout 方法。

假設對於一般的 DNN,其結構如下。我們使用 Mini-batch SGD 的方式進行參數更新

此時,DNN 對應的 Feed Forward 的公式為

在訓練時,對於一次 Mini-batch,我們設定一個概率p,表示 DNN 中每個節點(包括輸入節點,以及 Hidden Layer 的節點)被保留的概率。也就是 DNN 中的每個節點,都會以1-p概率被移除。如下

與被移除的節相連的那些線在這次 Mini-batch 訓練中也會被移除,於是 DNN 可以被看作如下結構。對這個結構中的參數應用 Mini-batch SGD 進行更新,被刪除的結構對應的參數本次不更新。

將這種思想寫成公式,即 Feed Forward 公式變成如下。其中,r^{(l)}_j服從 Bernoulli 分布,即以p的概率為1,以1-p的概率為0。

在測試時,會使用初始的 DNN 結構,即

但是,每個節點對應的參數w需要乘以p,即W^{(l)}_{test}=pW^{(l)}

在文章中,作者給出p的建議值是:對於輸入層,p=0.8;對於 Hidden Layer,p=0.5

Dropout 可以看作是一種 Ensemble Learning 方法。Ensemble Learning 本質就是用同樣的數據去訓練不同的模型,然後進行融合;或者用不同的數據去訓練相同的模型,然後再進行融合。在 DNN 的訓練過程中,對於不同的 Epoch,相同的 Mini-batch,如果 Dropout 後的結構不同,那麼就對應第一種情況;整個訓練過程中,如果某兩次 Dropout 後的結構相同,而 Mini-batch 不同,那麼就對應第二種情況。所以,Dropout 也擁有 Ensemble Learning 的優點,即可以緩解 overfitting。

除此之外,Dropout 還有一些仿生學之類的解釋。不過我一般都覺得這只是學者們在賣萌,有興趣的同學可以參考原文。

尾巴

迄今為止,我們已經簡單介紹了幾種 DNN 超參數:Activation Function、Cost Function、Regularization 、Gradient Descent Optimization、Dropout。但是這些參數每個都非常不好選擇,是否有辦法能做到減少需要調節的超參數,使 DNN 更智能呢?下一篇,我們會介紹被譽為「one of the most exciting recent innovations in optimizing DNNs」的方法—— Batch Normalization 以及相關概念。

Reference

  1. 文中 PPT 截圖出自李宏毅老師的課件

本系列其他文章:

Supervised Learning:

當我們在談論 Deep Learning:DNN 與 Backpropagation

當我們在談論 Deep Learning:DNN 與它的參數們(壹)

當我們在談論 Deep Learning:DNN 與它的參數們(貳)

當我們在談論 Deep Learning:DNN 與它的參數們(叄)

當我們在談論 Deep Learning:CNN 其常見架構(上)

Unsupervised Learning:

Reinforcement Learning:

推薦閱讀:

[讀論文]Big Batch SGD: Automated Inference using Adaptive Batch Sizes
機器學習筆記8 —— 邏輯回歸模型的代價函數和梯度下降演算法
一文看懂常用的梯度下降演算法
瞎談CNN:通過優化求解輸入圖像

TAG:深度学习DeepLearning | 梯度下降 | 人工智能 |