規范化技術一般用於解決模型的過擬合問題,本文將深入淺出的介紹幾種常見的正則化技術。首先來看看什么是過擬合。
1、什么是過擬合
生活中我們常聽到一些地域性偏見的話,如“河南人偷井蓋”,“東北人都是黑社會”,“投資不過山海關”等等。但是每個省份這么多人,有好人有壞人,真的就一句話概括了嗎?顯然這犯了“以偏概全”的毛病,在機器學習里,我們叫這種現象為“過擬合”,即使用少量樣本去擬合了所有沒見過的樣本。
另外,在機器學習中,我們訓練模型的數據不可避免的存在一些測量誤差或者其他噪音,比如下圖中10個點,我們可以找到唯一的9階多項式
來擬合所有點;也可以使用線性模型 y = 2x 擬合。

圖1
從上圖可以看出,左側的擬合結果顯然的擬合到所有噪聲數據了,這使得模型變得復雜並且不具備健壯的泛化能力。
到這里,我們應該知道,過擬合的主要原因就是訓練集樣本太少或樣本中存在噪聲。如果是樣本太少的原因,那直接增加訓練樣本就好了,但是訓練樣本不是你想加就能加的呀。所以我們能做的就是使用正則化技術來防止模型學到訓練樣本中的噪聲,從而降低過擬合的可能性,增加模型的魯棒性。
2、使用小規模神經網絡行不行
從上節的第二個例子可以看到,貌似模型越復雜就越可能導致過擬合,那么我們直接使用簡單的模型行不行呢?行當然是行的,但是小規模的神經網絡模型效果就不那么好了。比如,如果是MNIST手寫數字識別數據集,我們只要使用兩層隱藏層的神經網絡,並且每層網絡的神經元只要100個或者300個就可以得到良好的效果。但是如果是ImageNet那樣的數據集呢?顯然淺層神經網絡就不行了,為此有了152層的ResNet。
所以我們的目標是:大,要大,要足夠大。
因此針對不同數據集,我們設計網絡結構時,應該設計出比你實際需要的更多層數、更多神經元的網絡結構,然后使用規范化技術去防止過擬合。這樣可以節省做實驗去尋找最佳層數最佳神經元個數的時間,也能更快的得到更好的結果。
最后簡單說一下為什么深層神經網絡比淺層神經網絡更好,①DNN具有更多神經元,因此具有更多參數,這使得它可以擬合更加復雜的各種函數;②現實世界的數據大多都是以分層的結構構造的,比如人臉識別任務,較低層次是各種形狀和方向的線條(輪廓),中間層次就是這些線條組成的方形或圓形(五官),高層次的特征就是五官組成的人臉了,DNN的不同層從淺層到高層可以依次提取不同層級的特征;③DNN在新數據集上更具有健壯的泛化能力。
我們要利用深層神經網絡的優勢又要避免它所帶來的過擬合問題,於是規范化技術應運而生。
3、L2-Norm(嶺回歸(Ridge Regression),即加了L2-norm正則化的線性回歸)
L2 規范化是一種最為常用的正則化手段 —— 有時候被稱為權重衰減(weight decay)。L2 規范化的想法是增加一個額外的項到代價函數上,這個項叫做規范化項(有時也叫懲罰項)。
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD1DKyUzRENfMCUyQiU1Q2ZyYWMlN0IlNUNsYW1iZGElN0QlN0IybiU3RCU1Q3N1bV8lN0J3JTdEJTVFJTdCJTdEJTdCdyU1RTIlN0Q=.png)
上式右邊第一項是常規的損失函數,第二項就是L2規范化項,
稱為規范化參數,n為訓練集合的大小。 直覺地看,規范化的效果是讓網絡傾向於學習小一點的權重,其他的東西都一樣的。大的權重只有能夠給出代價函數第一項足夠的提升時才被允許。換言之,規范化可以當做一種尋找小的權重和最小化原始的代價函數之間的折中。這兩部分之間相對的重要性就由 λ 的值來控制了: λ 越小,就偏向於最小化原始代價函數,反之,傾向於小的權重。
在訓練神經網絡時,我們知道我們的訓練目的就是優化權重,而且是使用反向傳播和梯度下降來優化的;那么加入正則化項之后權重是如何優化的呢?將上述加L2正則項的代價函數對參數w進行求導:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNmcmFjJTdCJTVDcGFydGlhbCtDJTdEJTdCJTVDcGFydGlhbCt3JTdEJTNEJTVDZnJhYyU3QiU1Q3BhcnRpYWwrQ18wJTdEJTdCJTVDcGFydGlhbCt3JTdEJTJCJTVDZnJhYyU3QiU1Q2xhbWJkYSU3RCU3Qm4lN0R3.png)
於是權重的學習規則(更新規則)變為:

