過擬合及解決方法


什么是過擬合

過擬合,指的是模型在訓練集上表現的很好,但是在交叉驗證集合測試集上表現一般,也就是說模型對未知樣本的預測表現一般,泛化(generalization)能力較差。通俗一點地來說過擬合就是模型把數據學習的太徹底,以至於把噪聲數據的特征也學習到了。

(圖片來源:coursera 吳恩達機器學習公開課)
從圖中可以看出,圖一是欠擬合,模型不能很好地擬合數據;圖二是最佳的情況;圖三就是過擬合,采用了很復雜的模型。最后導致曲線波動很大,最后最可能出現的結果就是模型對於未知樣本的預測效果很差。

產生的原因

  • 訓練數據不夠
  • 對模型進行過度訓練(overtraining)

解決方法

Early stopping

在機器學習算法中,我們常常將原始數據集分為三部分:training data、validation data,testing data。其中validation data就是用來避免過擬合的,在訓練過程中,我們通常用它來確定一些超參數(比如根據validation data上的accuracy來確定early stopping的epoch大小、根據validation data確定learning rate等等)。那為啥不直接在testing data上做這些呢?因為如果在testing data做這些,那么隨着訓練的進行,我們的網絡實際上就是在一點一點地overfitting我們的testing data,導致最后得到的testing accuracy沒有任何參考意義。

Early stopping便是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練數據集迭代收斂之前停止迭代來防止過擬合。對模型進行訓練的過程即是對模型的參數進行學習更新的過程,這個參數學習的過程往往會用到一些迭代方法,如梯度下降(Gradient descent)學習算法。這樣可以有效阻止過擬合的發生,因為過擬合本質上就是對自身特點過度地學習

正則化

指的是在目標函數后面添加一個正則化項,一般有L1正則化與L2正則化。L1正則是基於L1范數,即在目標函數后面加上參數的L1范數和項,即參數絕對值和與參數的積項

L2正則是基於L2范數,即在目標函數后面加上參數的L2范數和項,即參數的平方和與參數的積項:

個人感覺這是一種對過度學習的懲罰,增加了一些噪聲就減小了過度學習。

數據增強

在神經網絡中,數據增強只意味着增加數據規模
是一種通過讓有限的數據產生更多的等價數據來人工擴展訓練數據集的技術。它是克服訓練數據不足的有效手段,目前在深度學習的各個領域中應用廣泛。但是由於生成的數據與真實數據之間的差異,也不可避免地帶來了噪聲問題。
下面列舉了一些NLP中數據增強的方法

同義詞詞典(Thesaurus):Zhang Xiang等人提出了Character-level Convolutional Networks for Text Classification,通過實驗,他們發現可以將單詞替換為它的同義詞進行數據增強,這種同義詞替換的方法可以在很短的時間內生成大量的數據。

隨機插入(Randomly Insert):隨機選擇一個單詞,選擇它的一個同義詞,插入原句子中的隨機位置,舉一個例子:“我愛中國” —> “喜歡我愛中國”。

隨機交換(Randomly Swap):隨機選擇一對單詞,交換位置。

隨機刪除(Randomly Delete):隨機刪除句子中的單詞。

語法樹結構替換:通過語法樹結構,精准地替換單詞。

加噪(NoiseMix) (https://github.com/noisemix/noisemix):類似於圖像領域的加噪,NoiseMix提供9種單詞級別和2種句子級別的擾動來生成更多的句子,例如:這是一本很棒的書,但是他們的運送太慢了。->這是本很棒的書,但是運送太慢了。

情境增強(Contextual Augmentation):這種數據增強算法是用於文本分類任務的獨立於域的數據擴充。通過用標簽條件的雙向語言模型預測的其他單詞替換單詞,可以增強監督數據集中的文本。

生成對抗網絡:利用生成對抗網絡的方法來生成和原數據同分布的數據,來制造更多的數據。在自然語言處理領域,有很多關於生成對抗網絡的工作:

    Generating Text via Adversarial Training

    GANS for Sequences of Discrete Elements with the Gumbel-softmax Distribution
    SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
回譯技術(Back Translation):回譯技術是NLP在機器翻譯中經常使用的一個數據增強的方法。其本質就是快速產生一些翻譯結果達到增加數據的目的。回譯的方法可以增加文本數據的多樣性,相比替換詞來說,有時可以改變句法結構等,並保留語義信息。但是,回譯的方法產生的數據嚴重依賴於翻譯的質量。
擴句-縮句-句法:先將句子壓縮,得到句子的縮寫,然后再擴寫,通過這種方法生成的句子和原句子具有相似的結構,但是可能會帶來語義信息的損失。

無監督數據擴增(Unsupervised Data Augmentation):通常的數據增強算法都是為有監督任務服務,這個方法是針對無監督學習任務進行數據增強的算法,UDA方法生成無監督數據與原始無監督數據具備分布的一致性,而以前的方法通常只是應用高斯噪聲和Dropout噪聲(無法保證一致性)。(https://arxiv.org/abs/1904.12848)

此外,這個倉庫(https://github.com/quincyliang/nlp-data-augmentation)中介紹了一些自然語言處理中的數據增強技術。
總結
數據增強是增大數據規模,減輕模型過擬合的有效方法,但是,數據增強不能保證總是有利的。在數據非常有限的域中,這可能導致進一步過度擬合。因此,重要的是要考慮搜索算法來推導增強數據的最佳子集,以便訓練深度學習模型。

DropOut

在神經網絡中,有一種方法是通過修改神經網絡本身結構來實現的,其名為Dropout。該方法是在對網絡進行訓練時用一種技巧(trick),對於如下所示的三層人工神經網絡:

對於上圖所示的網絡,在訓練開始時,隨機得刪除一些(可以設定為一半,也可以為1/3,1/4等)隱藏層神經元,即認為這些神經元不存在,同時保持輸入層與輸出層神經元的個數不變,這樣便得到如下的ANN:

然后按照BP學習算法對ANN中的參數進行學習更新(虛線連接的單元不更新,因為認為這些神經元被臨時刪除了)。這樣一次迭代更新便完成了。下一次迭代中,同樣隨機刪除一些神經元,與上次不一樣,做隨機選擇。這樣一直進行下去,直至訓練結束。
個人感覺這是對模型的簡化,過擬合可能因為模型太過復雜,通過這種方式化簡模型的復雜度。

參考

https://blog.csdn.net/lqz790192593/article/details/83045114
https://blog.csdn.net/weixin_39913518/article/details/106907510


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM