深層神經(jīng)網(wǎng)絡(luò)的模型概括,過度擬合和正則化方法的挑戰(zhàn)

> Source
在完成了與神經(jīng)網(wǎng)絡(luò)有關(guān)的多個(gè)AI項(xiàng)目之后,我意識到模型的概括能力對于AI項(xiàng)目的成功至關(guān)重要。 我想寫這篇文章來幫助讀者了解如何使用正則化方法來優(yōu)化模型的性能,并更好地理解基于神經(jīng)網(wǎng)絡(luò)提供可靠且可擴(kuò)展的AI解決方案的復(fù)雜性。
泛化是用于描述模型對新數(shù)據(jù)做出反應(yīng)的能力的術(shù)語。
泛化是模型經(jīng)過訓(xùn)練后可以消化新數(shù)據(jù)并做出準(zhǔn)確預(yù)測的能力。 這可能是您的AI項(xiàng)目中最重要的元素。 模型的概括能力對于AI項(xiàng)目的成功至關(guān)重要。 確實(shí),我們擔(dān)心模型在訓(xùn)練數(shù)據(jù)上訓(xùn)練得太好,但是無法推廣。
因此,我們常常沒有達(dá)到生產(chǎn)階段……在提供新數(shù)據(jù)時(shí),它會做出不準(zhǔn)確的預(yù)測,即使模型能夠?qū)τ?xùn)練數(shù)據(jù)做出準(zhǔn)確的預(yù)測,也會使模型無用。 這稱為過擬合。
相反的情況也可能發(fā)生。 欠擬合是指未對數(shù)據(jù)進(jìn)行足夠的模型訓(xùn)練。 在欠擬合的情況下,即使使用訓(xùn)練數(shù)據(jù),模型也一樣無用,也無法做出準(zhǔn)確的預(yù)測。

在所有AI項(xiàng)目中,我們都基于現(xiàn)有數(shù)據(jù)構(gòu)建模型,并希望它們能完美地適應(yīng)(概括)新數(shù)據(jù)。 在監(jiān)督學(xué)習(xí)中,我們擁有過去的數(shù)據(jù)以及所有我們希望預(yù)測的預(yù)測值和真實(shí)值。 盡管定義了業(yè)務(wù)問題,但是收集相關(guān)數(shù)據(jù),清理和準(zhǔn)備數(shù)據(jù)以及建立模型都具有挑戰(zhàn)性,并且非常耗時(shí)……另一個(gè)挑戰(zhàn)仍然存在–如何知道模型能否很好地預(yù)測未來?
訓(xùn)練可以很好地泛化到新數(shù)據(jù)的深度神經(jīng)網(wǎng)絡(luò)是一個(gè)具有挑戰(zhàn)性的問題。
當(dāng)涉及到神經(jīng)網(wǎng)絡(luò)時(shí),正則化是一種對學(xué)習(xí)算法稍加修改的技術(shù),以使模型具有更好的泛化能力。 反過來,這也改善了模型在看不見的數(shù)據(jù)上的性能。
模型復(fù)雜度
從業(yè)務(wù)角度來看,深度神經(jīng)網(wǎng)絡(luò)的主要優(yōu)勢在于,隨著向越來越大的數(shù)據(jù)集饋入數(shù)據(jù),神經(jīng)網(wǎng)絡(luò)的性能不斷提高。 當(dāng)公司嘗試創(chuàng)建數(shù)據(jù)網(wǎng)絡(luò)效果時(shí),這非常有趣。
但是,具有幾乎無限數(shù)量的示例的模型最終將在網(wǎng)絡(luò)能夠?qū)W習(xí)的容量方面達(dá)到某些限制。 正確的正則化是獲得更好的泛化性能的關(guān)鍵原因,因?yàn)樯疃壬窠?jīng)網(wǎng)絡(luò)經(jīng)常被過度參數(shù)化并可能遭受過度擬合的問題。
我們可以通過以下方法降低神經(jīng)網(wǎng)絡(luò)的復(fù)雜度,以減少過度擬合:

減少模型的容量可將模型過度擬合訓(xùn)練數(shù)據(jù)集的可能性降低到不再適合的程度。
通過保持較小的網(wǎng)絡(luò)權(quán)重來減少過度擬合的技術(shù)稱為正則化方法。
正則化:添加額外信息以將不適的問題轉(zhuǎn)化為更穩(wěn)定的良好問題的一類方法。
下面,我列出了我們經(jīng)常使用的幾種正則化方法(確實(shí)存在其他方法,例如權(quán)重約束或活動正則化)。 但是,減少過度擬合的最簡單方法是從本質(zhì)上限制模型的容量。
全連接(FC)層最容易過擬合,因?yàn)樗鼈儼疃嗟膮?shù)。 輟學(xué)應(yīng)該應(yīng)用于這些層(影響它們與下一層的連接)。 除標(biāo)準(zhǔn)形式的輟學(xué)外,還存在幾種輟學(xué)的變體,旨在進(jìn)一步提高泛化性能。 例如,自適應(yīng)輟學(xué),其中輟學(xué)率由另一個(gè)神經(jīng)網(wǎng)絡(luò)動態(tài)確定…

但是,我注意到,如果您使用CNN,則現(xiàn)在不經(jīng)常使用輟學(xué)。 相反,我看到越來越多的數(shù)據(jù)科學(xué)家使用批處理規(guī)范化。 當(dāng)您擁有大量數(shù)據(jù)集時(shí),批處理規(guī)范化比輟學(xué)更為有效。
噪聲正規(guī)化的一種常見類型是在訓(xùn)練過程中注入噪聲:將噪聲添加或乘以神經(jīng)網(wǎng)絡(luò)的隱藏單元。 通過在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時(shí)允許一些誤差,不僅可以提高訓(xùn)練性能,而且可以提高模型的準(zhǔn)確性。
根據(jù)Jason Brownlee的說法,訓(xùn)練期間使用的最常見的噪聲類型是在輸入變量中添加高斯噪聲。 添加的噪聲量(例如,擴(kuò)展或標(biāo)準(zhǔn)偏差)是可配置的超參數(shù)。 噪聲太小沒有作用,而噪聲太大使映射功能難以學(xué)習(xí)。 確保在評估模型或使用模型對新數(shù)據(jù)進(jìn)行預(yù)測時(shí),不添加任何噪聲源。
早期停止早期停止是一種交叉驗(yàn)證策略,在該策略中,我們將一部分訓(xùn)練集保留為驗(yàn)證集。 實(shí)際上,當(dāng)我們看到驗(yàn)證集的性能越來越差時(shí),我們就停止了對模型的訓(xùn)練。
換句話說,這種方法嘗試在估計(jì)噪聲的模型之前,盡早停止估計(jì)器的訓(xùn)練階段,即該階段已學(xué)會從數(shù)據(jù)中提取所有有意義的關(guān)系。
這是通過監(jiān)視驗(yàn)證損失(或另一個(gè)驗(yàn)證指標(biāo))并在此特定指標(biāo)停止改進(jìn)時(shí)結(jié)束訓(xùn)練階段來完成的。 通過這樣做,我們給估算器足夠的時(shí)間來學(xué)習(xí)有用的信息,但沒有足夠的時(shí)間來學(xué)習(xí)噪聲。

> Source
我使用這種方法的問題是,不能保證在任何給定的時(shí)間點(diǎn),模型都不會再次開始改進(jìn)。 一個(gè)比提早停止更實(shí)際的方法是存儲在驗(yàn)證集上獲得最佳性能的模型權(quán)重…
轉(zhuǎn)移學(xué)習(xí)此方法是通過將網(wǎng)絡(luò)的權(quán)重初始化為在大型通用數(shù)據(jù)集中預(yù)先訓(xùn)練的具有相同體系結(jié)構(gòu)的另一個(gè)網(wǎng)絡(luò)的權(quán)重來完成的。 我們經(jīng)常將這種方法用于計(jì)算機(jī)視覺項(xiàng)目。 當(dāng)我們的業(yè)務(wù)問題沒有太多數(shù)據(jù)時(shí),它對我們有很大幫助,但是我們可以找到另一個(gè)類似的問題。 在這種情況下,我們可以使用遷移學(xué)習(xí)來減少過度擬合。
批處理規(guī)范化(BN)是一種規(guī)范深度神經(jīng)網(wǎng)絡(luò)中間層中的激活的技術(shù)。
批處理標(biāo)準(zhǔn)化除了具有正則化效果外,還可以通過其他方式幫助您的模型(允許使用更高的學(xué)習(xí)率等)。 我建議您驗(yàn)證每層的權(quán)重和偏差分布看起來近似于標(biāo)準(zhǔn)正態(tài)。
由于BN具有正則化效果,因此這也意味著您可以經(jīng)常刪除輟學(xué)(這很有幫助,因?yàn)檩z學(xué)通常會減慢訓(xùn)練速度)。
在訓(xùn)練過程中,我們會更新批次歸一化參數(shù)以及神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏差。 批處理歸一化的另一個(gè)重要觀察結(jié)果是,由于使用迷你批顯示隨機(jī)性,因此批處理歸一化可作為正則化。