這和正常的梯度下降學習規則相同,只是多了一個因子
重新調整了權重w,這種調整稱為權重衰減。 粗看,這樣會導致權重會不斷下降到 0。但是實際不是這樣的,因為如果在原始代價函數中造成下降的話其他的項可能會讓權重增加。
那么規范化因子
如何設置呢?根據調節因子
,我們知道,如果訓練數據很多時,也就是n比較大,那么調節因子將接近1,從而使得權重衰減效果不明顯,導致規范化效果降低。因此,我們可以針對大數據集將規范化參數設置大一點,對小數據集將規范化參數設置的小一些。
3、L1-Norm(LASSO回歸,即加了L1-norm的懲罰項的線性回歸。)
L1 規范化是在未規范化的代價函數上加上一個權重絕對值的和:

憑直覺地看,這和 L2 規范化相似,懲罰大的權重,傾向於讓網絡優先選擇小的權重。當然,
L1 規范化和 L2 規范化並不相同,將上式對參數w進行求偏導:

其中 sgn(w) 就是 w 的正負號,即 w 是正數時為 +1,而 w 為負數時為 −1,並約定 sgn(0) = 0。使用這個表達式,我們可以輕易地對反向傳播進行修改從而使用基於 L1 規范化的隨機梯度下降進行學習。對 L1 規范化的網絡進行更新的規則就是

通過和L2規范化的權重更新規則對比,可以看出在 L1 規范化中,權重通過一個常量向 0 進行縮小。在 L2 規范化中,權重通過一個和 w 成比例的量進行縮小的。所以,當一個特定的權重絕對值 |w| 很大時,L1 規范化的權重縮小得遠比 L2 規范化要小得多。相反,當一個特定的權重絕對值 |w| 很小時,L1 規范化的權重縮小得要比 L2 規范化大得多。最終的結果就是:L1 規范化傾向於聚集網絡的權重在相對少量的高重要度連接上,而其他權重就會被驅使向 0 接近。
因此,我們可以看出,不管是L1還是L2正則,他們的基本思想就是希望通過限制權重的大小,使得模型不能擬合任意的噪聲數據,從而達到防止過擬合的目的。 因為更小的權重意味着網絡的行為不會因為我們隨便改變了一個輸入而改變太大。這會讓規范化網絡學習局部噪聲的影響更加困難。將它看做是一種讓單個的證據不會影響網絡輸出太多的方式。相對的,規范化網絡學習去對整個訓練集中經常出現的證據進行反應。對比看,大權重的網絡可能會因為輸入的微小改變而產生比較大的行為改變。所以一個無規范化的網絡可以使用大的權重來學習包含訓練數據中的噪聲的大量信息的復雜模型。簡言之,規范化網絡受限於根據訓練數據中常⻅的模式來構造相對簡單的模型,而能夠抵抗訓練數據中的噪聲的特性影響。我們的想法就是這可以讓我們的網絡對看到的現象進行真實的學習,並能夠根據已經學到的知識更好地進行泛化。
L1和L2正則也有不同之處,L1正則會讓參數變得更稀疏,而L2不會。所謂參數變得稀疏是指會有更多的參數變為0,這樣可以達到類似特征選取的功能。而之所以L2不會讓參數變得稀疏的原因是因為參數很小時,比如0.001,它的平方基本可以忽略,於是模型也就不會進一步的讓其變得更小而調整為0。其次,L2正則項可導,L1正則項不可導,這樣使得帶L2正則項的損失函數更方便更容易優化,而帶L1正則項的損失函數的優化就比較復雜。
另外,值得注意的是規范化中並沒有對偏置項進行規范化,因為即使對偏置進行規范化操作也並不會對結果改變太多,所以,在某種程度上,對不對偏置進行規范化其實就是一種習慣了。然而,需要注意的是,有一個大的偏置並不會像大的權重那樣會讓神經元對輸入太過敏感。所以我們不需要對大的偏置所帶來的學習訓練數據的噪聲太過擔心。同時,允許大的偏置能夠讓網絡更加靈活 —— 因為,大的偏置讓神經元更加容易飽和,這有時候是我們所要達到的效果。所以,我們通常不會對偏置進行規范化。
4、Dropout
Dropout 的思想和L1 norm,L2 norm 不同,它並不是通過學習到較小的權重參數來防止過擬合的,它是通過在訓練的過程中隨機丟掉部分神經元來減小神經網絡的規模從而防止過擬合。
這里的丟掉不是永遠的丟掉,而是在某一次訓練中丟掉一些神經元,這些丟掉的神經元有可能在下一次迭代中再次使用的,因此這里需要和Relu激活函數來做一下區分,Relu激活函數是永久的殺死取值為負的神經元。
那么Dropout具體是如何來防止過擬合的呢?僅僅丟掉一些神經元減少神經網絡的規模?答案肯定沒這么簡單啦。下面是Dropout 論文里的例子,也就是發明Dropout技術的動機。
在自然界中,中大型動物中一般是有性繁殖,有性繁殖是指后代的基因從父母兩方各繼承一半。但是從直觀上看,似乎無性繁殖更加合理,因為無性繁殖可以保留大段大段的優秀基因。而有性繁殖則將基因隨機拆了又拆,破壞了大段基因的聯合適應性。但是大自然優勝劣汰,在高等物種中選擇沒有選擇無性繁殖,而選擇了有性繁殖,可見有性繁殖的優勢。我們先做一個假設,那就是基因的力量在於混合的能力而非單個基因的能力。不管是有性繁殖還是無性繁殖都得遵循這個假設。為了證明有性繁殖的強大,我們先看一個概率學小知識。
比如要搞一次恐怖襲擊,兩種方式:
1. 集中50人,讓這50個人密切精准分工,搞一次大爆破。
2. 將50人分成10組,每組5人,分頭行事,去隨便什么地方搞點動作,成功一次就算。
哪一個成功的概率比較大? 顯然是后者。因為將一個大團隊作戰變成了游擊戰。那么,類比過來,有性繁殖的方式不僅僅可以將優秀的基因傳下來,還可以降低基因之間的聯合適應性,使得復雜的大段大段基因聯合適應性變成比較小的一個一個小段基因的聯合適應性。
Dropout也能達到同樣的效果,它強迫一個神經單元,和隨機挑選出來的其他神經單元共同工作,以達到最好的效果。它減弱了神經元節點間的聯合適應性,增強了泛化能力。( 因為神經元不能依賴其他神經元特定的存在,這個技術其實減少了復雜的互適應的神經元。所以,強制要學習那些在神經元的不同隨機子集中更加健壯的特征。)
Dropout通過在每一次訓練中,以概率P隨機丟掉一些神經元以及之間的鏈接,這樣也就是使得在訓練階段我們訓練了很多個不同的小規模神經網絡模型,因為每一次訓練的神經元個數不同且所留下的神經元也不同。示意圖如下:

