0
本文作者: 李尊 | 2016-08-01 18:06 |
引言
本文將進(jìn)一步探討有關(guān)卷積神經(jīng)網(wǎng)絡(luò)的更多細(xì)節(jié),注:以下文章中部分內(nèi)容較為復(fù)雜,為了保證其簡(jiǎn)明性,部分內(nèi)容詳細(xì)解釋的研究文獻(xiàn)會(huì)標(biāo)注在后。
步幅和填充
讓我們看回之前的轉(zhuǎn)換層,在第一部分中我們提到過(guò)過(guò)濾器、接受場(chǎng)?,F(xiàn)在,我們可以通過(guò)改變2個(gè)主要參數(shù)來(lái)校正每一層的行為。在選擇過(guò)濾器大小之后,我們也必須選擇“步幅”和“填充”。
步幅控制著過(guò)濾器如何進(jìn)行卷積。在第一部分中我們有提到一個(gè)例子,過(guò)濾器圍繞輸入體量通過(guò)一次移動(dòng)一個(gè)單位進(jìn)行卷積。過(guò)濾器移動(dòng)的總量即步幅。步長(zhǎng)通常以一個(gè)方法進(jìn)行設(shè)置使輸出量是一個(gè)整數(shù),而不是一個(gè)分?jǐn)?shù)。讓我們看看一個(gè)例子,想象一個(gè)7×7輸入體量,一個(gè)3×3過(guò)濾器(出于簡(jiǎn)化角度考慮忽略第三維度),另外還有一個(gè)步幅1。這個(gè)就是我們習(xí)慣的情況。
是不是和之前的一樣?你還可以嘗試猜測(cè)下當(dāng)步幅增加到2,輸出量會(huì)發(fā)生什么情況。
因此,正如你所看到的那樣,接受場(chǎng)正在以2個(gè)單位進(jìn)行移動(dòng),同時(shí)輸出量也會(huì)減少。注意如果我們?cè)噲D將我們的步幅設(shè)置為3,那么其在間距和確保接受場(chǎng)適合的輸入量?jī)蓚€(gè)方面會(huì)出現(xiàn)問(wèn)題。通常情況下,如果程序員希望接受場(chǎng)重疊更少以及更小的空間尺寸的話,他們通常會(huì)增加步幅。
現(xiàn)在我們來(lái)接著關(guān)注填充,在正式開(kāi)始之前,讓我們?cè)O(shè)想一個(gè)場(chǎng)景。當(dāng)你將三個(gè)5×5×3的過(guò)濾器應(yīng)用到一個(gè)32×32×3的輸入體量中時(shí)會(huì)發(fā)生什么?
注意空間維度會(huì)降低。當(dāng)我們持續(xù)應(yīng)用卷積層時(shí),體量的大小將減少得比我們想的快。在我們神經(jīng)網(wǎng)絡(luò)的早期層中,我們要保存盡可能多的原始輸入信息,以便我們可以提取這些低階特征。我們想要應(yīng)用同樣的卷積層,但我們想將輸出量保持在32 x 32 x 3。要做到這個(gè),我們可以將大小為2的零填充(zero padding)應(yīng)用到該層。零填充(zero padding)在邊界周?chē)畛淞酥禐榱愕妮斎肓?。如果我們考慮大小為2的零填充(zero padding),那么這將導(dǎo)致在一個(gè)36×36×3輸入量。
如果有1的步幅并且將零填充(zero padding)的大小設(shè)置為
K是過(guò)濾器大小,輸入和輸出量將會(huì)一直保持同樣的空間維度
對(duì)于任何給定的卷積層輸出大小的計(jì)算公式
O是輸出大小,K是過(guò)濾器大小,P是填充,S是步幅。
選擇超參數(shù)
我們?cè)趺创_定需要用多少層、多少卷積層、過(guò)濾器的大小是什么,或者步幅和填充的值?這些都是重要的問(wèn)題,并且沒(méi)有一套所有的研究人員都在使用的標(biāo)準(zhǔn)。這是因?yàn)樯窠?jīng)網(wǎng)絡(luò)在很大程度上取決于你所擁有的數(shù)據(jù)類(lèi)型。數(shù)據(jù)大小因?yàn)閳D像的復(fù)雜性、圖像處理任務(wù)的類(lèi)型以及更多因素而千差萬(wàn)別。當(dāng)你看著自己的數(shù)據(jù)集時(shí),選擇超參數(shù)的一種方式是發(fā)現(xiàn)在一個(gè)適當(dāng)?shù)姆秶鷦?chuàng)造圖像抽象的正確組合。
修正線性單元(ReLU)層
在每個(gè)卷積層后,習(xí)慣在其后馬上添加一個(gè)非線性層(或激活層)。這一層的目的是將非線性引入系統(tǒng),基本上是在卷積層進(jìn)行線性運(yùn)算(只是元素的乘法和累加)。在過(guò)去都是像tanh 或者sigmoid的線性算法,但研究人員發(fā)現(xiàn)ReLU層效果更好,因?yàn)榫W(wǎng)絡(luò)訓(xùn)練速度能加快很多(因?yàn)橛?jì)算效率)且精度沒(méi)有顯著差異。它也有助于緩解消失的梯度問(wèn)題,這是因?yàn)榫W(wǎng)絡(luò)訓(xùn)練較低層的速度非常緩慢,梯度通過(guò)不同的層級(jí)指數(shù)下降。ReLU層的采用的函數(shù)f(x)= max(0,x)所有值的輸入量。基本上,這一層將所有的負(fù)激活變成了0。這一層提高了模型的非線性特性,且整體網(wǎng)絡(luò)不影響卷積層的接受場(chǎng)。感興趣的還可以參看深度學(xué)習(xí)之父Geoffrey Hinton的論文Geoffrey Hinton
池化層(Pooling Layers)
經(jīng)過(guò)一些ReLU層之后,程序員可以選擇池化層,它也被稱(chēng)為下采樣層。在這一類(lèi)別中,也有幾種層可供選擇,但maxpooling(最大池化層)是最受歡迎的。它需要一個(gè)過(guò)濾器(通常大小2x2)和一個(gè)相同的步幅長(zhǎng)度,然后將其應(yīng)用在過(guò)濾器卷積周邊每一個(gè)分區(qū)的輸入和輸出的最大量處。
池層的其他選項(xiàng)(pooling layers)還有是平均池(average pooling)和 L2-norm pooling。這層背后的原因是一旦我們知道一個(gè)特定的特性是其原始輸入量(將有一個(gè)高激活值),那么其確切位置不重要的??梢韵胂?,這一層大大降低了輸入體積的空間維度(長(zhǎng)度和寬度的變化,但不是深度)。這樣做有兩個(gè)主要目的,首先是參數(shù)或權(quán)重的量減少了75%,從而降低了計(jì)算成本。其次,它能夠控制過(guò)度擬合。這個(gè)術(shù)語(yǔ)是指當(dāng)一個(gè)模型針對(duì)訓(xùn)練例子如此調(diào)整的話,它是不能夠概括驗(yàn)證和測(cè)試集的。過(guò)度擬合的特征是有一個(gè)模型能得到100%或99%的訓(xùn)練集,但只有50%的測(cè)試數(shù)據(jù)。
降層(Dropout Layers)
降層在神經(jīng)網(wǎng)絡(luò)中有一個(gè)十分特別的功能。在上一節(jié)中,我們討論了過(guò)度擬合的問(wèn)題。在訓(xùn)練之后,網(wǎng)絡(luò)的權(quán)重被調(diào)整到給定的訓(xùn)練樣本上,這樣的話當(dāng)給定新的樣本時(shí)神經(jīng)網(wǎng)絡(luò)的表現(xiàn)并不好。降層這個(gè)理念在自然中過(guò)分單純的。
降層通過(guò)在前向傳播過(guò)程中將其設(shè)置為零在該層中隨機(jī)“拋棄”一些激活,就是這么簡(jiǎn)單。在這個(gè)過(guò)程中這樣做有什么好處呢?在某種程度上,它迫使網(wǎng)絡(luò)變成“多余”的。即使一些激活在過(guò)程中被拋棄,神經(jīng)網(wǎng)絡(luò)也應(yīng)該能夠?qū)μ囟颖咎峁┱_的分類(lèi)或者輸出。它確保網(wǎng)絡(luò)對(duì)于訓(xùn)練數(shù)據(jù)不會(huì)過(guò)于“合適”,從而有助于緩解過(guò)度擬合的問(wèn)題。重要的一個(gè)這一層只在訓(xùn)練過(guò)程中使用,而不是在測(cè)試中。
網(wǎng)絡(luò)層網(wǎng)絡(luò)
網(wǎng)絡(luò)層網(wǎng)絡(luò)指的是一個(gè)使用1 x 1大小的過(guò)濾器的卷積層?,F(xiàn)在,第一眼你可能會(huì)想知道為什么這種類(lèi)型的層會(huì)有幫助,因?yàn)榻邮軋?chǎng)通常是大于他們映射空間的。然而,我們必須記住這些1x1卷積跨度有一定的深度,所以我們可以認(rèn)為它是一個(gè)1 x 1 x N的卷積,其中N是該層中過(guò)濾器應(yīng)用的數(shù)量。實(shí)際上這層是執(zhí)行一個(gè)N-D 元素級(jí)的相乘,其中N是輸入量成層深度。
分類(lèi),定位,檢測(cè),分割
在這節(jié)中我們使用第一部分曾提到過(guò)的例子,來(lái)看一下圖像分類(lèi)任務(wù)。圖像分類(lèi)任務(wù)是將輸入圖像識(shí)別并輸入一系列的圖像類(lèi)別的過(guò)程,然而當(dāng)我們將對(duì)象定位作為任務(wù)時(shí),我們的工作不僅是得到一個(gè)分類(lèi)標(biāo)簽,另外還需要?jiǎng)澏ㄒ粋€(gè)對(duì)象在圖像中的范圍。
同樣還有對(duì)象檢測(cè)任務(wù),需要將圖像中所有對(duì)象進(jìn)行圖像定位任務(wù)。因此,在圖像中將會(huì)有多個(gè)劃定范圍還有多個(gè)分類(lèi)標(biāo)簽。
最后,還有對(duì)象分割任務(wù),對(duì)象分割任務(wù)指的是輸出一個(gè)類(lèi)的標(biāo)簽,以及輸入圖像中的每一個(gè)對(duì)象的輪廓。
遷移學(xué)習(xí)(Transfer Learning)
目前在深度社區(qū)的一個(gè)常見(jiàn)的誤解是:沒(méi)有谷歌那樣的數(shù)據(jù)量的話,不可能建立一個(gè)有效的深度學(xué)習(xí)模型。雖然數(shù)據(jù)確實(shí)是創(chuàng)建神經(jīng)網(wǎng)絡(luò)的一個(gè)重要組成部分,但是遷移學(xué)習(xí)的理念能夠有助于減少數(shù)據(jù)的需求。遷移學(xué)習(xí)是經(jīng)過(guò)一個(gè)預(yù)先訓(xùn)練的模型(網(wǎng)絡(luò)的權(quán)重和參數(shù)已通過(guò)一個(gè)大數(shù)據(jù)集或者別人訓(xùn)練),并且用你自己的數(shù)據(jù)集進(jìn)行“微調(diào)”的過(guò)程。這個(gè)理念就是預(yù)先訓(xùn)練的模型將作為一個(gè)特征提取器,將網(wǎng)絡(luò)的最后一層刪除并用自己的分類(lèi)器替換它(取決于您的問(wèn)題空間)。然后凍結(jié)所有其他層的權(quán)重,并正常訓(xùn)練網(wǎng)絡(luò)(凍結(jié)層意味著在梯度下降/優(yōu)化過(guò)程中能夠不改變權(quán)重)。
讓我們來(lái)弄清楚為什么這樣會(huì)有用,舉例來(lái)說(shuō)我們?cè)贗mageNet上的預(yù)先訓(xùn)練模型(ImageNet是一個(gè)數(shù)據(jù)集,包含超過(guò)1000類(lèi)的1400萬(wàn)幅圖像)。當(dāng)我們考慮網(wǎng)絡(luò)的低層時(shí),我們知道他們會(huì)檢測(cè)到邊緣和曲線等特征?,F(xiàn)在除非你有一個(gè)非常獨(dú)特的問(wèn)題空間和數(shù)據(jù)集,你的網(wǎng)絡(luò)也會(huì)需要檢測(cè)曲線和邊緣。與其通過(guò)一個(gè)隨機(jī)初始化的權(quán)重來(lái)訓(xùn)練整個(gè)網(wǎng)絡(luò),我們可以使用預(yù)先訓(xùn)練的(并凍結(jié))模型的權(quán)重,并專(zhuān)注于更重要的(更高的)層級(jí)的訓(xùn)練。如果你的數(shù)據(jù)集與ImageNet等完全不同,那么你就要多培養(yǎng)你的層并凍結(jié)一些低級(jí)層。
PS : 本文由雷鋒網(wǎng)獨(dú)家編譯,未經(jīng)許可拒絕轉(zhuǎn)載!
via Adit Deshpande
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。