當前位置:
首頁 > 最新 > 聊聊神經網路中的正則化

聊聊神經網路中的正則化

如何減少泛化誤差,是機器學習的核心問題。這篇文章首先將從六個角度去探討什麼是泛化能力,接著講述有那些提高泛化能力的方法,這些正則化方法可以怎樣進行分類,最後會通過講述一篇論文,來說明目前的正則化方法在解釋深度神經泛化能力方面的問題。本文假設讀者對深度學習具有基本的了解,清楚卷積神經網路的前向傳播和訓練過程。如何提高泛化能力是一個面試中常見的問題,由於這個問題有太多的答案,如何有條理的組織自己的回答,本文第二部分可以供參考。

泛化能力最直接的定義是訓練數據和真實數據間的差異,訓練模型的目地是要模型在完全陌生的數據上進行測試的。因此在進行交叉驗證的時候,要保證測試集和訓練集有相同的數據分布。而當測試集和訓練集本身的分布就不一致的時候,則可以使用將訓練集和測試集混合的Adversarial Validation來應對。

泛化能力還可以看成模型的稀疏性。正如奧斯姆的剪刀指出的,面對不同的解釋時,最簡單的解釋是最好的解釋。在機器學習中,具有泛化能力的模型中應該有很多參數是接近0的。而在深度學習中,則是待優化的矩陣應該對稀疏性有偏好性。

泛化能力的第三種解釋是生成模型中的高保真能力。具有泛化能力的模型應在其每個抽象層次具有重構特徵的能力。第四種解釋是模型能夠有效的忽視瑣碎的特徵,或者說在無關的變化下都能找到相同的特徵。比如CNN就能夠忽視其關注特徵所在的位置,而capsule網路則能夠忽略特徵是否旋轉。去除掉越來越多的無關特徵後,才能保證模型對真正在意的特徵的準確生成能力。這和上述的第三點是相輔相成的。

泛化能力還可以看成模型的信息壓縮能力。這裡涉及到解釋為什麼深度學習有效的一種假說,信息瓶頸(information bottleneck),說的是一個模型對特徵進行壓縮(降維)的能力越強,其就越更大的可能性做出準確的分類。信息壓縮能力可以概括上述的四種關於泛化能力的解釋,稀疏的模型因其結構而完成了信息的壓縮,生成能力強,泛化誤差低的模型因信息壓縮而可能,而忽略無關特徵是信息壓縮的副產品。

理解泛化能力的最後一種角度是風險最小化。這是從博弈論的角度來看,泛化能力強的模型能儘可能降低自己在真實環境中遇到意外的風險,因此會在內部產生對未知特徵的預警機制,並提前做好應對預案。這是一種很抽象的也不那麼精確的解釋,但隨著技術的進步,人們會找出在該解釋下進行模型泛化能力的量化評價方法。

當然,以上的6種對泛化能力的解釋不是全部說的通的解釋,未來會有更多理解泛化能力的角度。對同一個概念理解的越深,達到其的可能道路就越多,接下來讓我們看看怎麼做才能提高泛化能力。

在機器學習中,正則化很容易理解,不管是L1還是L2,都是針對模型中參數過大的問題引入懲罰項。而在深度學習中,要優化的變成了一個個矩陣,參數變得多出了幾個數量級,過擬合的可能性也相應的提高了。而要懲罰的是神經網路中每個神經元的權重大小,從而避免網路中的神經元走極端抄近路。

最直接的正則化是在損失函數中加入懲罰項,比如L2正則化,又稱權重衰減(weight decay)關注的是權重平方和的平方根,是要網路中的權重接近0但不等於0,而在L1正則中,要關注的是權重的絕對值,權重可能被壓縮成0。在深度學習中,L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。神經網路需要每一層的神經元儘可能的提取出有意義的特徵,而這些特徵不能是無源之水,因此L2正則用的多一些。

而深度學習中最常用的正則化技術是dropout,隨機的丟掉一些神經元。類似的方法是drop link,即隨機的丟掉一些網路中的連接。丟掉的神經元既可以在隱藏層,也可以在輸入層。dropout是一種將模型進行集成的演算法,每一個不完整的網路,都可以看成是一個弱分類器。由於要引入隨機性,dropout適合本身就相對複雜的網路,一個三個隱藏神經元的三層神經網路就不要讓神經元隨機的耍大牌了。

