深度學習第八篇---正則化

什么叫過擬合和欠擬合?

我們在模型訓練的時候,通過把數據劃分成訓練集和測試集,然后選擇Loss函數來評估訓練效果怎么樣,其loss函數在訓練集上的值叫訓練誤差,在測試集上叫泛化誤差,當訓練誤差比較大的時候,可能說明模型參數量比較小,難以擬合所有數據特征,稱為欠擬合。反之當訓練誤差比較小,但是泛化誤差比較大的時候,說明模型雖然在訓練集上有不錯的表現,但是在未見過的測試集上表現較差的這種現象稱過擬合。

那什么是正則化呢,花書上說“凡是能夠減少泛化誤差的方法”都叫正則化。因此正則化是防止過擬合和提高模型泛化性能的一類方法的統稱。
本文記錄一下,經典的正則化方法有以下幾種:
● Dropout - 在全連接層中隨機丟棄部分神經元節點,產生一個簡化了的網絡結構
● L1/L2正則化 - 在原始的損失函數中增加L1/L2的懲罰項,從而限制產生較大的權重w
● Batch normalization - 控制隱層的輸出在一個穩定的范圍內
● 數據增強 - 通過增加數據集多樣性的方式避免過擬合
● Early stopping - 在達到模型過擬合的階段前停止訓練模型

1 Dropout (隨機失效)

Dropout通過隨機地將一些神經元的輸出置零,迫使模型不依賴于特定的神經元,從而增強了模型的泛化能力。這樣,每個神經元都將學習到與其他神經元合作的特征,而不是過度依賴于某些特定的神經元。
在PyTorch中,可以通過在網絡層中添加torch.nn.Dropout層來實現Dropout。例如:

import torch
import torch.nn as nn

if __name__ == '__main__':
   # 創建一個4行5列的矩陣
   matrix = torch.randn(4, 5)

   # 定義Dropout層,設置p參數為0.2,表示將20%的元素設置為0
   dropout = nn.Dropout(p=0.2)

   # 應用Dropout層
   matrix_dropout = dropout(matrix)

   print("原始矩陣:")
   print(matrix)
   print()
   print("應用Dropout后的矩陣:")
   print(matrix_dropout)

輸出:

原始矩陣:
tensor([[ 0.1143, -1.0621,  0.7031, -0.7662, -1.1596],
       [-0.8340, -0.8210, -0.8747,  1.3130, -2.2559],
       [-0.6311,  0.4332,  2.6923,  0.0424,  1.1330],
       [ 1.7028,  0.3254,  0.1760,  1.9037, -0.2492]])

應用Dropout后的矩陣:
tensor([[ 0.1429, -1.3276,  0.8788, -0.9577, -1.4495],
       [-1.0425, -1.0262, -1.0934,  1.6413, -2.8199],
       [-0.0000,  0.5415,  3.3653,  0.0000,  0.0000],
       [ 0.0000,  0.4068,  0.2201,  0.0000, -0.3115]])

數一數剛剛好4個0。在舉一個例子,在實際網絡中應用也比較簡單。

import torch
import torch.nn as nn

# 定義一個簡單的神經網絡
class Net(nn.Module):
   def __init__(self):
       super(Net, self).__init__()
       self.fc1 = nn.Linear(100, 64)
       self.dropout = nn.Dropout(0.5)
       self.fc2 = nn.Linear(64, 10)

   def forward(self, x):
       x = self.fc1(x)
       x = self.dropout(x)
       x = torch.relu(x)
       x = self.fc2(x)
       return x

# 創建網絡實例
net = Net()

# 在訓練過程中使用dropout
net.train()

# 在測試過程中禁用dropout
net.eval()

在訓練過程中,通過調用net.train()啟用Dropout層,而在測試過程中,通過調用net.eval()禁用Dropout層。這是因為在訓練過程中,Dropout層會隨機丟棄神經元的輸出,而在測試過程中,我們希望保留所有神經元的輸出來獲得更準確的預測結果。

