每當我們訓練自己的神經(jīng)網(wǎng)絡時,我們都需要注意稱為神經(jīng)網(wǎng)絡的泛化的問題。從本質(zhì)上講,這意味著我們的模型在從給定數(shù)據(jù)中學習以及將所學信息應用到其他方面有多出色。
在訓練神經(jīng)網(wǎng)絡時,將有一些數(shù)據(jù)在神經(jīng)網(wǎng)絡上進行訓練,并且還將保留一些數(shù)據(jù)以檢查神經(jīng)網(wǎng)絡的性能。如果神經(jīng)網(wǎng)絡在尚未訓練的數(shù)據(jù)上表現(xiàn)良好,那么可以說它在給定數(shù)據(jù)上的推理效果很好。讓我們通過一個例子來理解這一點。
假設(shè)我們正在訓練一個神經(jīng)網(wǎng)絡,該神經(jīng)網(wǎng)絡應該告訴我們給定圖像是否有狗。假設(shè)我們有幾只狗的圖片,每只狗屬于某個品種,并且這些圖片中總共有12個品種。我將保留10個品種的狗的所有圖像進行訓練,而這2個品種的其余圖像將暫時保留。
現(xiàn)在,在進入深度學習之前,讓我們從人類的角度來看待這一點。讓我們考慮一個一生中從未見過狗的人(僅舉一個例子)。現(xiàn)在,我們將向人類展示10種狗,并告訴他們這是狗。此后,如果我們向他們展示其他2個品種,他們是否能夠說出它們也是狗?希望他們能做到,十個品種應該足以理解和識別狗的獨特特征。從某些數(shù)據(jù)學習并將獲得的知識正確應用于其他數(shù)據(jù)的這種概念稱為generalization(泛化)。
回到深度學習,我們的目標是使神經(jīng)網(wǎng)絡從給定的數(shù)據(jù)中盡可能有效地學習。如果我們成功地使神經(jīng)網(wǎng)絡了解到,其他2個品種都還狗,那么我們已經(jīng)培養(yǎng)了非常general(一般的)神經(jīng)網(wǎng)絡,它會在現(xiàn)實世界中執(zhí)行得很好。
這實際上說起來容易做起來難,而訓練通用神經(jīng)網(wǎng)絡是深度學習從業(yè)人員最令人沮喪的任務之一。這是由于神經(jīng)網(wǎng)絡中的一種現(xiàn)象,即過度擬合。如果神經(jīng)網(wǎng)絡對10種犬進行訓練,并且拒絕將其他2種犬歸為狗,那么該神經(jīng)網(wǎng)絡就過度適合了訓練數(shù)據(jù)。這意味著神經(jīng)網(wǎng)絡已經(jīng)記住了那10種狗,并且只將它們視為狗。因此,它無法形成對狗長什么樣的普遍了解。在訓練神經(jīng)網(wǎng)絡的同時解決這個問題是我們在本文中要探討的。
現(xiàn)在,我們實際上沒有自由在像“繁殖”這樣的基礎(chǔ)上劃分所有數(shù)據(jù)。相反,我們將簡單地拆分所有數(shù)據(jù)。數(shù)據(jù)的一部分,通常是較大部分(大約80–90%)將用于訓練模型,其余部分將用于測試模型。我們的目標是確保測試數(shù)據(jù)的性能與訓練數(shù)據(jù)的性能大致相同。我們使用諸如損失和準確性之類的指標來衡量這一績效。
我們可以控制神經(jīng)網(wǎng)絡的某些方面,以防止過度擬合。讓我們一一介紹。首先是參數(shù)的數(shù)量。
參數(shù)數(shù)量
在神經(jīng)網(wǎng)絡中,參數(shù)的數(shù)量本質(zhì)上是指權(quán)重的數(shù)量。這將與層數(shù)和每一層中神經(jīng)元的數(shù)目成正比。參數(shù)和過度擬合的數(shù)量之間的關(guān)系如下:越多的參數(shù),越容易導致過擬合。
我們需要根據(jù)復雜性來定義問題。一個非常復雜的數(shù)據(jù)集將需要一個非常復雜的函數(shù)來成功理解和表示它。從數(shù)學上講,我們可以將復雜度與非線性相關(guān)聯(lián)。讓我們回想一下神經(jīng)網(wǎng)絡公式。
在此,W1,W2和W3是此神經(jīng)網(wǎng)絡的權(quán)重矩陣。現(xiàn)在,我們需要注意的是方程中的激活函數(shù),該函數(shù)適用于每一層。由于具有這些激活功能,因此每一層都與下一層非線性連接。
第一層的輸出為f(W/_1 * X)(設(shè)L1),第二層的輸出為f(W/_2 * L1)。如您所見,由于激活函數(shù)(f),第二層的輸出與第一層具有非線性關(guān)系。因此,在神經(jīng)網(wǎng)絡的末端,最終值Y相對于輸入X具有一定程度的非線性,具體取決于神經(jīng)網(wǎng)絡中的層數(shù)。
層的數(shù)量越多,越多的激活函數(shù)擾亂層之間的線性度,并且因此更加非線性。
由于這種關(guān)系,我們可以說,如果神經(jīng)網(wǎng)絡在每一層中具有更多的層和更多的節(jié)點,它將變得更加復雜。因此,我們需要根據(jù)數(shù)據(jù)的復雜性來調(diào)整參數(shù)。除了重復實驗和比較結(jié)果外,沒有確定的方法。
在給定的實驗中,如果測試指標遠低于訓練指標,則模型具有過擬合,這意味著神經(jīng)網(wǎng)絡對于給定的數(shù)據(jù)具有太多的參數(shù)。這基本上意味著神經(jīng)網(wǎng)絡對于給定的數(shù)據(jù)來說太復雜了,需要簡化。如果測試分數(shù)與訓練分數(shù)大致相同,則該模型已經(jīng)generalized,但這并不意味著我們已經(jīng)達到了神經(jīng)網(wǎng)絡的最大潛力。如果我們增加參數(shù),性能將會提高,但也可能會過擬合。因此,我們需要繼續(xù)嘗試通過平衡性能和泛化來優(yōu)化參數(shù)數(shù)量。
我們需要將神經(jīng)網(wǎng)絡的復雜度與數(shù)據(jù)復雜度相匹配。如果神經(jīng)網(wǎng)絡太復雜,它將開始記憶訓練數(shù)據(jù),而不是對數(shù)據(jù)有一般的了解,從而導致過擬合。
通常,深度學習從業(yè)人員如何做到這一點是首先訓練具有足夠大量參數(shù)的神經(jīng)網(wǎng)絡,以使模型過擬合。因此,最初,我們嘗試獲得一個非常適合訓練數(shù)據(jù)的模型。接下來,我們嘗試迭代地減少參數(shù)的數(shù)量,直到模型停止過度擬合為止,這可以視為一種最佳的神經(jīng)網(wǎng)絡。我們可以用來防止過度擬合的另一種技術(shù)是使用dropout神經(jīng)元。
dropout神經(jīng)元
在神經(jīng)網(wǎng)絡中,添加dropout神經(jīng)元是減少神經(jīng)網(wǎng)絡過度擬合的最流行,最有效的方法之一。基本上網(wǎng)絡中的每個神經(jīng)元都有一定的概率從網(wǎng)絡中完全退出。這意味著在特定時刻,某些神經(jīng)元將不會連接到網(wǎng)絡中的任何其他神經(jīng)元。這是一個視覺示例:
在訓練過程中的每一個瞬間,一組不同的神經(jīng)元將以隨機的方式掉落。因此,我們可以說在每個時刻,我們都在有效地訓練某個神經(jīng)網(wǎng)絡比原始神經(jīng)網(wǎng)絡少的某個子集神經(jīng)網(wǎng)絡。由于輟學神經(jīng)元的隨機性質(zhì),該子神經(jīng)網(wǎng)絡每次都會改變。
實際上,這里發(fā)生的是,當我們訓練帶有缺失神經(jīng)元的神經(jīng)網(wǎng)絡時,我們基本上是在訓練許多較小的子集神經(jīng)網(wǎng)絡,并且由于權(quán)重是原始神經(jīng)網(wǎng)絡的一部分,因此神經(jīng)網(wǎng)絡的最終權(quán)重可以視為所有相應子集神經(jīng)網(wǎng)絡權(quán)重的平均值。這是正在發(fā)生的事情的基本可視化:
這就是dropout神經(jīng)元在神經(jīng)網(wǎng)絡中的工作方式,但是為什么dropout會阻止過度擬合?這有兩個主要原因。
第一個原因是dropout的神經(jīng)元促進神經(jīng)元獨立。由于在特定瞬間可能存在或不存在圍繞特定神經(jīng)元的神經(jīng)元這一事實,因此該神經(jīng)元不能依賴于圍繞其的那些神經(jīng)元。因此,它會被迫成為更獨立,同時訓練。
第二個原因是由于dropout,我們實質(zhì)上是一次訓練多個較小的神經(jīng)網(wǎng)絡。通常,如果我們訓練多個模型并求平均權(quán)重,則由于每個神經(jīng)網(wǎng)絡的獨立學習的積累,性能通常會提高。但是,這是一個昂貴的過程,因為我們需要定義多個神經(jīng)網(wǎng)絡并分別進行訓練。但是,在輟學的情況下,這也做同樣的事情,而我們只需要一個神經(jīng)網(wǎng)絡,就可以從中訓練子神經(jīng)網(wǎng)絡的多種可能配置。
訓練多個神經(jīng)網(wǎng)絡并匯總其學習知識稱為“集合”,通常可以提高性能。使用dropout本質(zhì)上是在只有1個神經(jīng)網(wǎng)絡的情況下實現(xiàn)的。
減少過度擬合的下一種技術(shù)是權(quán)重正則化。
權(quán)重正則化
在訓練神經(jīng)網(wǎng)絡時,某些權(quán)重的值可能會變得非常大。發(fā)生這種情況是因為這些權(quán)重集中在訓練數(shù)據(jù)中的某些特征上,這導致它們在整個訓練過程中價值不斷增加。因此,網(wǎng)絡過度適合訓練數(shù)據(jù)。
我們不需要不斷增加權(quán)重來捕獲特定模式。相反,如果它們的值相對于其他權(quán)重較高,則很好。但是,在訓練過程中,當神經(jīng)網(wǎng)絡通過多次迭代對數(shù)據(jù)進行訓練時,權(quán)重值可能會不斷增加,直到權(quán)重變大為止,這是不必要的。
為什么權(quán)重過大對神經(jīng)網(wǎng)絡不利的其他原因之一是由于增加的輸入輸出差異。基本上,當出現(xiàn)網(wǎng)絡中的巨大權(quán)重,這是非常容易對小的變化的輸入,但神經(jīng)網(wǎng)絡應該基本輸出同樣的事情了類似的投入。當我們擁有巨大的權(quán)重時,即使我們保留兩個非常相似的單獨的數(shù)據(jù)輸入,它們的輸出也可能有很大的不同。這會導致在測試數(shù)據(jù)上發(fā)生許多錯誤的預測,從而降低了神經(jīng)網(wǎng)絡的通用性。
神經(jīng)網(wǎng)絡中權(quán)重的一般規(guī)則是,神經(jīng)網(wǎng)絡中的權(quán)重越高,神經(jīng)網(wǎng)絡越復雜。因此,具有較高權(quán)重的神經(jīng)網(wǎng)絡通常趨于過擬合。
因此,基本上,我們需要限制權(quán)重的增長,以使權(quán)重不會增長太多,但是我們到底該如何做呢?神經(jīng)網(wǎng)絡嘗試將訓練時的損失降到最低,因此我們可以嘗試在該損失函數(shù)中包括權(quán)重的一部分,以便在訓練時權(quán)重也被最小化,但是當然要優(yōu)先考慮減少損失。
有兩種執(zhí)行此操作的方法,稱為L1和L2正則化。在L1中,我們只占網(wǎng)絡中所有權(quán)重絕對值之和的一小部分。在L2中,我們在網(wǎng)絡中權(quán)重的所有平方值的總和中占一小部分。我們只是將此表達式添加到神經(jīng)網(wǎng)絡的整體損失函數(shù)中。公式如下:
在這里,lambda是一個允許我們改變權(quán)重變化程度的值。我們基本上只是將L1或L2項添加到神經(jīng)網(wǎng)絡的損失函數(shù)中,以便網(wǎng)絡也將嘗試最小化這些項。通過添加L1或L2正則化,網(wǎng)絡將限制其權(quán)重的增長,因為權(quán)重的大小是損失函數(shù)的一部分,并且網(wǎng)絡始終嘗試使損失函數(shù)最小化。讓我們重點介紹L1和L2之間的一些區(qū)別。
使用L1正則化時,雖然權(quán)重因正則化而減小,但L1嘗試將其完全降低到零。因此,對神經(jīng)網(wǎng)絡貢獻不大的不重要權(quán)重最終將變?yōu)榱恪5牵贚2的情況下,由于平方函數(shù)對于小于1的值成反比例,因此權(quán)重不會被推為零,而是被推為較小的值。因此,不重要的權(quán)重比其他權(quán)重要低得多。
這涵蓋了防止過度擬合的重要方法。在深度學習中,我們通常混合使用這些方法來改善神經(jīng)網(wǎng)絡的性能并改善模型的泛化性。
審核編輯 黃昊宇
-
神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
42文章
4774瀏覽量
100896 -
機器學習
+關(guān)注
關(guān)注
66文章
8425瀏覽量
132770 -
深度學習
+關(guān)注
關(guān)注
73文章
5507瀏覽量
121276
發(fā)布評論請先 登錄
相關(guān)推薦
評論