最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

魚(yú)書(shū)(深度學(xué)習(xí)入門):第六章 與學(xué)習(xí)相關(guān)的技巧

2023-07-23 23:13 作者:棒棒x  | 我要投稿

一、參數(shù)的更新

????神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)的目的是找到使損失函數(shù)的值盡可能小的參數(shù)。這是尋找最優(yōu)參數(shù)的問(wèn)題,解決這個(gè)問(wèn)題的過(guò)程稱為最優(yōu)化(optimization)。在前幾章中我們引入了梯度,使用參數(shù)的梯度,沿梯度方向更新參數(shù),并重復(fù)這個(gè)步驟多次,從而逐漸靠近最優(yōu)參數(shù),這個(gè)過(guò)程稱為隨機(jī)梯度下降法(stochastic gradient descent),簡(jiǎn)稱SGD。但是除了SGD,之外,還有其他更聰明的方法。下面我們將指出SGD的缺點(diǎn),并介紹SGD以外的其他最優(yōu)化方法。

????1.SGD與SGD的缺點(diǎn)

????我們先復(fù)習(xí)一下SGD,其數(shù)學(xué)表達(dá)式和代碼實(shí)現(xiàn)如下:


SGD的數(shù)學(xué)表達(dá)式,其中W為要更新的參數(shù),η表示學(xué)習(xí)率

????其中進(jìn)行初始化時(shí)的參數(shù)lr表示learning rate(學(xué)習(xí)率),還定義了update(params, grads)方法,這個(gè)方法在SGD中會(huì)被反復(fù)調(diào)用。

????在指出SGD的缺點(diǎn)之前,我們先考慮下面f(x%2Cy)%3D%5Cfrac%7B1%7D%7B20%7Dx%5E2%2By%5E2%20%20%20的最小值。


該函數(shù)的圖形(左圖)和它的等高線(右圖)

????它的梯度如下圖所示。

該函數(shù)的梯度

????這個(gè)梯度的特征是,y軸方向上大,x軸方向上小。換句話說(shuō),就是y軸方向的坡度大,而x軸方向的坡度小。這里需要注意的是,雖然函數(shù)的最小值在(x, y) = (0, 0)處,但是圖中的梯度在很多地方并沒(méi)有指向(0, 0)。

????如果我們對(duì)這個(gè)函數(shù)應(yīng)用SGD,它的下降路徑如下圖所示。

????

基于SGD的最優(yōu)化的更新路徑:呈“之”字形朝最小值(0, 0)移動(dòng),效率低

????????在圖中,SGD呈“之”字形移動(dòng)。這是一個(gè)相當(dāng)?shù)托У穆窂?。也就是說(shuō), SGD的缺點(diǎn)是,如果函數(shù)的形狀非均向(anisotropic),比如呈延伸狀,搜索的路徑就會(huì)非常低效。因此,我們需要比單純朝梯度方向前進(jìn)的SGD更聰明的方法。SGD低效的根本原因是,梯度的方向并沒(méi)有指向最小值的方向。

????為了克服SGD的缺點(diǎn),下面我們將介紹Momentum、AdaGrad、Adam這3種方法來(lái)取代SGD。

????2.Momentum

????Momentum是“動(dòng)量”的意思,易知其和物理有關(guān)。其數(shù)學(xué)表達(dá)式如下:

Momentum的數(shù)學(xué)表達(dá)式

????這里新出現(xiàn)了一個(gè)變量v,對(duì)應(yīng)物理上的速度。上面的式子表示了物體在梯度方向上受力,在這個(gè)力的作用下,物體的速度增加這一物理法則。Momentum方法給人的感覺(jué)就像是小球在 地面上滾動(dòng)。上面的式子中有αv這一項(xiàng)。在物體不受任何力時(shí),該項(xiàng)承擔(dān)使物體逐漸減速的任務(wù)(α設(shè)定為0.9之類的值),對(duì)應(yīng)物理上的地面摩擦或空氣阻力。

????下面是Momentum的代碼實(shí)現(xiàn):

????使用Momentum解決上面的最優(yōu)化問(wèn)題,其路徑如下圖所示:


基于Momentum的最優(yōu)化的更新路徑

????更新的路徑就像小球在碗中滾動(dòng)一樣。和SGD相比,我們發(fā)現(xiàn) “之”字形的“程度”減輕了。這是因?yàn)殡m然x軸方向上受到的力非常小,但是一直在同一方向上受力,所以朝同一個(gè)方向會(huì)有一定的加速。同樣的,雖然y軸方向上受到的力很大,但是因?yàn)榻换サ厥艿秸较蚝头捶较虻牧?,?們會(huì)互相抵消,所以y軸方向上的速度不穩(wěn)定。因此,和SGD時(shí)的情形相比, 可以更快地朝x軸方向靠近,減弱“之”字形的變動(dòng)程度。

????3.AdaGrad