2 L1/L2正則化

Loss函數:


2.1 為什么L1,L2正則可以解決過擬合問題?

答:模型的復雜度和參數的數量和參數的范圍決定,擬合過程中通常都傾向于讓權值盡可能小,最后構造一個所有參數都比較小的模型。因為一般認為參數值小的模型比較簡單,能適應不同的數據集,也在一定程度上避免了過擬合現象。可以設想一下對于一個線性回歸方程,若參數很大,那么只要數據偏移一點點,就會對結果造成很大的影響;但如果參數足夠小,數據偏移得多一點也不會對結果造成什么影響,專業一點的說法是抗擾動能力強。

L1正則:



其中,λ是正則化系數,控制正則化的強度;||w||?表示參數向量w的L1范數。

L2正則:


其中,λ是正則化系數,控制正則化的強度;||w||?表示參數向量w的L2范數。

給定特征X,訓練模型得到的能滿足測試集和驗證集w值,可能有多個(求導的解不止一組),有的w值比較大,有的w值比較小,為了降低模型的復雜度,我們需要限制一下w的值,即想求解到比較小的w值,因此我們在損失函數后面直接加上了λ(w),由于梯度下降,為了使得總體L值小,那么后面的w也要比較小,從而得到使得模型的復雜度降低,從而解決過擬合問題。

2.2 為啥對參數w進行限制,不對參數B進行限制呢

因為B只能是曲線上下移動,不能降低復雜度

2.3 訓練時如何確定λ值

考慮二維的情況,即只有兩個權值和 ,此時對于梯度下降法,求解函數的過程可以畫出等值線,同時L1正則化的函數也可以在二維平面上畫出來。如下圖:

圖中彩色圓圈線是Loss中前半部分待優化項的等高線,就是說在同一條線上其取值相同,且越靠近中心其值越小。
黑色菱形區域是L1正則項限制。帶有正則化的loss函數的最優解要在黑色菱形區域和彩色圓圈線之間折中,也就是說最優解出現在圖中優化項等高線與正則化區域相交處。從圖中可以看出,當待優化項的等高線逐漸向正則項限制區域擴散時,L1正則化的交點大多在坐標軸上,則很多特征維度上其參數w為0,因此會產生稀疏解;而正則化前面的系數,可以控制圖形的大小。越小,約束項的圖形越大(上圖中的黑色方框);越大,約束項的圖形就越小,可以小到黑色方框只超出原點范圍一點點,這是最優點的值中的可以取到很小的值。

同時L2正則化的函數也可以在二維平面上畫出來。如下圖:

圖中彩色一圈一圈的線是Loss中前半部分待優化項的等高線,就是說在同一條線上其取值相同,且越靠近中心其值越小。圖中黑色圓形區域是L2正則項限制。帶有正則化的loss函數的最優解要在loss函數和正則項之間折中,也就是說最優解出現在圖中優化項等高線與正則化區域相交處。從圖中可以看出,當待優化項的等高線逐漸向正則項限制區域擴散時L2正則化的交點大多在非坐標軸上,二維平面下L2正則化的函數圖形是個圓,與方形相比,被磨去了棱角。因此與相交時使得或等于零的機率小了許多,這就是為什么L2正則化不具有稀疏性的原因。

一般來說,λ的確定,從0開始,逐漸增大λ。在訓練集上學習到參數,然后在測試集上驗證誤差。反復進行這個過程,直到測試集上的誤差最小。一般的說,隨著λ從0開始增大,測試集的誤分類率應該是先減小后增大,交叉驗證的目的,就是為了找到誤分類率最小的那個位置。建議一開始將正則項系數λ設置為0,先確定一個比較好的learning rate。然后固定該learning rate,給λ一個值(比如1.0),然后根據validation accuracy,將λ增大或者減小10倍,增減10倍是粗調節,當你確定了λ的合適的數量級后,比如λ= 0.01,再進一步地細調節,比如調節為0.02,0.03,0.009之類。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容