另一個增加模型泛化能力的方法是數據增強,比如將原始圖像翻轉平移拉伸,從而是模型的訓練數據集增大。數據增強已經是深度學習的必需步驟了,其對於模型的泛化能力增加普遍有效,但是不必做的太過,將原始數據量通過數據增加增加到2倍可以,但增加十倍百倍就只是增加了訓練所需的時間,不會繼續增加模型的泛化能力了。

另一個增加泛化能力的方法是提前停止(early stopping),就是讓模型在訓練的差不多的時候就停下來,比如繼續訓練帶來提升不大或者連續幾輪訓練都不帶來提升的時候,這樣可以避免只是改進了訓練集的指標但降低了測試集的指標。

最後一個改善模型泛化能力的方式是批量正則化(BN),就是將卷積神經網路的每層之間加上將神經元的權重調成標準正態分布的正則化層,這樣可以讓每一層的訓練都從相似的起點出發,而對權重進行拉伸,等價於對特徵進行拉伸,在輸入層等價於數據增強。注意正則化層是不需要訓練。

除了上述的四種方法,權重共享,隨機梯度下降及其改進方法,例如Adam,都可以看做是另一種正則化的方法。而我還腦洞過一種正則化的方法,在卷積網路中的pooling層,可以做average pooling,也可以做max pooling,能不能在池化層引入隨機性,在每次訓練時一定比例的池化層神經員做max pooling,另外的做average pooling。這個方法是集成模型的套路,將不同的池化策略看成弱分類器的區別。當然我還沒有試驗過這樣的方法,但由於池化層的影響不大,所以對這個方法的效果不樂觀。

權重共享的示意圖,就是神經員去模仿周圍神經元的權重。

GIF

隨機梯度下降的動態示意圖,通過引入隨機性避免局部最優,也可看成通過引入隨機項來避免模型中的參數過大(回憶統計學中均值回歸,說的是兩諾貝爾獎得主的子女智商很大可能要比他們的父母低,因為他們的父母碰巧拿到了影響智商的隨機項中的最高值,而他們的後代從概率上不應該還是這麼幸運)

正則化的方法,可以分為顯式的和隱式的,前者的目的就是提高泛化能力,包括dropout,drop link,權重共享,數據增強,L1和L2懲罰項。結合泛化能力的六個解釋,Drop Connect 和 Dropout 相似的地方在於它涉及在模型中引入稀疏性,不同之處在於drop connect引入的是權重的稀疏性而不是層的輸出向量的稀疏性,權重共享和數據增強對應的忽視無關的細節,L1正則是增加模型的稀疏性,L2正則關注的是讓模型在每一層生成的特徵更加真實準確。

而隱式的正則化,則是其出現的目的不是為了正則化,而正則化的效果是其副產品,包括early stopping,批量標準化,隨機梯度下降。另一種分類的方式是訓練時的正則化和模型構建時的正則化。前者只用在模型訓練時,而後者在訓練和模型實際運行時都會出現。前者包括隨機梯度下降,early stopping dropout和drop link,這些技巧都不會用在訓練好的模型中。

最後讓我們看一篇17年ICLR上的論文,Understanding Deep Learning Requires Re-thinking Generalization,這篇文章的作者想看看深度學習為什麼具有超過之前方法的泛化能力,為了定義清楚這個問題,他觀察了機器視覺領域成熟的網路,例如ImageNet和AlexNet,在不改變模型的超參數,優化器和網路結構和大小時,在部分/全部隨機標籤的CIFAR 10數據集,以及加入了高斯噪音的圖片上的表現。如果在隨機生成的分類標籤上,模型表現的也很好,這對於模型的泛化能力意味著什麼了?

先讓我們看看文中給出的數據,A圖指出,不管怎樣在模型中怎樣引入隨機性,在圖像中加入隨機噪音,對像素進行隨機洗牌,還是用隨機生成的像素點組成的圖片,哪怕圖像的標籤都是隨機生成的,模型也能讓訓練集上的誤差達到最小值。這很反直覺,在上述的情況下,人腦是學不到什麼的,但深度學習卻可以。這說明神經網路的有效容量是足夠大的,甚至足夠使用暴力記憶的方式記錄整個數據集。但這並不是我們想要的。而在部分隨機標籤的情況下,模型用暴力記憶的方式記住了數據點,而對正確標註的數據進行了正常的特徵提取。