????在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中,學(xué)習(xí)率(數(shù)學(xué)式中記為η)的值很重要。學(xué)習(xí)率過(guò)小,會(huì)導(dǎo)致學(xué)習(xí)花費(fèi)過(guò)多時(shí)間;反過(guò)來(lái),學(xué)習(xí)率過(guò)大,則會(huì)導(dǎo)致學(xué)習(xí)發(fā)散而不能正確進(jìn)行。在關(guān)于學(xué)習(xí)率的有效技巧中,有一種被稱為學(xué)習(xí)率衰減(learning rate decay)的方法,即隨著學(xué)習(xí)的進(jìn)行,使學(xué)習(xí)率逐漸減小。更進(jìn)一步的,可以為各個(gè)參數(shù)逐漸調(diào)整學(xué)習(xí)率的值。

????AdaGrad會(huì)為參數(shù)的每個(gè)元素適當(dāng)?shù)卣{(diào)整學(xué)習(xí)率,與此同時(shí)進(jìn)行學(xué)習(xí)(AdaGrad的Ada來(lái)自英文單詞Adaptive,即“適當(dāng)?shù)摹钡囊馑迹?。下面是AdaGrad的數(shù)學(xué)表達(dá)式。


AdaGrad的數(shù)學(xué)表達(dá)式

????這里新出現(xiàn)了變量h,如上式所示,它保存了以前的所有梯度值的平方和(上面的式子中的%5Codot%20表示對(duì)應(yīng)矩陣元素的乘法)。然后,在更新參數(shù)時(shí),通過(guò)乘以%5Cfrac%7B1%7D%7B%5Csqrt%7Bh%7D%20%7D%20,就可以調(diào)整學(xué)習(xí)的尺度。這意味著,可以按參數(shù)的元素進(jìn)行學(xué)習(xí)率衰減,使變動(dòng)大的參數(shù)的學(xué)習(xí)率逐漸減小。

????AdaGrad的代碼實(shí)現(xiàn)如下所示。


????這里需要注意的是,最后一行加上了微小值1e-7。這是為了防止當(dāng) self.h[key]中有0時(shí),將0用作除數(shù)的情況。在很多深度學(xué)習(xí)的框架中,這個(gè)微小值也可以設(shè)定為參數(shù),但這里我們用的是1e-7這個(gè)固定值。

????使用AdaGrad實(shí)現(xiàn)上面的最優(yōu)化問(wèn)題,其路徑如下圖所示。


基于AdaGrad的最優(yōu)化的更新路徑

????由上圖的結(jié)果可知,函數(shù)的取值高效地向著最小值移動(dòng)。由于y軸方向上的梯度較大,因此剛開(kāi)始變動(dòng)較大,但是后面會(huì)根據(jù)這個(gè)較大的變動(dòng)按比例進(jìn)行調(diào)整,減小更新的步伐。因此,y軸方向上的更新程度被減弱,“之” 字形的變動(dòng)程度有所衰減。

? ? 此外,AdaGrad會(huì)記錄過(guò)去所有梯度的平方和。因此,學(xué)習(xí)越深入,更新的幅度就越小。實(shí)際上,如果無(wú)止境地學(xué)習(xí),更新量就會(huì)變?yōu)?0,完全不再更新。為了改善這個(gè)問(wèn)題,可以使用 RMSProp方法。RMSProp方法并不是將過(guò)去所有的梯度一視同仁地相加,而是逐漸地遺忘過(guò)去的梯度,在做加法運(yùn)算時(shí)將新梯度的信息更多地反映出來(lái)。

????4.Adam

