1. 程式人生 > >深度學習——過擬合問題

深度學習——過擬合問題

表現:

策略:

d. 噪聲

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 也能達到同樣的效果,它強迫一個神經單元,和隨機挑選出來的其他神經單元共同工作,消除減弱了神經元節點間的聯合適應性,增強了泛化能力。”

更多參考資料