批處理大小=一次向前/向后傳遞中的訓(xùn)練示例數(shù)。 批次大小越大,您將需要更多的存儲空間。
數(shù)據(jù)擴(kuò)充。 處理過度擬合的另一種方法是提高數(shù)據(jù)質(zhì)量。 您可能會想到離群值/噪聲消除,但是實(shí)際上它們的效率非常有限。 另一個(gè)有趣的方式(尤其是在與圖像有關(guān)的任務(wù)中)是數(shù)據(jù)增強(qiáng)。 目的是隨機(jī)轉(zhuǎn)換訓(xùn)練樣本,以使它們在模型中看起來不同時(shí),它們傳達(dá)相同的語義信息。 就個(gè)人而言,當(dāng)我發(fā)現(xiàn)模型在訓(xùn)練集上的損失接近0時(shí),我便開始考慮使用數(shù)據(jù)增強(qiáng)。
意見建議
我建議在考慮正則化方法之前先執(zhí)行一些基本步驟。 確實(shí),在大多數(shù)時(shí)候,我們無法確定對于每個(gè)學(xué)習(xí)問題,都存在一個(gè)可學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型,該模型可以產(chǎn)生所需的低泛化誤差。
正確的期望
首先要找到一個(gè)很好的參考,它表示您在數(shù)據(jù)集或最相似的可找到參考的體系結(jié)構(gòu)上,都可以達(dá)到所需的泛化錯誤。 在訓(xùn)練自己的數(shù)據(jù)集之前,嘗試在這些參考數(shù)據(jù)集上重現(xiàn)這樣的結(jié)果是很有趣的,以測試所有基礎(chǔ)結(jié)構(gòu)是否正確到位。
訓(xùn)練程序驗(yàn)證
這也是檢查您的訓(xùn)練程序是否正確的關(guān)鍵。 這些檢查包括:

超參數(shù)/架構(gòu)搜索
最后,關(guān)鍵是要了解,正則化本身并不一定意味著您的泛化誤差會變小:模型必須具有足夠大的容量才能實(shí)現(xiàn)良好的泛化屬性。 這通常意味著您需要足夠深的網(wǎng)絡(luò),然后才能看到正則化的好處。
如果沒有其他幫助,您將必須測試多個(gè)不同的超參數(shù)設(shè)置(貝葉斯優(yōu)化可能會在此處提供幫助)或多個(gè)不同的體系結(jié)構(gòu)更改。
有關(guān)此主題的更多信息,我建議以下鏈接:
-https://arxiv.org/pdf/1710.05179.pdf- https://machinelearningmastery.com/train-neural-networks-with-noise-to-reduce-overfitting/- https://towardsdatascience.com/batch- normalization-in-neural-networks-1ac91516821c- https://papers.nips.cc/paper/5032-adaptive-dropout-for-training-deep-neural-networks.pdf- http://jmlr.org/papers/ volume15 / srivastava14a.old / srivastava14a.pdf- https://wp.wwu.edu/machinelearning/2017/01/22/generalization-and-overfitting/
(本文翻譯自Alexandre Gonfalonieri的文章《Understand Neural Networks & Model Generalization》,參考:https://towardsdatascience.com/understand-neural-networks-model-generalization-7baddf1c48ca)