一般P取值為0.5,此時訓練的不同的小規模神經網絡數目最多,達到
個,n指神經元總個數。上圖中左圖為標准的神經網絡,假設
表示神經網絡的隱藏層,
表示第l層的輸入向量,
表示l層的輸出向量(y(0) = x ,表示輸入),W(l) 和 b(l) 指l層的權重和偏置,它的前向傳播過程可以描述如下:

其中f(.)為激活函數。而對於帶 dropout 的右圖所示神經網絡,它的前向傳播過程可以描述如下:

圖示如下:

對任何層l,
是一個獨立的伯努利向量,向量里元素以概率P取1,以概率1-P取值0,將伯努利向量和每層的輸出做點乘,這樣就將輸出向量中的一部分數值變為0,然后將這個點乘之后的輸出向量作為下一層的輸入向量,以此往復。
所以實際上Dropout 使得大規模的神經網絡在訓練時,把總體的那個大的神經網絡分成了很多個小規模的神經網絡在訓練,也就是我們最終得到的模型就是很多個小規模的網絡 ensemble 起來的,我們知道 ensemble 的效果是可以提升模型性能也能防止過擬合的。
我們訓練好了 ensemble 好多個的小規模的神經網絡的模型之后,那么怎么應用於測試呢?直接對指數級數量的小規模細化模型的預測結果取平均嗎?答案是不可行的,在實踐中,一個近似的取平均方式表現很好。其實在測試時,我們的整個神經網絡的每一個神經元都是被保留的,假如一個神經元在訓練期間以概率p被保留,那么在在測試時間我們只要將該神經元的輸出權重乘以p,如下圖所示。

概括的說,dropout 其實可以使我們獲得一個共享權重的 Bagging 集成模型。我們知道,訓練好多模型做 Bagging 是很費時間的,更別說做神經網絡的集成了,訓練單個神經網絡都需要花費很多時間;但是使用了 dropout 技術卻可以讓我們使用非常少的時間來訓練集成模型,雖然這比訓練單個模型所花的時間稍微多點,但是相比性能上的提升,這多花的時間是完全值得的。
5、 Max-Norm Regularization
雖然單獨使用 dropout 就可以使得模型獲得良好表現,不過,如果搭配Max-Norm 食用的話,那么效果更佳。
對於每一個神經元 Max-Norm Regularization 的目的在於限制輸入鏈接權重的大小,使得
,其中 r 是Max-Norm 可調節超參數,||.||_2是L2范數。在每一個 training step 需要計算
,以確保它小於r,如果需要對w進行調整,則使用下式進行調整:
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD13JTVDbGVmdGFycm93K3clNUNmcmFjJTdCciU3RCU3QiU3QyU3Q3clN0MlN0NfMiU3RA==.png)
前面我們講過,更小的權重參數有利於模型對噪聲的魯棒性,這里限制參數的大小目的就是如此。在實踐中將 Max-Norm Regularization 結合dropout 使用一般效果將會更好,下圖是使用各種規范化技術在不同數據集上的表現:
MNIST

SVHN

正則化技術還有很多,比如提前終止、數據增強、參數綁定、參數共享、對抗訓練、切面距離、正切傳播等……,本文介紹了幾種最常用的正則化技術,希望對你有幫助。
