雖然深度學習已經被用於各類不一樣的應用上,可是因爲缺少可以完整解釋其成功背後的基礎理論,因此常常面對着各類質疑。就在最近,Test-of-time 獎項的得到者在 Neural Information Processing (NIPS) 會議上將深度學習比做爲鍊金術。算法
雖然用於解釋深度學習爲什麼有如此強的泛化能力的泛化理論(Generalization Theory)還是一個開放性的問題,可是在本文中,咱們將會對近期試圖解釋這個問題的理論和經驗(empirical)上所取得的進步展開討論。安全
深度學習的悖論網絡
一個「明顯的悖論」是儘管深度學習有容量大(large capacity)、數值不穩定性(numerical instability)、尖銳極小值 (sharp minima) 和缺少魯棒性(又稱爲健壯性,robustness)等特色,可是仍在實踐中仍然有強的泛化能力。架構
最近的「Understanding deep learning requires rethinking generalization」文章代表深度神經網絡(CNN)有足夠的容量來記憶 Imagenet 和 CIFAR10 中帶有隨機標籤的數據集。雖然目前還不清楚,爲何他們在真實數據上找到了泛化的解決方案。app
另外一個關於深層架構的問題是數值的不穩定性。在基於導數的學習算法中,數值不穩定性問題一般被稱爲爆炸問題(exploding)或者梯度消失問題(vanishing gradient)。額外的困難是源於背後的 forward model 的不穩定性。這就是說,在原始特徵上作一些小的擾動時,一些神經網絡的輸出多是不穩定的。 在機器學習中,它被稱爲缺少魯棒性(non-robustness)。圖 1 爲對抗性***(adversarial attack)的一個例子。機器學習
(圖 1 的圖片來源:Attacking Machine Learning with Adversarial Examples)ide
有幾項研究關於深度學習的泛化理論是創建在隨機梯度降低法(Stochastic Gradient Descent,簡寫爲 SGD)找到損失函數(loss function)的極小值(minima)的平滑度(flatness)上。可是,最近有研究代表「Sharp Minima Generalize For Deep Nets」。更確切地來講,平滑的極小值(flat minima)能夠經過從新參數化變成尖銳的極小值(sharp minima),可是並不改變其泛化屬性。所以,泛化性並不能僅僅經過參數空間的魯棒性來解釋。函數
泛化理論學習
泛化理論的目標是解釋和證實爲何以及怎樣提升訓練集的準確性能夠提升測試集的準確性。這兩個精度之間的差別稱爲泛化偏差或「泛化能力降低(generalization gap)」。更嚴格的泛化能力降低能夠定義爲,當用給定學習算法 A 中的函數用來處理數據集時,獲得的不可計算預期風險和可計算經驗風險之間的差別值:測試
本質上,若是咱們將泛化能力降低界定爲一個較小的值就能保證深度學習算法在實際應用中有很好的泛化能力。基於模型的複雜性、穩定性和魯棒性等,確實存在多個關於泛化能力降低的理論界限(theoretical bounds)。
模型複雜度的兩個度量分別是 Rademacher 複雜度和 Vapnik-Chervonenkis(VC)維度。 可是,基於 Radamacher complexity 的深度學習函數的已知界限(bounds)隨着 DNN 的深度呈指數級的增加。這與實際觀察相悖,在實際觀察中更深的神經網絡反而更適合於訓練數據且會產生更小的經驗偏差。一樣地,基於 VC 維度的泛化能力降低界限在可訓練參數的數量上呈線性增加,可是也與在深度學習中實際觀測狀況相悖。換句話說,這兩個界限都太保守了。
K Kawaguchi,LP Kaelbling 和 Y Bengio 最近提出了一個更爲有用的方法。不一樣於其餘人,他們認可深度學習模型一般是使用訓練—驗證範式進行訓練的這一事實。他們經過驗證錯誤而非訓練錯誤來限制不可計算的指望風險。基於這些觀點,他們回答了爲何深度學習在實際應用中的泛化能力很好:「咱們的模型具備很好的泛化能力,是由於咱們能夠經過帶有驗證錯誤的模型搜索來得到一個好的模型」。而且證實如下的界限,對於任意,下式至少有 的機率成立。
值的強調的是,是咱們選擇最終模型的決策過程當中使用驗證數集的次數,是驗證數集的大小。這個界限就幫助解釋了爲何深度學習有良好的泛化能力,儘管可能存在不穩定性、缺少魯棒性和有尖銳的極小值等問題。到這裏,還有一個還沒有解決的問題是爲何咱們可以找到致使低驗證錯誤的體系結構和參數。一般,架構是受到了現實世界觀察的啓發,而好的參數是經過 SGD 來找到的,這些咱們將在下面討論。
隨機梯度降低法 SGD
SGD 是現代深度學習的一個內在組成部分,並且顯然是深度學習泛化能力背後的主要緣由之一。因此咱們接下來將會討論 SGD 的泛化屬性。
在最近「Data-Dependent Stability of Stochastic Gradient Descent」一文中,做者證實了在一些有額外損失的條件下,SGD 是一種平均而言穩定的算法。這些條件在經常使用的損失函數中被知足,例若有 sigmoid 激活函數的神經網絡中的邏輯(logistic)/softmax loss。在這種狀況下,穩定性就意味着 SGD 對訓練集中小擾動的敏感度。他們也進一步證實了 SGD 在諸如深度神經網絡等非凸函數中存在數據依賴的平均界限的泛化能力降低:
其中是訓練集的大小,是訓練步數,表示初始點曲率如何影響穩定性。這就引出了至少兩個結論。首先,圍繞初始點(initialization point)的目標函數的曲率具備決定性的影響。從更爲平緩有較低風險區域的一個點開始,應該會產生更高的穩定性,即更快的泛化。在實踐中選擇初始化參數時,這會是一個很好的預篩選策略。其次,考慮到全面經過,即,咱們將界限簡化爲。也就有了更大的訓練集,而更小的泛化能力下降。
有趣的是,有一些研究調查了學習曲線的問題。其中大部分表現爲冪律泛化偏差(power-law generalization error),在其指數或時,標度爲。 這一結論與前面討論過的論文一致。可是要提到是百度的大規模研究,該研究可以憑經驗觀察(empirically observe)這個冪律(見圖 2)。然而,實際應用中的指數β在 -0.07 到 -0.35 之間。理論上仍然須要進一步的解釋。
(圖 2 資料來源: Deep Learning Scaling Is Predictable, Empirically)
此外,還有理論和實證證據代表批量大小(batch size)對 SGD 泛化能力的影響。直觀地說就是小批量訓練會在梯度上引入噪音,這種噪音會使 SGD 遠離尖銳極小值,從而加強泛化能力。谷歌最近的一篇文章顯示,最佳批量大小與學習率(learning rate)和訓練集大小成正比。或者換句話說,「不要衰減學習率,而要增長批量的大小」。對於有動量(momentum)的 SGD,能夠推導出相似的縮放規則,其中動量爲,是最佳批量,是動量。 換而言之,全部的結論均可以用如下的公式來總結:
其中是學習率,是訓練集大小,是動量,是批量大小。
結論
在過去的幾年裏,你們對深度學習矛盾效應背後的基礎理論的興趣日益增加。雖然如今還有一些開放的研究問題有待解決,可是現代的深度學習並非鍊金術。在這篇文章中,咱們就深度學習的泛化能力方面討論了一下這個問題,從而得出了一些實際的結論:
在較小曲線較爲平滑和較安全的區域選擇初始化參數。曲率能夠經過 Hessian-vector multiplication method 來高效地估計。
改變更量的時候要從新調整批量大小。
不要衰減學習率,而要增長批量大小。
若是您以爲有趣,請不要忘記拍手和分享文章。您也能夠經過 Linkedin 和 Twitter 與做者聯繫。