當我們在談論 Deep Learning:DNN 與它的參數們(貳)
本系列意在長期連載分享,內容上可能也會有所增刪改減;
因此如果轉載,請務必保留源地址,非常感謝!
知乎專欄:當我們在談論數據挖掘
Gradient Descent Optimization
Mini-batch SGD
在當我們在談論 Deep Learning:DNN 與它的參數們(壹)中我們介紹過 Mini-batch SGD,它是 GD 與 SGD 的一個折中選擇,有著較好的收斂效果與速度。在此,我們回顧一下此演算法的步驟
對於,我們可以這樣理解:某次迭代的參數初始位置為,該參數以勻速發生位移,時長為單位時間,得到的新的位置,即新的。由於是根據訓練樣本的一個 Batch 求得的,所以變化可能會比較劇烈,也容易收雜訊干擾,從而減慢收斂速度。
Momentum
為了提高 Mini-batch SGD 的收斂速度,利用動量(Momentum)來加速收斂的方法被提了出來,其步驟如下
可以看出,與 Mini-batch SGD 的區別,其中一個就是這個步驟。即,參數改變的速度變成了,而不再是。同時,,即此時可以看作是速度的加速度,且以發生衰減。
於是有:
- 參數以速度發生改變,的加速度是。此時,每一個 Batch 的的改變會以加速度的方式影響,而不會再突變(比如方向的劇烈改變),這就帶來了一定的抗雜訊能力
- 當速度與加速度長期方向一致時,即使比較小,速度也會逐漸加快,從而加快收斂速度
- 同時,可以通過設置來改變前期梯度對當前的影響。越小,則前期的梯度對現在的速度的影響越小。的含義可以類別成運動時的摩擦力,使參數不會無止境的改變下去。
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 是先對新的參數進行了預估,,再進行梯度的計算。雖然只是進行了細微的改變,Nesterov Momentum 在效果上比 Momentum 卻有著顯著的提升。關於對這種提升原因的分析,可以參考比Momentum更快:揭開Nesterov Accelerated Gradient的真面目,這裡就不再贅述了。
AdaGrad
SGD 在參數更新的過程中,經常需要對進行衰減,原因也是很直觀的:前期參數距離最優解比較遠,需要較大的更新速度;而當到達了最優解附近,則需要較小的速度以精細搜索最優解。
而以上介紹的方法,它們的學習率都需要提前設定。如果想需要對進行衰減,衰減的策略也需要自己去設置。對於多維數據,不同維度的數據還需要考慮是否需要不同的衰減策略。於是,有學者在 Mini-Batch SGD 的基礎上提出了自適應衰減的方法(Duchi J, Hazan E, Singer Y. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. 2011.),其步驟如下
可以看出,它與 Mini-Batch SGD 的區別在於:在更新的過程中一直在自適應的衰減。學習率衰減的幅度與該維度上梯度的累計平方和成反比,即:如果某個維度上一直較大,則該維度上的學習率衰減的較快;較小,則該維度上的學習率衰減的較慢。
但按照《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 最大的區別就是在計算累計梯度時,多了一個衰減參數。
AdaGrad 在計算累計梯度時,使用的是過去所有梯度的平方和。於是,在更新參數的過程中,如果某些迭代計算出的使累計梯度太大,後續參數更新速度就會劇烈減少從而過早停止更新。
RMSProp 通過衰減參數,降低較為久遠的的影響,從而改善了上述情況。由於其實踐中較好的效果,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。
由於的設置近似1,Adam 中的其實分別是梯度的一階矩、二階矩的估計。因此,屬於,於是也有了約束。按照原文的說法,這個性質可以幫助我們更好地調節;同時,《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,我們設定一個概率,表示 DNN 中每個節點(包括輸入節點,以及 Hidden Layer 的節點)被保留的概率。也就是 DNN 中的每個節點,都會以概率被移除。如下
與被移除的節相連的那些線在這次 Mini-batch 訓練中也會被移除,於是 DNN 可以被看作如下結構。對這個結構中的參數應用 Mini-batch SGD 進行更新,被刪除的結構對應的參數本次不更新。
將這種思想寫成公式,即 Feed Forward 公式變成如下。其中,服從 Bernoulli 分布,即以的概率為1,以的概率為0。
在測試時,會使用初始的 DNN 結構,即
但是,每個節點對應的參數需要乘以,即。
在文章中,作者給出的建議值是:對於輸入層,;對於 Hidden Layer,。
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
- 文中 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 | 梯度下降 | 人工智能 |