深度學習——過擬合問題
overfitting
表現:
訓練集好測試集不好
策略:
(1) 資料增多 (2) 模型簡化 (3) 正則化/regularization(以訓練效能為代價)
1. 正則化措施
a. 權值衰減(weight decay)
思路是為了將權值限制在一定範圍內,可以給引數增加損失項,使引數範圍不會過大
其中 a 是一個超引數,決定了Regularization在代價函式中的重要程度,越大的 a 代表越強的Regularization。 當 Ω 是引數的範數時,這種Regularization方式被稱作Parameter Norm Penalties,特別地,當 Ω 是L2範數時,被稱作Weight-decay。按照梯度下降法的原理,增加L2範數的Loss項等價於在每步訓練迭代時,把每個加到Loss項中的引數絕對值減小到 1−a
b. 多模型ensemble
- Bias:模型無法有效學習到輸入和輸出的關係,是來自欠擬合的誤差。
- Variance:模型學習到了訓練集噪音,是來自過擬合的誤差。 使用多個模型的combine能夠有效降低Variance誤差,因此就允許我們使用表達能力更強的模型,來降低Bias誤差。
單個模型的輸出比較不一致時,多模型combine的效果較好,因此為了使多個單模型輸出比較不同,常見做法是:
- 使用不同的網路結構
- 使用不同的Regularization,例如使用不同的weight decay
- 使用不同的優化演算法
不過在實際使用中,即使使用完全相同的網路和資料,一般也可以通過combine得到更好的效能。
c. 資料增強
上文提到,對抗過擬合問題最好的方法就是增加訓練資料量,但是實際中資料很可能是不夠的。因此資料增強就是一種生成非真實的資料給網路訓練的方法。例如在分類任務中,可以通過裁剪(crop),翻轉(flip),縮放(scale/resize),旋轉(rotate)得到和原始圖片內容不一樣但是label一樣的訓練樣本,這些非真實的訓練樣本可以有效地提升模型的魯棒性。
d. 噪聲
利用噪聲增強模型的泛化性有以下幾種常見方法:
- 在資料原始輸入上增加噪聲。例如在所有的畫素上增加高斯分佈的噪聲,這實際上也是一種資料增強的方法。模型被期待對於輸入的噪聲有魯棒形,神經網路並非天生擅長於此,因此資料噪聲是一種有效的提升模型魯棒形的方法。某些模型上,輸入上的噪音等價於Parameter Norm Penalties(
- 在網路的中間層輸入或者輸出加入噪聲。這可以被看作是在輸入的不同抽象層做資料增強。
- 在引數上增加噪聲。有時能夠取得較好的效能。不過這種技術一般多用在RNN上,CNN相對少見。 整體上噪聲可以被加在真實資料上(additive),也可以被乘在真實資料上(multiplicative)。下面的Dropout可以被看作是後者的特例。
e. Dropout
Dropout是一種非常有效的Regularization方法。這種方法會在訓練時,將部分神經元(實際中的常見做法是僅對全連線層使用Dropout,因為卷積層引數相對較少,過擬合問題較輕)的輸出按照一定概率 p
(常見的概率是0.2-0.5)置0。如下圖所示,可以看作是改變了網路的結構。
Drouput可以被看作每步迭代時,被更新的網路都是從原始網路中取樣得到的子網路。因為原始網路的可能子網路個數可能是指數的,Dropout某種程度上可以被看作非常多個不同網路的combine(當然這是不嚴格的,因為這些網路共享了引數)。
關於Dropout的另外一種解釋認為,Dropout也可以被看作是一種資料增強:每個Dropout後的子網路N′
,都能在原始樣本空間中找到一個可能的樣本S′,使得現在的訓練樣本S在N′上的輸出等同於S在N′
上的輸出,因此相同樣本的在多次帶Dropout的訓練中,實際可被看作相當於多個樣本。
p.s.
1. 至於所有dropout的位置,看到網上說卷積層不用,目前不是很確定,佔坑
2. 以及為什麼dropout可以對抗過擬合:
“dropout 也能達到同樣的效果,它強迫一個神經單元,和隨機挑選出來的其他神經單元共同工作,消除減弱了神經元節點間的聯合適應性,增強了泛化能力。”