過擬合是指在模型引數擬合過程中,由於訓練資料報含抽樣誤差,複雜模型在訓練時也將抽樣誤差進行了很好的擬合。具體表現就是在訓練集上效果好,而測試集效果差,模型泛化能力弱。
1.從資料入手
解決過擬合最有效的方法,就是盡力補足資料,讓模型看見更加全面的樣本,不斷修正自己。
資料增強:通過一定規則擴充資料。可以通過影象平移、翻轉、縮放、切割等手段將資料庫成倍擴充。當然,隨著gan的發展,很多任務,可以通過gan來有效補足資料集。
2.正則化
從上式,可以看到乙個平方差誤差函式加上乙個正則化項。到底什麼是正則化呢,從字面理解,其實就是給需要訓練的目標函式加上一些規則限制。可以看到二次正則項的優勢,處處可導,計算方便,可以限制模型複雜度,即模型中多項式函式的階次,階次越大,模型複雜彎曲程度越大,其中我們優化的引數w就是多項式前的係數,w趨向於0,說明模型越簡單。我們單獨看二次正則項,它的梯度方向可以把w向0引導。
2.1. dropout
dropout可以作為訓練深度神經網路的一種trick供選擇。在每個訓練批次中,通過忽略一半的特徵檢測器(讓一半的隱層節點值為0),可以明顯地減少過擬合現象。這種方式可以減少特徵檢測器(隱層節點)間的相互作用,檢測器相互作用是指某些檢測器依賴其他檢測器才能發揮作用。
dropout說的簡單一點就是:我們在前向傳播的時候,讓某個神經元的啟用值以一定的概率p停止工作,這樣可以使模型泛化性更強,因為它不會太依賴某些區域性的特徵,如下圖所示。
**層面實現讓某個神經元以概率p停止工作,其實就是讓它的啟用函式值以概率p變為0。比如我們某一層網路神經元的個數為1000個,其啟用函式輸出值為y1、y2、y3、…、y1000,我們dropout比率選擇0.4,那麼這一層神經元經過dropout後,1000個神經元中會有大約400個的值被置為0。
注意: 經過上面遮蔽掉某些神經元,使其啟用值為0以後,我們還需要對向量y1……y1000進行縮放,也就是乘以1/(1-p)。如果你在訓練的時候,經過置0後,沒有對y1……y1000進行縮放(rescale),那麼在測試的時候,就需要對權重進行縮放
為什麼說dropout可以解決過擬合?
(1)取平均的作用: 因為不同的網路可能產生不同的過擬合,取平均則有可能讓一些「相反的」擬合互相抵消。dropout掉不同的隱藏神經元就類似在訓練不同的網路,隨機刪掉一半隱藏神經元導致網路結構已經不同,整個dropout過程就相當於對很多個不同的神經網路取平均。而不同的網路產生不同的過擬合,一些互為「反向」的擬合相互抵消就可以達到整體上減少過擬合。
(2)減少神經元之間複雜的共適應關係: 因為dropout程式導致兩個神經元不一定每次都在乙個dropout網路**現。這樣權值的更新不再依賴於有固定關係的隱含節點的共同作用,阻止了某些特徵僅僅在其它特定特徵下才有效果的情況 。迫使網路去學習更加魯棒的特徵 ,這些特徵在其它的神經元的隨機子集中也存在。換句話說假如我們的神經網路是在做出某種**,它不應該對一些特定的線索片段太過敏感,即使丟失特定的線索,它也應該可以從眾多其它線索中學習一些共同的特徵。從這個角度看dropout就有點像l1,l2正則,減少權重使得網路對丟失特定神經元連線的魯棒性提高。
dropout為什麼進行縮放
因為我們訓練的時候會隨機的丟棄一些神經元,但是**的時候就沒辦法隨機丟棄了。如果丟棄一些神經元,這會帶來結果不穩定的問題,也就是給定乙個測試資料,有時候輸出a有時候輸出b,結果不穩定,這是實際系統不能接受的。那麼一種」補償「的方案就是每個神經元的權重都乘以乙個p,這樣在「總體上」使得測試資料和訓練資料是大致一樣的。比如乙個神經元的輸出是x,那麼在訓練的時候它有p的概率參與訓練,(1-p)的概率丟棄,那麼它輸出的期望是px+(1-p)0=px。因此測試的時候把這個神經元的權重乘以p可以得到同樣的期望。
3.batch normalization
bn原理這裡不贅述了,我的部落格裡由整理。這裡主要講一下,為什麼bn也會有dropout類似正則的能力。我們知道bn是為了解決cnn中internal covariate shift而提出的歸一化方法。歸一化帶來的好處是,讓輸出遵從0,1正態分佈,從而讓輸入在啟用函式中處於線性部分,幫助網路更快擬合,但帶來乙個問題,啟用函式都處於線性區,那網路非線性表達能力就會大幅削弱。所以為了更好的滿足網路對線性與非線性的需求,bn在歸一化後,又對結果進行了scale和shift。這兩個引數可以通過資料來優化,自己學習判斷該神經元對網路的貢獻程度,如果他們認為該神經元無用,就會更新scale的值,讓其趨於0。這就類似於dropout,隨機阻斷神經元。但區別在於,bn是主動學習,而dropout是隨機。
4.訓練時間5.lable smothing
在常見的多分類問題中,先經過softmax處理後進行交叉熵計算,原理很簡單可以將計算loss理解為,為了使得網路對測試集**的概率分布和其真實分布接近,常用的做法是使用one-hot對真實標籤進行編碼,這種將標籤強制one-hot的方式使網路過於自信會導致過擬合,因此軟化這種編碼方式。
如下,qi是label smoothing後的標籤,可以看到,當i=y時,qi變成了比1小的數,同時,原來qi為0的情況,都通過均值提高了。k表示模型的類別數。
通過軟化標籤,降低正樣本與負樣本的懲罰力度,可以幫助模型降低對正樣本獨有特徵的關注度,提高對負樣本共有特徵的提煉能力,緩和過擬合。
6.mixup
mixup可以理解為一種資料增強的方式,從訓練樣本中隨機抽取兩個樣本進行簡單的隨機加權求和,同時樣本的標籤也對應加權求和,然後**結果與加權求和之後的標籤求損失,在反向求導更新引數。直接上公式
**實現中,並不是同時取出兩個batch,而是取乙個batch,並將該batch中的樣本id順序打亂(shuffle),然後再進行加權求和。而最後損失函式則是輸出的**值對這兩組標籤分別求損失,然後用之前樣本所有的權重加權求和,反向求導更新引數。
深度學習中過擬合與防止過擬合的方法
1.什麼是過擬合?過擬合 overfitting 是指在模型引數擬合過程中的問題,由於訓練資料報含抽樣誤差,訓練時,複雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。具體表現就是最終模型在訓練集上效果好 在測試集上效果差。模型泛化能力弱。2.過擬合產生的原因?1 在對模型進行訓練時,有可...
深度學習中過擬合與防止過擬合的方法
過擬合 overfitting 是指在模型引數擬合過程中的問題,由於訓練資料報含抽樣誤差,訓練時,複雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。具體表現就是最終模型在訓練集上效果好,在測試集上效果差,模型泛化能力弱。1 在對模型進行訓練時,有可能遇到訓練資料不夠,即訓練資料無法對整個...
深度學習中過擬合與防止過擬合的方法
過擬合 overfitting 是指在模型引數擬合過程中的問題,由於訓練資料報含抽樣誤差,訓練時,複雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。具體表現就是最終模型在訓練集上效果好,在測試集上效果差,模型泛化能力弱。抽樣誤差是指由於隨機抽樣的偶然因素使樣本各單位的結構不足以代表總體各...