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