安卓一鍵制作app軟件長(zhǎng)春網(wǎng)站優(yōu)化
第一章 神經(jīng)網(wǎng)絡(luò)是如何實(shí)現(xiàn)的
這些年神經(jīng)網(wǎng)絡(luò)的發(fā)展越來(lái)越復(fù)雜,應(yīng)用領(lǐng)域越來(lái)越廣,性能也越來(lái)越好,但是訓(xùn)練方法還是依靠 BP 算法。也有一些對(duì) BP 算法的改進(jìn)算法,但是大體思路基本是一樣的,只是對(duì) BP 算法個(gè)別地方的一些小改進(jìn),比如變步長(zhǎng)、自適應(yīng)步長(zhǎng)等。還有就是,由于訓(xùn)練數(shù)據(jù)存在噪聲,訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)也并不是損失函數(shù)越小越好。當(dāng)損失函數(shù)特別小時(shí),可能會(huì)出現(xiàn)所謂的“過(guò)擬合”問(wèn)題,導(dǎo)致神經(jīng)網(wǎng)絡(luò)在實(shí)際使用時(shí)性能嚴(yán)重下降。
六、過(guò)擬合問(wèn)題
1. 什么是過(guò)擬合問(wèn)題?
- 上圖中藍(lán)色圓點(diǎn)給出的是 6 個(gè)樣本點(diǎn),假設(shè)這些樣本點(diǎn)來(lái)自于某個(gè)曲線的采樣,但是我們又不知道原曲線是什么樣子,如何根據(jù)這 6 個(gè)樣本點(diǎn)“恢復(fù)”出原曲線呢?這就是擬合問(wèn)題。下圖給出了 3 種擬合方案,其中綠色的是一條直線,顯然擬合的有些粗糙,藍(lán)色曲線有點(diǎn)復(fù)雜,經(jīng)過(guò)了每一個(gè)樣本點(diǎn),該曲線與 6 個(gè)采樣點(diǎn)完美地?cái)M合在一起,似乎是個(gè)不錯(cuò)的結(jié)果,但是為此付出的代價(jià)是曲線彎彎曲曲,感覺(jué)是為擬合而擬合,沒(méi)有考慮 6 個(gè)樣本點(diǎn)的分布趨勢(shì)??紤]到采樣過(guò)程中往往是含有噪聲的,這種所謂的完美擬合其實(shí)并不完美。紅色曲線雖然沒(méi)有經(jīng)過(guò)每個(gè)樣本點(diǎn),但是更能反映 6 個(gè)樣本點(diǎn)的分布趨勢(shì),很可能更接近于原曲線,所以有理由認(rèn)為紅色曲線更接近原始曲線,是我們想要的擬合結(jié)果。如果我們用擬合函數(shù)與樣本點(diǎn)的誤差平方和作為擬合好壞的評(píng)價(jià),也就是損失函數(shù),綠色曲線由于距離樣本點(diǎn)比較遠(yuǎn),損失函數(shù)最大,藍(lán)色曲線由于經(jīng)過(guò)了每個(gè)樣本點(diǎn),誤差為 0,損失函數(shù)最小,而紅色曲線的損失函數(shù)介于二者之間。綠色曲線由于擬合的不夠,我們稱作欠擬合,藍(lán)色曲線由于擬合過(guò)渡,我們稱為過(guò)擬合,而紅色曲線是我們希望的擬合結(jié)果。在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,也會(huì)出現(xiàn)類似的欠擬合和過(guò)擬合的問(wèn)題。
- 欠擬合顯然是不好的結(jié)果,過(guò)擬合會(huì)帶來(lái)什么問(wèn)題呢?
2. 神經(jīng)網(wǎng)絡(luò)的過(guò)擬合問(wèn)題
- 我們把樣本集分成訓(xùn)練集和測(cè)試集兩個(gè)集合,訓(xùn)練集用于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,測(cè)試集用于測(cè)試神經(jīng)網(wǎng)絡(luò)的性能。如上圖所示,縱坐標(biāo)是錯(cuò)誤率,橫坐標(biāo)是訓(xùn)練時(shí)的迭代輪次。紅色曲線是在訓(xùn)練集上的錯(cuò)誤率,藍(lán)色曲線是測(cè)試集上的錯(cuò)誤率。每經(jīng)過(guò)一定的訓(xùn)練迭代輪次后,就測(cè)試一次訓(xùn)練集和測(cè)試集上的錯(cuò)誤率。從圖中可以發(fā)現(xiàn),在訓(xùn)練的開始階段,由于處于欠擬合狀態(tài),無(wú)論是訓(xùn)練集上的錯(cuò)誤率還是測(cè)試集上的錯(cuò)誤率,都隨著訓(xùn)練的進(jìn)行逐步下降。但是當(dāng)訓(xùn)練迭代輪次達(dá)到 N 次后,測(cè)試集上的錯(cuò)誤率反而逐步上升了,這就是出現(xiàn)了過(guò)擬合現(xiàn)象。測(cè)試集上的錯(cuò)誤率相當(dāng)于神經(jīng)網(wǎng)絡(luò)在實(shí)際使用中的表現(xiàn),因此我們希望得到一個(gè)合適的擬合,使得測(cè)試集上的錯(cuò)誤率最小,所以應(yīng)該在迭代輪次達(dá)到 N 次時(shí),就結(jié)束訓(xùn)練,以防止出現(xiàn)過(guò)擬合現(xiàn)象。
- 訓(xùn)練時(shí)并不是損失函數(shù)越小越好。
- 何時(shí)開始出現(xiàn)過(guò)擬合并不容易判斷。一種簡(jiǎn)單的方法就是使用測(cè)試集,做出像上圖那樣的錯(cuò)誤率曲線,找到 N 點(diǎn),用在 N 點(diǎn)得到的參數(shù)值作為神經(jīng)網(wǎng)絡(luò)的參數(shù)值就可以了。
- 但這種方法要求樣本集合比較大才行,因?yàn)闊o(wú)論是訓(xùn)練還是測(cè)試都需要比較多的樣本才行。而實(shí)際使用時(shí)往往是面臨樣本不足的問(wèn)題。
- 為解決過(guò)擬合問(wèn)題,研究者提出了一些方法,可以有效緩解過(guò)擬合問(wèn)題。當(dāng)然每種方法都不是萬(wàn)能的,只能說(shuō)在一定程度上弱化了過(guò)擬合問(wèn)題。
3. 減少過(guò)擬合的方法:正則化項(xiàng)法
- BP算法時(shí),用的損失函數(shù)是:
E d ( w ) = ∑ k = 1 M ( t k d ? o k d ) 2 E_d(w) = \sum^{M}_{k=1}{(t_{kd} - o_{kd})^2} Ed?(w)=k=1∑M?(tkd??okd?)2
- 在這個(gè)損失函數(shù)上增加一個(gè)正則化項(xiàng) ∥ w ∥ 2 2 \begin{Vmatrix}w\\\end{Vmatrix}_2^2 ?w? ?22? ,變成:
E d ( w ) = ∑ k = 1 M ( t k d ? o k d ) 2 + ∥ w ∥ 2 2 E_d(w) = \sum^{M}_{k=1}{(t_{kd} - o_{kd})^2} + \begin{Vmatrix}w\\\end{Vmatrix}_2^2 Ed?(w)=k=1∑M?(tkd??okd?)2+ ?w? ?22? - 其中 ∥ w ∥ 2 2 \begin{Vmatrix}w\\\end{Vmatrix}_2^2 ?w? ?22? 表示權(quán)重w的2-范數(shù), ∥ w ∥ 2 2 \begin{Vmatrix}w\\\end{Vmatrix}_2^2 ?w? ?22? 表示2-范數(shù)的平方。
- w的2-范數(shù)就是每個(gè)權(quán)重 w i w_i wi? 平方后求和再開方,這里用的是2-范數(shù)的平方,所以就是權(quán)重的平方和了。如果用 w i ( i = 1 , 2 , . . . , N ) w_i(i=1,2,...,N) wi?(i=1,2,...,N) 表示第i個(gè)權(quán)重,則:
∥ w ∥ 2 2 = w 1 2 + w 2 2 + ? + w N 2 \begin{Vmatrix}w\\\end{Vmatrix}_2^2 = w_1^2 + w_2^2 + \cdots + w_N^2 ?w? ?22?=w12?+w22?+?+wN2? - 當(dāng)然這里并不局限于2-范數(shù),也可以用其他的范數(shù)。
4. 正則化項(xiàng)的作用:降低模型復(fù)雜性
- 為什么增加了正則化項(xiàng)后就可以避免過(guò)擬合呢?
- 添加了正則化項(xiàng)的損失函數(shù),相當(dāng)于在最小化損失函數(shù)的同時(shí),要求權(quán)重也盡可能地小,相當(dāng)于限制了權(quán)重的變化范圍。
- 以下圖所示的曲線擬合為例說(shuō)明,作為一般的情況,一個(gè)曲線擬合函數(shù)f(x)可以認(rèn)為是如下形式:
f ( x ) = w 0 + w 1 x + w 2 x 2 + ? + w n x n f(x) = w_0 + w_1x + w_2x^2 + \cdots + w_nx^n f(x)=w0?+w1?x+w2?x2+?+wn?xn - 如果f(x)中包含的 x n x_n xn? 項(xiàng)越多,n越大,則f(x)越可以表示復(fù)雜的曲線,擬合能力就越強(qiáng),也更容易造成過(guò)擬合。
- 比如在上圖所示的3條曲線,綠色曲線是個(gè)直線,其形式為:
f ( x ) = w 0 + w 1 x f(x) = w_0 + w_1x f(x)=w0?+w1?x - 只含有x項(xiàng),只能表示直線,所以就表現(xiàn)為欠擬合。而對(duì)于其中的藍(lán)色曲線,其形式為:
f ( x ) = w 0 + w 1 x + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5 f(x) = w_0 + w_1x + w_2x^2 + w_3x^3 + w_4x^4 + w_5x^5 f(x)=w0?+w1?x+w2?x2+w3?x3+w4?x4+w5?x5
含有5個(gè) x n x^n xn 項(xiàng),表達(dá)能力比較強(qiáng),從而造成了過(guò)擬合。而對(duì)于其中的紅色曲線,其形式為:
f ( x ) = w 0 + w 1 x + w 2 x 2 f(x) = w_0 + w_1x + w_2x^2 f(x)=w0?+w1?x+w2?x2
含有2個(gè) x n x^n xn 項(xiàng),對(duì)于這個(gè)問(wèn)題來(lái)說(shuō),可能剛好合適,所以體現(xiàn)了比較好的擬合效果。但是在實(shí)際當(dāng)中呢,我們很難知道應(yīng)該有多少個(gè) x n x^n xn 項(xiàng)是合適的,有可能 x n x^n xn 項(xiàng)是比較多的,通過(guò)在損失函數(shù)中加入正則化項(xiàng),使得權(quán)重w盡可能地小,在一定程度上可以限制過(guò)擬合情況的發(fā)生。比如對(duì)于藍(lán)色曲線:
f ( x ) = w 0 + w 1 x + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5 f(x) = w_0 + w_1x + w_2x^2 + w_3x^3 + w_4x^4 + w_5x^5 f(x)=w0?+w1?x+w2?x2+w3?x3+w4?x4+w5?x5
雖然它含有5個(gè) x n x^n xn 項(xiàng),但是如果我們最終得到的 w 3 w_3 w3? 、 w 4 w_4 w4? 、 w 5 w_5 w5? 都比較小的話,那么也就與紅色曲線:
f ( x ) = w 0 + w 1 x + w 2 x 2 f(x) = w_0 + w_1x + w_2x^2 f(x)=w0?+w1?x+w2?x2
比較接近了。 - 對(duì)于一個(gè)復(fù)雜的神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),一般具有很強(qiáng)的表達(dá)能力,如果不采取專門的方法加以限制的話,很容易造成過(guò)擬合。
5. L2(2-范數(shù))正則化項(xiàng)
6. L1(1-范數(shù))正則化項(xiàng)
7. 減少過(guò)擬合的方法:舍棄法(Dropout)
- 所謂的舍棄法,就是在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過(guò)程中,隨機(jī)地臨時(shí)刪除一些神經(jīng)元,只對(duì)剩余的神經(jīng)元進(jìn)行訓(xùn)練。哪些神經(jīng)元被舍棄是隨機(jī)的,并且是臨時(shí)的,只在這次權(quán)重更新中被舍棄,下一次更新時(shí)哪些神經(jīng)元被舍棄,再重新隨機(jī)選擇,也就是說(shuō)每進(jìn)行一次權(quán)重更新,都要重新做一次隨機(jī)舍棄。下圖給出了一個(gè)舍棄示意圖,圖中虛線所展示的神經(jīng)元表示被臨時(shí)舍棄了,可以認(rèn)為這些神經(jīng)元被臨時(shí)從神經(jīng)網(wǎng)絡(luò)中刪除了。舍棄只發(fā)生在訓(xùn)練時(shí),訓(xùn)練完成后在使用神經(jīng)網(wǎng)絡(luò)時(shí),所有神經(jīng)元都被使用。
- 一個(gè)神經(jīng)網(wǎng)絡(luò)含有的神經(jīng)元越多,表達(dá)能力越強(qiáng),越容易造成過(guò)擬合。所以簡(jiǎn)單地理解就是在訓(xùn)練階段,通過(guò)舍棄減少神經(jīng)元的數(shù)量,得到一個(gè)簡(jiǎn)化的神經(jīng)網(wǎng)絡(luò),降低了神經(jīng)網(wǎng)絡(luò)的表達(dá)能力。但是由于每次舍棄的神經(jīng)元又是不一樣的,相當(dāng)于訓(xùn)練了多個(gè)簡(jiǎn)化的神經(jīng)網(wǎng)絡(luò),在使用神經(jīng)網(wǎng)絡(luò)時(shí)又是使用所有神經(jīng)元,所以相當(dāng)于多個(gè)簡(jiǎn)化的神經(jīng)網(wǎng)絡(luò)集成在一起使用,既可以減少過(guò)擬合,又能保持神經(jīng)網(wǎng)絡(luò)的性能。舉一個(gè)例子說(shuō)明這樣做的合理性。比如有 10 個(gè)同學(xué)組成一個(gè)小組做實(shí)驗(yàn),如果 10 個(gè)同學(xué)每次都一起做,很可能就是兩三個(gè)學(xué)霸在起主要作用,其他同學(xué)得不到充分的訓(xùn)練。但是如果引入“舍棄機(jī)制”,每次都隨機(jī)地從 10 名同學(xué)中選取 5 名同學(xué)做實(shí)驗(yàn),這樣會(huì)有更多的同學(xué)得到了充分的訓(xùn)練。當(dāng) 10 名同學(xué)組合在一起開展研究時(shí),由于每個(gè)同學(xué)都得到了充分的訓(xùn)練,所以 10 人組合在一起會(huì)具有更強(qiáng)的研究能力。
- 舍棄是在神經(jīng)網(wǎng)絡(luò)的每一層進(jìn)行的,除了輸入層和輸出層外,每一層都會(huì)發(fā)生舍棄,舍棄的比例大概在50%左右,也就是說(shuō)在神經(jīng)網(wǎng)絡(luò)的每一層,都大約舍棄掉50%左右的神經(jīng)元。
8. 減少過(guò)擬合的方法:數(shù)據(jù)增強(qiáng)法
- 在曲線擬合中,如果數(shù)據(jù)足夠多,過(guò)擬合的風(fēng)險(xiǎn)就會(huì)變小,因?yàn)樽銐蚨嗟臄?shù)據(jù)會(huì)限制擬合函數(shù)的激烈變化,使得擬合函數(shù)更接近原函數(shù)。
9. 如何獲得更多的數(shù)據(jù)?
- 除了盡可能收集更多的數(shù)據(jù)外,可以利用已有的數(shù)據(jù)產(chǎn)生一些新數(shù)據(jù)。比如想識(shí)別貓和狗,我們已經(jīng)有了一些貓和狗的圖片,那么可以通過(guò)旋轉(zhuǎn)、縮放、局部截取、改變顏色等方法,將一張圖片變換成很多張圖片,使得訓(xùn)練樣本數(shù)量數(shù)十倍、數(shù)百倍地增加。實(shí)驗(yàn)表明,通過(guò)數(shù)據(jù)增強(qiáng)可以有效提高神經(jīng)網(wǎng)絡(luò)的性能。
10. 總結(jié)
- 由于數(shù)據(jù)存在噪聲等原因,在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中并不是損失函數(shù)越小越好,因?yàn)楫?dāng)訓(xùn)練到一定程度后,進(jìn)一步減少訓(xùn)練集上的誤差,反而會(huì)加大在測(cè)試集上的誤差。這一現(xiàn)象稱為過(guò)擬合。
- 有三種減少過(guò)擬合的方法:
(1)正則項(xiàng)法。也就是在損失函數(shù)中增加正則項(xiàng),讓權(quán)重盡可能地小,達(dá)到防止過(guò)擬合的目的。
(2)舍棄法。在訓(xùn)練過(guò)程中,隨機(jī)地臨時(shí)舍棄一部分神經(jīng)元,每次舍棄都相當(dāng)于只訓(xùn)練一個(gè)子網(wǎng)絡(luò)。其結(jié)果相當(dāng)于訓(xùn)練了多個(gè)子網(wǎng)絡(luò)再集成在一起使用,網(wǎng)絡(luò)的每個(gè)部分都得到了充分的訓(xùn)練,從而提高了神經(jīng)網(wǎng)絡(luò)的整體性能。
(3)數(shù)據(jù)增強(qiáng)法。一般來(lái)說(shuō),訓(xùn)練數(shù)據(jù)越大,訓(xùn)練的神經(jīng)網(wǎng)絡(luò)性能會(huì)越好。當(dāng)沒(méi)有足夠多的訓(xùn)練數(shù)據(jù)時(shí),可以通過(guò)對(duì)已有數(shù)據(jù)進(jìn)行處理產(chǎn)生新的數(shù)據(jù)的辦法,增大訓(xùn)練數(shù)據(jù)。這一方法稱為數(shù)據(jù)增強(qiáng)方法。比如對(duì)于圖像數(shù)據(jù),可以通過(guò)旋轉(zhuǎn)、縮放、局部截取、改變顏色等方法,將一張圖片變換成很多張圖片,使得訓(xùn)練樣本數(shù)量數(shù)十倍、數(shù)百倍地增加。