手把手教你理解卷积神经网络
摘要:?卷積神經(jīng)網(wǎng)絡(luò)是一種識別和理解圖像的神經(jīng)網(wǎng)絡(luò)。本文將從不同的層次來介紹卷積神經(jīng)網(wǎng)絡(luò)。
? ??手把手教你理解卷積神經(jīng)網(wǎng)絡(luò)(一)
? ? ? ? ?本文將繼續(xù)為你介紹關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的知識。為了保持文章的簡潔性和全面性我將為你提供研究論文的鏈接,里邊會有更為詳細的解釋。
確定寬度和填充(Stride and Padding)
讓我們看看轉(zhuǎn)換層,還記得濾波器、接受域和卷積嗎?現(xiàn)在我們可以改變兩個主要參數(shù)來修改每層的運行狀態(tài)。在選擇濾波器大小之后,還要選擇寬度和填充。
用寬度來控制濾波器如何在輸入量的上下范圍內(nèi)進行卷積。例如,一個7*7的輸入量,一個3*3的濾波器(忽略第三維度的簡單性),寬度為1。
?
看看你是否能盡力猜出隨著寬度增加到2,輸出量會發(fā)生什么變化。
?
因此,正如你所看到的那樣,接受域現(xiàn)在在兩個單元之間來回變換,并且輸出體積也縮小了。請注意,如果我們試圖將寬度調(diào)整為3,那么我們就有間隔的問題了,還要確保接受域適合輸入量。通常來說,開發(fā)者如果希望接受域重疊較少,并且希望有較小的空間維度,則會增大寬度。
讓我們看看填充部分,但是在開始之前,讓我們考慮一個場景。當你把三個5*5*3的濾波器應用到一個32*32*3的輸入量時會發(fā)生什么呢?輸出量會是28*28*3。注意,空間維度減少了。當我們保持應用轉(zhuǎn)換層時,輸出量的大小將比我們想象的減少的快。在我們網(wǎng)絡(luò)的前面的那些層中,我們想盡可能多地保存原始輸入量的信息,這樣我們就可以提取那些低級的特性了。這樣說吧,我們想應用同樣的轉(zhuǎn)換層,但想要的輸出量要保持在32 x 32 x 3。要做到這一點,我們可以對該層應用一個大小為2的零填充。零填充在邊界上以零為輸入的量。如果我們考慮兩個中的一個零填充,那么這將會導致一個36*36*3的輸入量。
?
如果你有一個為1的寬度,并且你把零填充的大小設(shè)置為:
當濾波器的大小為K時,輸入量和輸出量將始終具有相同的空間維度。
對于任何給定的轉(zhuǎn)換層的輸出量的計算公式是:
上面的公式中,O是輸出的高度/長度,W是輸入的高度/長度,K是濾波器的大小,P是填充,S是寬度。
選擇參數(shù)(Choosing Hyperparameters)
我們?nèi)绾沃烙昧硕嗌賹?#xff0c;有多少轉(zhuǎn)換層,濾波器的大小是多少,或者寬度和填充是什么值呢?這些問題我們都不知曉,因為網(wǎng)絡(luò)將在很大程度上依賴于你的數(shù)據(jù)類型。數(shù)據(jù)可以根據(jù)大小、圖像的復雜度、圖像處理任務的類型以及更多的不同因素而變化。當看著你的數(shù)據(jù)集時,一個考慮如何選擇參數(shù)的方式是在一個適當?shù)囊?guī)模找到正確的創(chuàng)建圖像抽象的組合。
ReLU (被調(diào)整的線性單元)層
在每個轉(zhuǎn)換層的后面,就是常規(guī)的應用非線性層(或激活層)。這一層的目的是非線性地引入一個系統(tǒng),這個系統(tǒng)基本上是在轉(zhuǎn)換層一直計算線性操作(只是元素方式的乘法和加法運算)。
在之前,一直用的是非線性函數(shù),如tanh和sigmoid,但研究人員發(fā)現(xiàn)ReLU層的效率遠遠更好,這是因為在對精度沒有產(chǎn)生顯著不同的情況下,網(wǎng)絡(luò)能訓練的更快(因為計算效率更高)。它也有助于緩和消失梯度的麻煩,這是一個問題,因為較低層的網(wǎng)絡(luò)訓練是非常緩慢的,因為在這些層里梯度呈指數(shù)級別的下降層(解釋這個問題可能超出了本文的范圍,點擊這里和這里來查看具體的解釋和描述)。ReLU層調(diào)用函數(shù)f(x)= max(0,x)來提供輸入量的所有值。基本上來說,這一層剛好改變所有的負激活為0。這一層在不影響轉(zhuǎn)換層的接受域的情況下,提高了模型和整個網(wǎng)絡(luò)的非線性的屬性。
池化層(Pooling Layers)
經(jīng)過一些ReLU層,開發(fā)者可以選擇應用一個池化層,它也被稱為縮減采樣層。在這一類別中,也有其它幾個層的選擇,與最大池化(maxpooling)一起是最受歡迎的。這基本上需要一個濾波器(通常大小為2*2)和相同尺寸的寬度。然后將其應用于輸入量和在每個有濾波器卷積的子區(qū)域中輸出的最大數(shù)量。
?
池化層的其他選項是平均池化和L2-norm池化。這個層背后的直觀理解是,一旦我們知道一個特定的特征是在原始輸入量中(將會有一個高激活值),它的確切位置并不像它相對于其它特征的位置那么重要。可以想象,這一層極大地減少了輸入量的空間維度(長度和寬度的變化,而不是深度)。這有兩個主要目的。首先,參數(shù)或權(quán)重的數(shù)量減少了75%,從而降低了計算的成本。其次,它將控制過度擬合,這指的是當一個模型被調(diào)整到訓練樣本時,它不能很好地為驗證和測試集進行標準化。過度擬合的表現(xiàn)是,有一個模型,在訓練集上得到100%或99%的表現(xiàn),但在測試數(shù)據(jù)上只有50%。
Dropout Layers
現(xiàn)在,Dropout Layers在神經(jīng)網(wǎng)絡(luò)中有一個非常特殊的功能。在上一節(jié)中,我們討論了過度擬合的問題,訓練結(jié)束后,網(wǎng)絡(luò)的權(quán)重被調(diào)整到了已給的訓練樣本,當提供了新的訓練樣本時網(wǎng)絡(luò)就執(zhí)行的不那么好了。Dropout的想法在本質(zhì)上是過于簡單化的。這一層“刪除”一個隨機激活集,通過將它們設(shè)置為零。即使某些激活被刪除了,網(wǎng)絡(luò)也應該能夠為特定的樣本提供正確的分類或輸出。它確保網(wǎng)絡(luò)變得不“適合”訓練數(shù)據(jù),從而有助于緩解過度擬合的問題。一個重要的注意事項是,這一層僅用于訓練期間,而不是在測試期間使用。
網(wǎng)絡(luò)層的網(wǎng)絡(luò)(Network in Network Layers)
網(wǎng)絡(luò)層的網(wǎng)絡(luò)指的是一個應用1 x 1大小的濾波器的轉(zhuǎn)換層。首先,既然接受域通常要比它們映射到的空間大,你可能想知道為什么層的類型會有幫助。然而,我們必須記住,這些1x1卷積的跨度是有一定深度的,所以可以認為它是一個1 x 1 x N的卷積,其中N是濾波器在這一層中應用的數(shù)量。
分類、定位、檢查、分割(Classification, Localization, Detection, Segmentation)
當我們執(zhí)行一個類似于對象本地化這樣的任務時,不僅僅是生成一個類標簽,還包括一個用來描述對象在圖片中位置的包圍盒(bounding box)。
?
我們也有對象檢測的任務,需要對圖像中的所有對象進行定位。因此,將有多個包圍盒和多個類標簽。
最后,我們還進行了對象分割,其中的任務是輸出一個類標簽以及一個輸入圖像中每個對象的輪廓。
?
遷移學習(Transfer Learning)
現(xiàn)在,在深度學習社區(qū)的一個常見的誤解是:沒有超大的數(shù)據(jù)量,你不可能創(chuàng)建有效的深度學習模型。數(shù)據(jù)固然是創(chuàng)建網(wǎng)絡(luò)的關(guān)鍵部分,但也不是決定部分,遷移學習的思想有助于減少數(shù)據(jù)需求。遷移學習是接受預訓練模型(由其他人在大數(shù)據(jù)集上訓練過的網(wǎng)絡(luò)的權(quán)重和參數(shù))并用自己的數(shù)據(jù)集對模型進行“微調(diào)”的過程。這個想法是這個預先訓練的模型將作為一個特征提取器。你將刪除網(wǎng)絡(luò)的最后一層,并用自己的分類器來代替。然后凍結(jié)所有其它層的權(quán)重,并正常地訓練網(wǎng)絡(luò)(凍結(jié)這些層意味著在梯度下降/優(yōu)化過程中不改變權(quán)重)。
我們正在探討的是預訓練模型在ImageNet上訓練(ImageNet是一個數(shù)據(jù)集,在1000以上個類里包含1400萬幅圖像)。當考慮網(wǎng)絡(luò)上那些較低的層時,我們知道它們將檢測到像邊緣和曲線這樣的特征。現(xiàn)在,除非你有一個非常獨特的問題空間和數(shù)據(jù)集,你的網(wǎng)絡(luò)也將需要檢測曲線和邊緣。與其通過一個隨機的權(quán)重初始化值來訓練整個網(wǎng)絡(luò),我們可以使用預訓練模型的權(quán)重,并致力于在更重要的層(更高的層)上進行訓練。如果你的數(shù)據(jù)集與ImageNet完全不同,那么你就要訓練更多的層并凍結(jié)兩個較低的層。
數(shù)據(jù)擴展技術(shù)(Data Augmentation Techniques)
現(xiàn)在,我們可能對數(shù)據(jù)在卷積神經(jīng)網(wǎng)絡(luò)中的重要性沒什么感覺了,因此讓我們談論一下讓你的數(shù)據(jù)集變大的方法,僅僅是用兩個簡單的變換。正如我們前面提到過的,當計算機用一個圖像作為輸入時,它將輸入一個像素值的數(shù)組。假設(shè)整個圖像被左移1個像素。對你和我來說,這個變化是潛移默化的。然而,對于一個計算機來說,這一改變可能相當?shù)刂匾?#xff0c;因為圖像的分類或標簽不會改變,而數(shù)組改變了。以改變數(shù)組表示的方式改變訓練數(shù)據(jù)的方法,同時保持標簽相同,稱為數(shù)據(jù)擴展技術(shù)。這是一種人工擴展數(shù)據(jù)集的方法。人們使用的一些流行的擴展是灰度、水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、隨作物、色恐慌、平移、旋轉(zhuǎn)等等。通過將其中的兩個轉(zhuǎn)換應用到訓練數(shù)據(jù)中,你就可以輕松地將訓練樣本的數(shù)量擴大一倍或三倍。
?以上為譯文。
文章原標題《A Beginner's Guide to Understanding Convolutional Neural Networks》,
譯者:Mags,審校:袁虎。
原文鏈接
干貨好文,請關(guān)注掃描以下二維碼:
總結(jié)
以上是生活随笔為你收集整理的手把手教你理解卷积神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac 神兵利器(三) 使用Intell
- 下一篇: 聚焦和增强卷积神经网络