????Momentum參照小球在碗中滾動(dòng)的物理規(guī)則進(jìn)行移動(dòng),AdaGrad為參數(shù)的每個(gè)元素適當(dāng)?shù)卣{(diào)整更新步伐。將這兩個(gè)方法融合在一起就是Adam方法的基本思路。

????它的理論有些復(fù)雜,直觀地講,就是融合了Momentum和AdaGrad的方法。通過(guò)組合前面兩個(gè)方法的優(yōu)點(diǎn),有望實(shí)現(xiàn)參數(shù)空間的高效搜索。此外,進(jìn)行超參數(shù)的“偏置校正”也是Adam的特征。 這里不再進(jìn)行過(guò)多的說(shuō)明。其搜索路徑如下所示。

????

基于Adam的最優(yōu)化的更新路徑

????在上圖中,基于Adam的更新過(guò)程就像小球在碗中滾動(dòng)一樣。雖然Momentun也有類似的移動(dòng),但是相比之下,Adam的小球左右搖晃的程度有所減輕。這得益于學(xué)習(xí)的更新程度被適當(dāng)?shù)卣{(diào)整了。

????5.使用哪種更新方法呢

????上面我們介紹了SGD、Momentum、AdaGrad、Adam這4種方法,那么用哪種方法好呢?非常遺憾,(目前)并不存在能在所有問(wèn)題中都表現(xiàn)良好的方法。這4種方法各有各的特點(diǎn),都有各自擅長(zhǎng)解決的問(wèn)題和不擅長(zhǎng)解決的問(wèn)題。很多研究中至今仍在使用SGD。Momentum和AdaGrad也是值得一試的方法。最近,很多研究人員和技術(shù)人員都喜歡用Adam。

二、權(quán)重的初始值

????1.可以將權(quán)重初始值設(shè)為0嗎

????后面我們會(huì)介紹抑制過(guò)擬合、提高泛化能力的技巧——權(quán)值衰減(weight decay)。簡(jiǎn)單地說(shuō),權(quán)值衰減就是一種以減小權(quán)重參數(shù)的值為目的進(jìn)行學(xué)習(xí)的方法。通過(guò)減小權(quán)重參數(shù)的值來(lái)抑制過(guò)擬合的發(fā)生。

????如果我們把權(quán)重初始值全部設(shè)為0以減小權(quán)重的值,會(huì)怎么樣呢?從結(jié)論來(lái)說(shuō),將權(quán)重初始值設(shè)為0不是一個(gè)好主意。事實(shí)上,將權(quán)重初始值設(shè)為0的話,將無(wú)法正確進(jìn)行學(xué)習(xí)。這是因?yàn)樵谡`差反向傳播法中,所有的權(quán)重值都會(huì)進(jìn)行相同的更新。比如,在2層神經(jīng)網(wǎng)絡(luò)中,假設(shè)第1層和第2層的權(quán)重為0。這樣一來(lái),正向傳播時(shí),因?yàn)檩斎雽拥臋?quán)重為0,所以第2層的神經(jīng)元全部會(huì)被傳遞相同的值。第2層的神經(jīng)元中全部輸入相同的值,這意味著反向傳播時(shí)第2層的權(quán)重全部都會(huì)進(jìn)行相同的更新.因此,權(quán)重被更新為相同的值,并擁有了對(duì)稱的值(重復(fù)的值)。這使得神經(jīng)網(wǎng)絡(luò)擁有許多不同的權(quán)重的意義喪失了。為了防止“權(quán)重均一化” (嚴(yán)格地講,是為了瓦解權(quán)重的對(duì)稱結(jié)構(gòu)),必須隨機(jī)生成初始值。

????2.隱藏層的激活值的分布

????我們先來(lái)做一個(gè)簡(jiǎn)單的實(shí)驗(yàn),觀察權(quán)重初始值是如何影響隱藏層的激活值的分布的。這里要做的實(shí)驗(yàn)是,向一個(gè)5層神經(jīng)網(wǎng)絡(luò)(激活函數(shù)使用 sigmoid函數(shù))傳入隨機(jī)生成的輸入數(shù)據(jù),用直方圖繪制各層激活值的數(shù)據(jù)分布。

使用標(biāo)準(zhǔn)差為1的高斯分布作為權(quán)重初始值時(shí)的各層激活值的分布

????從上圖可知,各層的激活值呈偏向0和1的分布。這里使用的sigmoid函數(shù)是S型函數(shù),隨著輸出不斷地靠近0(或者靠近1),它的導(dǎo)數(shù)的值逐漸接近0。因此,偏向0和1的數(shù)據(jù)分布會(huì)造成反向傳播中梯度的值不斷變小,最后消失。這個(gè)問(wèn)題稱為梯度消失(gradient vanishing)。層次加深的深度學(xué)習(xí)中,梯度消失的問(wèn)題可能會(huì)更加嚴(yán)重。

????那我們將標(biāo)準(zhǔn)差改成0.01呢?

使用標(biāo)準(zhǔn)差為0.01的高斯分布作為權(quán)重初始值時(shí)的各層激活值的分布

????這次呈集中在0.5附近的分布。因?yàn)椴幌駝偛诺睦幽菢悠?和1,所以不會(huì)發(fā)生梯度消失的問(wèn)題。但是,激活值的分布有所偏向,說(shuō)明在表現(xiàn)力上會(huì)有很大問(wèn)題。為什么這么說(shuō)呢?因?yàn)槿绻卸鄠€(gè)神經(jīng)元都輸出幾乎相同的值,那它們就沒(méi)有存在的意義了。因此,激活值在分布上有所偏向會(huì)出現(xiàn)“表現(xiàn)力受限”的問(wèn)題。

????接著,我們嘗試使用Xavier Glorot等人的論文中推薦的權(quán)重初始值(俗稱“Xavier初始值”)?,F(xiàn)在,在一般的深度學(xué)習(xí)框架中,Xavier初始值已被作為標(biāo)準(zhǔn)使用。Xavier的論文中,為了使各層的激活值呈現(xiàn)出具有相同廣度的分布,推導(dǎo)了合適的權(quán)重尺度。推導(dǎo)出的結(jié)論是,如果前一層的節(jié)點(diǎn)數(shù)為n,則初始值使用標(biāo)準(zhǔn)差為%5Cfrac%7B2%7D%7B%5Csqrt%7Bh%7D%20%7D%20的分布。如下圖所示。

Xavier初始值

????使用Xavier初始值后,前一層的節(jié)點(diǎn)數(shù)越多,要設(shè)定為目標(biāo)節(jié)點(diǎn)的初始值的權(quán)重尺度就越小。使用Xavier初始值后的結(jié)果如下圖所示。從這個(gè)結(jié)果可知,越是后面的層,圖像變得越歪斜,但是呈現(xiàn)了比之前更有廣度的分布。因?yàn)楦鲗娱g傳遞的數(shù)據(jù)有適當(dāng)?shù)膹V度,所以sigmoid函數(shù)的表現(xiàn)力不受限制,有望進(jìn)行高效的學(xué)習(xí)。

使用Xavier初始值作為權(quán)重初始值時(shí)的各層激活值的分布

????3.ReLU的權(quán)重初始值

????Xavier初始值是以激活函數(shù)是線性函數(shù)為前提而推導(dǎo)出來(lái)的。因?yàn)閟igmoid函數(shù)和tanh函數(shù)左右對(duì)稱,且中央附近可以視作線性函數(shù),所以適合使用Xavier初始值。但當(dāng)激活函數(shù)使用ReLU時(shí),一般推薦使用ReLU專用的初始值,也就是Kaiming He等人推薦的初始值,也稱為“He初始值”。當(dāng)前一層的節(jié)點(diǎn)數(shù)為n時(shí),He初始值使用標(biāo)準(zhǔn)差為%5Cfrac%7B2%7D%7B%5Csqrt%7Bh%7D%20%7D%20的高斯分布。當(dāng)Xavier初始值是%5Cfrac%7B1%7D%7B%5Csqrt%7Bh%7D%20%7D%20時(shí),(直觀上)可以解釋為,因?yàn)镽eLU的負(fù)值區(qū)域的值為0,為了使它更有廣度,所以需要2倍的系數(shù)。

????使用不同初始值的結(jié)果如下圖所示。

激活函數(shù)使用ReLU時(shí),不同權(quán)重初始值的激活值分布的變化

????觀察上面的結(jié)果可知,當(dāng)“std = 0.01”(即標(biāo)準(zhǔn)差為0.01的高斯分布)時(shí),各層的激活值非常小。神經(jīng)網(wǎng)絡(luò)上傳遞的是非常小的值,說(shuō)明逆向傳播時(shí)權(quán)重的梯度也同樣很小。這是很嚴(yán)重的問(wèn)題,實(shí)際上學(xué)習(xí)基本上沒(méi)有進(jìn)展。接下來(lái)是初始值為Xavier初始值時(shí)的結(jié)果。在這種情況下,隨著層的加深, 偏向一點(diǎn)點(diǎn)變大。實(shí)際上,層加深后,激活值的偏向變大,學(xué)習(xí)時(shí)會(huì)出現(xiàn)梯度消失的問(wèn)題。而當(dāng)初始值為He初始值時(shí),各層中分布的廣度相同。由于即便層加深,數(shù)據(jù)的廣度也能保持不變,因此逆向傳播時(shí),也會(huì)傳遞合適的值。

????總結(jié)一下,當(dāng)激活函數(shù)使用ReLU時(shí),權(quán)重初始值使用He初始值,當(dāng)激活函數(shù)為sigmoid或tanh等S型曲線函數(shù)時(shí),初始值使用Xavier初始值。這是目前的最佳實(shí)踐。

????三、Batch Normalization

????為了使各層擁有適當(dāng)?shù)膹V度,“強(qiáng)制性”地調(diào)整激活值的分布會(huì)怎樣呢?實(shí)際上,Batch Normalization方法就是基于這個(gè)想法而產(chǎn)生的。

????1.Batch Normalization 的算法

????Batch Norm雖然是一個(gè)問(wèn)世不久的新方法,但已經(jīng)被很多研究人員和技術(shù)人員廣泛使用。為什么Batch Norm這么惹人注目呢?因?yàn)锽atch Norm有以下優(yōu)點(diǎn)。1.可以使學(xué)習(xí)快速進(jìn)行(可以增大學(xué)習(xí)率)。 2.不那么依賴初始值(對(duì)于初始值不用那么神經(jīng)質(zhì))。3.?抑制過(guò)擬合(降低Dropout等的必要性)

????如前所述,Batch Norm的思路是調(diào)整各層的激活值分布使其擁有適當(dāng)?shù)膹V度。為此,要向神經(jīng)網(wǎng)絡(luò)中插入對(duì)數(shù)據(jù)分布進(jìn)行正規(guī)化的層,即Batch Normalization層(下文簡(jiǎn)稱Batch Norm層),如下圖所示。

????

使用了Batch Normalization的神經(jīng)網(wǎng)絡(luò)的例子(Batch Norm層的背景為灰色)

????Batch Norm,顧名思義,以進(jìn)行學(xué)習(xí)時(shí)的mini-batch為單位,按mini-batch進(jìn)行正規(guī)化。具體而言,就是進(jìn)行使數(shù)據(jù)分布的均值為0、方差為1的正規(guī)化。用數(shù)學(xué)式表示的話,如下所示。

????上式所做的是將mini-batch的輸入數(shù)據(jù){x_%7B1%0A%7D%20, x_%7B2%0A%7D%20, ... , x_%7Bm%0A%7D%20}變換為均值為0、方差為1的數(shù)據(jù){%5Chat%7Bx_%7B1%7D%20%7D%20,%5Chat%7Bx_%7B2%7D%20%7D%20...%5Chat%7Bx_%7Bm%0A%7D%20%7D%20} ,非常簡(jiǎn)單。通過(guò)將這個(gè)處理插入到激活函數(shù)的前面(或者后面),可以減小數(shù)據(jù)分布的偏向。接著,Batch Norm層會(huì)對(duì)正規(guī)化后的數(shù)據(jù)進(jìn)行縮放和平移的變換,用數(shù)學(xué)式可以如下表示。

????這里,γ和β是參數(shù)。一開(kāi)始γ = 1,β = 0,然后再通過(guò)學(xué)習(xí)調(diào)整到合適的值。上面就是Batch Norm的算法。這個(gè)算法是神經(jīng)網(wǎng)絡(luò)上的正向傳播。如果使用第5章介紹的計(jì)算圖,Batch Norm可以表示為下圖。

Batch Normalization

????Batch Norm的反向傳播的推導(dǎo)有些復(fù)雜,這里我們不進(jìn)行介紹。

????2.Batch Normalization的評(píng)估

????現(xiàn)在我們使用Batch Norm層進(jìn)行實(shí)驗(yàn)。首先,使用MNIST數(shù)據(jù)集,觀察使用Batch Norm層和不使用Batch Norm層時(shí)學(xué)習(xí)的過(guò)程會(huì)如何變化,結(jié)果如下圖所示。

基于Batch Norm的效果:使用Batch Norm后,學(xué)習(xí)進(jìn)行得更快了

????從上圖的結(jié)果可知,使用Batch Norm后,學(xué)習(xí)進(jìn)行得更快了。

????接著, 給予不同的初始值尺度,觀察學(xué)習(xí)的過(guò)程如何變化。下圖是權(quán)重初始值的標(biāo)準(zhǔn)差為各種不同的值時(shí)的學(xué)習(xí)過(guò)程圖。

圖中的實(shí)線是使用了Batch Norm時(shí)的結(jié)果,虛線是沒(méi)有使用Batch Norm時(shí)
的結(jié)果:圖的標(biāo)題處標(biāo)明了權(quán)重初始值的標(biāo)準(zhǔn)差

????我們發(fā)現(xiàn),幾乎所有的情況下都是使用Batch Norm時(shí)學(xué)習(xí)進(jìn)行得更快。同時(shí)也可以發(fā)現(xiàn),實(shí)際上,在不使用Batch Norm的情況下,如果不賦予一個(gè)尺度好的初始值,學(xué)習(xí)將完全無(wú)法進(jìn)行。

????綜上,通過(guò)使用Batch Norm,可以推動(dòng)學(xué)習(xí)的進(jìn)行。并且,對(duì)權(quán)重初始值變得健壯(“對(duì)初始值健壯”表示不那么依賴初始值)。

?四、正則化

????機(jī)器學(xué)習(xí)的問(wèn)題中,過(guò)擬合是一個(gè)很常見(jiàn)的問(wèn)題。過(guò)擬合指的是只能擬合訓(xùn)練數(shù)據(jù),但不能很好地?cái)M合不包含在訓(xùn)練數(shù)據(jù)中的其他數(shù)據(jù)的狀態(tài)。機(jī)器學(xué)習(xí)的目標(biāo)是提高泛化能力,即便是沒(méi)有包含在訓(xùn)練數(shù)據(jù)里的未觀測(cè)數(shù)據(jù), 也希望模型可以進(jìn)行正確的識(shí)別。

????1.過(guò)擬合

????發(fā)生過(guò)擬合的原因,主要有以下兩個(gè)。1.模型擁有大量參數(shù)、表現(xiàn)力強(qiáng)。 2.?訓(xùn)練數(shù)據(jù)少。

????這里,我們故意滿足這兩個(gè)條件,制造過(guò)擬合現(xiàn)象。為此,要從MNIST數(shù)據(jù)集原本的60000個(gè)訓(xùn)練數(shù)據(jù)中只選定300個(gè),并且,為了增加網(wǎng)絡(luò)的復(fù)雜度,使用7層網(wǎng)絡(luò)(每層有100個(gè)神經(jīng)元,激活函數(shù)為ReLU)。其結(jié)果如下所示。

訓(xùn)練數(shù)據(jù)(train)和測(cè)試數(shù)據(jù)(test)的識(shí)別精度的變化

????過(guò)了 100 個(gè) epoch 左右后,用訓(xùn)練數(shù)據(jù)測(cè)量到的識(shí)別精度幾乎都為100%。但是,對(duì)于測(cè)試數(shù)據(jù),離100%的識(shí)別精度還有較大的差距。如此大的識(shí)別精度差距,是只擬合了訓(xùn)練數(shù)據(jù)的結(jié)果。從圖中可知,模型對(duì)訓(xùn)練時(shí)沒(méi)有使用的一般數(shù)據(jù)(測(cè)試數(shù)據(jù))擬合得不是很好。

????2.權(quán)值衰減

????權(quán)值衰減是一直以來(lái)經(jīng)常被使用的一種抑制過(guò)擬合的方法。該方法通過(guò)在學(xué)習(xí)的過(guò)程中對(duì)大的權(quán)重進(jìn)行懲罰,來(lái)抑制過(guò)擬合。很多過(guò)擬合原本就是因?yàn)闄?quán)重參數(shù)取值過(guò)大才發(fā)生的。

????復(fù)習(xí)一下,神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)目的是減小損失函數(shù)的值。這時(shí),例如為損失函數(shù)加上權(quán)重的平方范數(shù)(L2范數(shù))。這樣一來(lái),就可以抑制權(quán)重變大。用符號(hào)表示的話,如果將權(quán)重記為W,L2范數(shù)的權(quán)值衰減就是,然 后將這個(gè)%5Cfrac%7B1%7D%7B2%7D%5Clambda%20W%5E2加到損失函數(shù)上。這里,λ是控制正則化強(qiáng)度的超參數(shù)。λ設(shè)置得越大,對(duì)大的權(quán)重施加的懲罰就越重。此外,%5Cfrac%7B1%7D%7B2%7D%5Clambda%20W%5E2開(kāi)頭的%5Cfrac%7B1%7D%7B2%7D%20是用于將%5Cfrac%7B1%7D%7B2%7D%5Clambda%20W%5E2的求導(dǎo)結(jié)果變成λW的調(diào)整用常量。

????對(duì)于所有權(quán)重,權(quán)值衰減方法都會(huì)為損失函數(shù)加上%5Cfrac%7B1%7D%7B2%7D%5Clambda%20W%5E2 。因此,在求權(quán)重梯度的計(jì)算中,要為之前的誤差反向傳播法的結(jié)果加上正則化項(xiàng)的導(dǎo)數(shù)λW。

????現(xiàn)在我們來(lái)進(jìn)行實(shí)驗(yàn)。對(duì)于剛剛進(jìn)行的實(shí)驗(yàn),應(yīng)用λ = 0.1的權(quán)值衰減,結(jié)果如下圖所示。

使用了權(quán)值衰減的訓(xùn)練數(shù)據(jù)(train)和測(cè)試數(shù)據(jù)(test)的識(shí)別精度的變化

????如上圖所示,雖然訓(xùn)練數(shù)據(jù)的識(shí)別精度和測(cè)試數(shù)據(jù)的識(shí)別精度之間有差距,但是與沒(méi)有使用權(quán)值衰減的的結(jié)果相比,差距變小了。這說(shuō)明過(guò)擬合受到了抑制。此外,還要注意,訓(xùn)練數(shù)據(jù)的識(shí)別精度沒(méi)有達(dá)到100%(1.0)。

????3.Dropout

????權(quán)值衰減方法可以簡(jiǎn)單地實(shí)現(xiàn),在某種程度上能夠抑制過(guò)擬合。但是,如果網(wǎng)絡(luò)的模型變得很復(fù)雜,只用權(quán)值衰減就難以應(yīng)對(duì)了。在這種情況下,我們經(jīng)常會(huì)使用Dropout方法。

????Dropout是一種在學(xué)習(xí)的過(guò)程中隨機(jī)刪除神經(jīng)元的方法。訓(xùn)練時(shí),隨機(jī)選出隱藏層的神經(jīng)元,然后將其刪除。被刪除的神經(jīng)元不再進(jìn)行信號(hào)的傳遞。訓(xùn)練時(shí),每傳遞一次數(shù)據(jù),就會(huì)隨機(jī)選擇要?jiǎng)h除的神經(jīng)元。然后,測(cè)試時(shí),雖然會(huì)傳遞所有的神經(jīng)元信號(hào),但是對(duì)于各個(gè)神經(jīng)元的輸出, 要乘上訓(xùn)練時(shí)的刪除比例后再輸出。其結(jié)構(gòu)如下圖所示。

?Dropout的概念圖:左邊是一般的神經(jīng)網(wǎng)絡(luò),右邊是應(yīng)用了
Dropout的網(wǎng)絡(luò)。Dropout通過(guò)隨機(jī)選擇并刪除神經(jīng)元,停止向前傳遞信號(hào)

????下面我們來(lái)實(shí)現(xiàn)Dropout。這里的實(shí)現(xiàn)重視易理解性。不過(guò),因?yàn)橛?xùn)練時(shí)如果進(jìn)行恰當(dāng)?shù)挠?jì)算的話,正向傳播時(shí)單純地傳遞數(shù)據(jù)就可以了(不用乘以刪除比例),所以深度學(xué)習(xí)的框架中進(jìn)行了這樣的實(shí)現(xiàn)。

????這里的要點(diǎn)是,每次正向傳播時(shí),self.mask中都會(huì)以False的形式保存要?jiǎng)h除的神經(jīng)元。self.mask會(huì)隨機(jī)生成和x形狀相同的數(shù)組,并將值比dropout_ratio大的元素設(shè)為True。反向傳播時(shí)的行為和ReLU相同。也就是說(shuō), 正向傳播時(shí)傳遞了信號(hào)的神經(jīng)元,反向傳播時(shí)按原樣傳遞信號(hào);正向傳播時(shí)沒(méi)有傳遞信號(hào)的神經(jīng)元,反向傳播時(shí)信號(hào)將停在那里。

????現(xiàn)在,我們使用MNIST數(shù)據(jù)集進(jìn)行驗(yàn)證,以確認(rèn)Dropout的效果。其結(jié)果如下圖所示。

左邊沒(méi)有使用Dropout,右邊使用了Dropout(dropout_rate=0.15)

????上圖中,通過(guò)使用Dropout,訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的識(shí)別精度的差距變小了。并且,訓(xùn)練數(shù)據(jù)也沒(méi)有到達(dá)100%的識(shí)別精度。像這樣,通過(guò)使用Dropout,即便是表現(xiàn)力強(qiáng)的網(wǎng)絡(luò),也可以抑制過(guò)擬合。

五、超參數(shù)的驗(yàn)證

????神經(jīng)網(wǎng)絡(luò)中,除了權(quán)重和偏置等參數(shù),超參數(shù)(hyper-parameter)也經(jīng)常出現(xiàn)。這里所說(shuō)的超參數(shù)是指,比如各層的神經(jīng)元數(shù)量、batch大小、參數(shù)更新時(shí)的學(xué)習(xí)率或權(quán)值衰減等。如果這些超參數(shù)沒(méi)有設(shè)置合適的值,模型的性能就會(huì)很差。雖然超參數(shù)的取值非常重要,但是在決定超參數(shù)的過(guò)程中 一般會(huì)伴隨很多的試錯(cuò)。本節(jié)將介紹盡可能高效地尋找超參數(shù)的值的方法。

????1.驗(yàn)證數(shù)據(jù)

????之前我們使用的數(shù)據(jù)集分成了訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù),訓(xùn)練數(shù)據(jù)用于學(xué)習(xí),測(cè)試數(shù)據(jù)用于評(píng)估泛化能力。由此,就可以評(píng)估是否只過(guò)度擬合了訓(xùn)練數(shù)據(jù) (是否發(fā)生了過(guò)擬合),以及泛化能力如何等。

????下面我們要對(duì)超參數(shù)設(shè)置各種各樣的值以進(jìn)行驗(yàn)證。這里要注意的是,不能使用測(cè)試數(shù)據(jù)評(píng)估超參數(shù)的性能。這一點(diǎn)非常重要,但也容易被忽視。這是因?yàn)槿绻褂脺y(cè)試數(shù)據(jù)調(diào)整超參數(shù),超參數(shù)的值會(huì)對(duì)測(cè)試數(shù)據(jù)發(fā)生過(guò)擬合。換句話說(shuō),用測(cè)試數(shù)據(jù)確認(rèn)超參數(shù)的值的“好壞”,就會(huì)導(dǎo)致超參數(shù)的值被調(diào)整為只擬合測(cè)試數(shù)據(jù)。 這樣的話,可能就會(huì)得到不能擬合其他數(shù)據(jù)、泛化能力低的模型。

????因此,調(diào)整超參數(shù)時(shí),必須使用超參數(shù)專用的確認(rèn)數(shù)據(jù)。用于調(diào)整超參數(shù)的數(shù)據(jù),一般稱為驗(yàn)證數(shù)據(jù)(validation data)。我們使用這個(gè)驗(yàn)證數(shù)據(jù)來(lái)評(píng)估超參數(shù)的好壞。

????根據(jù)不同的數(shù)據(jù)集,有的會(huì)事先分成訓(xùn)練數(shù)據(jù)、驗(yàn)證數(shù)據(jù)、測(cè)試數(shù)據(jù)三部分,有的只分成訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)兩部分,有的則不進(jìn)行分割。在這種情況下,用戶需要自行進(jìn)行分割。接下來(lái),我們使用驗(yàn)證數(shù)據(jù)觀察超參數(shù)的最優(yōu)化方法。

????2.超參數(shù)的最優(yōu)化

????進(jìn)行超參數(shù)的最優(yōu)化時(shí),逐漸縮小超參數(shù)的“好值”的存在范圍非常重要。所謂逐漸縮小范圍,是指一開(kāi)始先大致設(shè)定一個(gè)范圍,從這個(gè)范圍中隨機(jī)選出一個(gè)超參數(shù)(采樣),用這個(gè)采樣到的值進(jìn)行識(shí)別精度的評(píng)估;然后,多次重復(fù)該操作,觀察識(shí)別精度的結(jié)果,根據(jù)這個(gè)結(jié)果縮小超參數(shù)的“好值”的范圍。通過(guò)重復(fù)這一操作,就可以逐漸確定超參數(shù)的合適范圍。

????超參數(shù)的范圍只要“大致地指定”就可以了。所謂“大致地指定”,是指以“10的階乘”的尺度指定范圍。在超參數(shù)的搜索中,需要盡早放棄那些不符合邏輯的超參數(shù)。于是,在超參數(shù)的最優(yōu)化中,減少學(xué)習(xí)的epoch,縮短一次評(píng)估所需的時(shí)間是一個(gè)不錯(cuò)的辦法。

????以上就是超參數(shù)的最優(yōu)化的內(nèi)容,簡(jiǎn)單歸納一下,如下所示。

????步驟0設(shè)定超參數(shù)的范圍。?

????步驟1從設(shè)定的超參數(shù)范圍中隨機(jī)采樣。?

????步驟2使用步驟1中采樣到的超參數(shù)的值進(jìn)行學(xué)習(xí),通過(guò)驗(yàn)證數(shù)據(jù)評(píng)估識(shí)別精度(但是要將epoch設(shè)置得很?。?。?

????步驟3重復(fù)步驟1和步驟2(100次等),根據(jù)它們的識(shí)別精度的結(jié)果,縮小超參數(shù)的范圍。

????反復(fù)進(jìn)行上述操作,不斷縮小超參數(shù)的范圍,在縮小到一定程度時(shí),從該范圍中選出一個(gè)超參數(shù)的值。這就是進(jìn)行超參數(shù)的最優(yōu)化的一種方法。

????在超參數(shù)的最優(yōu)化中,如果需要更精煉的方法,可以使用貝葉斯最優(yōu)化(Bayesian optimization)。

????3.超參數(shù)最優(yōu)化的實(shí)現(xiàn)

????現(xiàn)在,我們使用MNIST數(shù)據(jù)集進(jìn)行超參數(shù)的最優(yōu)化。這里我們將學(xué)習(xí)率和控制權(quán)值衰減強(qiáng)度的系數(shù)(下文稱為“權(quán)值衰減系數(shù)”)這兩個(gè)超參數(shù)的搜索問(wèn)題作為對(duì)象。

????在該實(shí)驗(yàn)中,權(quán)值衰減系數(shù)的初始范圍為10?8到10?4,學(xué)習(xí)率的初始范圍為10?6到10?2。此時(shí),超參數(shù)的隨機(jī)采樣的代碼如下所示。

????像這樣進(jìn)行隨機(jī)采樣后,再使用那些值進(jìn)行學(xué)習(xí)。之后,多次使用各種超參數(shù)的值重復(fù)進(jìn)行學(xué)習(xí),觀察合乎邏輯的超參數(shù)在哪里。這里省略了具體實(shí)現(xiàn),只列出了結(jié)果。結(jié)果如下圖所示。

實(shí)線是驗(yàn)證數(shù)據(jù)的識(shí)別精度,虛線是訓(xùn)練數(shù)據(jù)的識(shí)別精度

????上圖中,按識(shí)別精度從高到低的順序排列了驗(yàn)證數(shù)據(jù)的學(xué)習(xí)的變化。 從圖中可知,直到“Best-5”左右,學(xué)習(xí)進(jìn)行得都很順利。因此,我們來(lái)觀察一下“Best-5”之前的超參數(shù)的值(學(xué)習(xí)率和權(quán)值衰減系數(shù)),結(jié)果如下所示。

????從這個(gè)結(jié)果可以看出,學(xué)習(xí)率在0.001到0.01、權(quán)值衰減系數(shù)在10?8 到 10?6 之間時(shí),學(xué)習(xí)可以順利進(jìn)行。像這樣,觀察可以使學(xué)習(xí)順利進(jìn)行的超參數(shù)的范圍,從而縮小值的范圍。然后,在這個(gè)縮小的范圍中重復(fù)相同的操作。這樣就能縮小到合適的超參數(shù)的存在范圍,然后在某個(gè)階段,選擇一個(gè)最終的超參數(shù)的值。

魚(yú)書(shū)(深度學(xué)習(xí)入門):第六章 與學(xué)習(xí)相關(guān)的技巧的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
无锡市| 霍山县| 寿阳县| 宿迁市| 锦州市| 宁陵县| 巴彦县| 沧源| 囊谦县| 北宁市| 吴忠市| 方城县| 钟山县| 上思县| 南宁市| 桓仁| 托克逊县| 华容县| 湄潭县| 措美县| 新余市| 宜黄县| 雷州市| 洛南县| 万山特区| 大英县| 新余市| 玉环县| 万宁市| 长沙县| 宜阳县| 鄄城县| 时尚| 南溪县| 富锦市| 靖远县| 安徽省| 西乡县| 东辽县| 琼海市| 商洛市|