接下來B圖討論的是在不同比例的label是隨機產生的情況下模型訓練所需的時間,這裡得出的結論是即便使用越來越多的隨機標籤,進行優化仍然是很容易的。實際上,與使用真實標籤進行訓練相比,隨機標籤的訓練時間僅僅增長了一個小的常數因子。而且不管模型本身的結構有多麼複雜,在隨機標籤的數據下訓練起來時間都不會增長太多。這裡多層感知機的訓練時間增長要高於AlexNet,這點令我意外,在待優化的參數相差不多的前提下,可能的原因我猜測是CNN中待優化的參數相對均勻的原因。

而C圖展示了在是不同比例的隨機標籤下,不同的網路結構在測試集下的表現,這裡選擇的都是在訓練集上錯誤為0的網路結構。可以看出深度學習網路即使在擬合隨機數據時,仍能保持相對良好的泛化能力。這意味著標籤隨機化僅僅是一種數據轉換,學習問題的其他性質仍保持不變。當全部的標籤都是隨機生成的時候,那麼理論的泛化誤差就是0.9(這裡是十分類問題,隨機猜有10%的機會是對的),但只要部分的標籤不是隨機生成的時候,那越複雜,容量越大的模型表現的泛化能力就越好。在40%的標籤是隨機生成的時候,如果網路完全沒有暴力的對數據點的記憶,那麼模型的最好表現應該是0.4×0.9+0.6×0.1即0.42,任何比這個好的表現都說明正則化的方法沒有完全的阻止神經網路去死記硬背,但我們看到即使最好的模型,其訓練時誤差都能到0。但越先進的模型,在避免模型brute force式的記憶上做的越好,從而使測試集上誤差更接近理論最優值。

這裡列出了不同的模型在不同的參數下的泛化能力,可以看出上文提到的drop link和權重衰減,標準正則化(BN)的效果,但沒有列出我更關注數據,即在部分數據為隨機標籤時模型的泛化能力。

這篇文章的好處是其實驗模式是可以很容易去重複的,你可以在Minst數據集上去重複類似的實驗,還可以看看在加入了不同的正則化策略後,網路在部分隨機標籤的數據上表現的怎麼樣。我還沒有做實驗,但預測相比於原始的2個隱藏層的CNN,加入drop out或drop link的模型泛化效果最好,這時可以讓那些擬合到隨機生成的數據的神經元消失。而加入L2正則項的模型泛化能力最差,原因是這時小的權重還是會引入錯誤,從而干擾特徵的提取。不過重複一遍,以上的不過是個人的腦洞,我是通過在腦中模擬人的大腦在這種情況下怎麼表現的更好來思考這個問題的,這樣一種自我中心的視角,並不適合理解深度神經網路。但這就是人的具身認知的極限了。

許多支撐神經網路有效性的依據都建立在這樣一個猜想之上:「自然」數據往往存在於多維空間中一個非常窄的流形中。然而,隨機數據並不具備這樣的趨勢。但很顯然,這篇理論性的文章證偽了這個看法。我們並不理解是什麼讓神經網路具有好的泛化能力。而理解是什麼讓神經網路具有泛化能力,不止能讓模型更具有可解釋性,還能為構建更魯棒的模型提供指導方向和設計原則。這麼看來,現在的深度學習,更類似古代的鍊金術而不是化學,還缺少一個統一的普世的理論架構。

最後借著上面文章的圖總結下這篇小文,通過從不同角度觀察泛化能力,將深度學習中常用的分成了顯式和隱式兩類。下圖可以看看early stopping的影響,在沒有批量正則化的時候,early stopping並沒有多少效果,等到滿足條件(例如5次迭代時在訓練集上準確度不明顯變化)時,模型已經過擬合了,而再加入了批量正則化之後,early stopping可以發揮效果了,這說明正則化的方法要組合在一起用才會有效。

而下面的這幅圖展示了權重衰減,數據增強和dropout三種方法在Inception網路上的效果,除了要看到使用正則化帶來的泛化能力提高之外,還要看到正則化的技術能解釋的泛化能力只是一部分,還要很多未知的因素,對神經網路的泛化能力做出了貢獻。

更多閱讀

原創不易,隨喜讚賞


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 混沌巡洋艦 的精彩文章:

TAG:混沌巡洋艦 |