CNN-卷積神經網絡簡單入門(1)

卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的代表算法之一 ,通常由輸入層、卷積層、池化層、全連接層、輸出層結構組成,其中卷積層、池化層、全連接層可能有多層。CNN的結構特性有:

(1)局部連接

在傳統的神經網絡結構中,神經元之間的連接是全連接的,即n-1層的神經元與n層的所有神經元全部連接。但是在卷積神經網絡中,n-1層與n 層的部分神經元連接。

(2)權值共享

每個濾波器與上一層局部連接,同時每個濾波器的所有局部連接都使用同樣的權值參數,此舉會大大減少網絡的參數。

(3)下採樣

  逐漸降低數據的空間尺寸,減少網絡中參數的數量,使得計算資源耗費變少,也能有效控制過擬合。

CNN的輸入層、全連接層、輸出層和普通神經網絡的沒有什麼區別,接下將對卷積層和池化層進行介紹。

1.卷積層

卷積層用來提取圖像特徵,一個卷積核提取一種特徵。卷積核的參數不同,輸入特徵圖經過和卷積核進行卷積運算後得到的輸出特徵圖就會不同,提取的特徵也就不同。卷積層通常使用多個卷積核,提取圖像的多種特徵,得到的輸出特徵圖的通道數和卷積核的數量一樣。

1.1 卷積運算

一幅完整的圖像,是由紅色、綠色、藍色三個通道組成的。當輸入圖像為灰度圖像時,即為單通道,表示某一像素點顏色的數值只有1個;輸入圖像為RGB圖像時,為多通道(三通道),表示某一像素點顏色的數值有3個。表示圖像像素點顏色的數值組成的矩陣可稱之為特徵圖,灰度圖像的特徵圖只有2維,大小為(長,寬),而RGB圖像的特徵圖有3維,大小為(長,寬,通道數),其中通道數就是3。當處理的對象存在多通道數時,使用的卷積核的通道數(第三維大小)也應與待處理對象的通道數大小保持一致。

1.1.1 單通道

計算結果如下:

0×0+1×1+3×2+4×3=19,1×0+2×1+4×2+5×3=25,3×0+4×1+6×2+7×3=37,4×0+5×1+7×2+8×3=43.

輸出大小等於輸入大小nh×nw減去卷積核大小kh×kw,即:(nhkh+1)×(nwkw+1)

1.1.2 多通道

陰影部分是第一個輸出元素以及用於計算這個輸出的輸入和核張量元素:(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56

1.2 填充

卷積操作常常會導致特徵圖越來越小。 解決這個問題的簡單方法即為填充:在輸入圖像的邊界填充元素(通常填充元素是 0 )。例如,在下圖中,我們將3×3輸入填充到5×5,那麼它的輸出就增加為4×4

陰影部分是第一個輸出元素以及用於輸出計算的輸入和核張量元素: 0×0+0×1+0×2+0×3=0

通常,如果我們添加ph行填充(大約一半在頂部,一半在底部)和pw列填充(左側大約一半,右側一半),則輸出形狀將為(nhkh+ph+1)×(nwkw+pw+1),即輸出的高度和寬度將分別增加phpw

在許多情況下,我們需要設置ph=kh1pw=kw1,使輸入和輸出具有相同的高度和寬度。假設kh是奇數,我們將在高度的兩側填充ph/2行。 如果kh是偶數,則一種可能性是在輸入頂部填充ph/2行,在底部填充ph/2行。同理,我們填充寬度的兩側。卷積神經網絡中卷積核的高度和寬度通常為奇數,例如1、3、5或7。 選擇奇數的好處是,保持空間維度的同時,我們可以在頂部和底部填充相同數量的行,在左側和右側填充相同數量的列。

1.3 步幅

在進行卷積操作時,卷積窗口從輸入張量的左上角開始,向下、向右滑動。 在前面的例子中,我們默認每次滑動一個元素。 但是,有時候為了高效計算或是縮減採樣次數,卷積窗口可以跳過中間位置,每次滑動多個元素。我們將每次滑動元素的數量稱為步幅(stride)。之前我們只使用過高度或寬度為1的步幅,在下圖中是垂直步幅為3,水平步幅為2的卷積運算。 着色部分是輸出元素以及用於輸出計算的輸入和內核張量元素:0×0+0×1+1×2+2×3=80×0+6×1+0×2+0×3=6

可以看到,為了計算輸出中第一列的第二個元素和第一行的第二個元素,卷積窗口分別向下滑動三行和向右滑動兩列。但是,當卷積窗口繼續向右滑動兩列時,沒有輸出,因為輸入元素無法填充窗口(除非我們添加另一列填充)。

通常,當垂直步幅為sh、水平步幅為sw時,輸出形狀為(nhkh+ph+sh)/sh×(nwkw+pw+sw)/sw⌋。

如果我們設置了ph=kh1pw=kw1,則輸出形狀將簡化為(nh+sh1)/sh×(nw+sw1)/sw。 更進一步,如果輸入的高度和寬度可以被垂直和水平步幅整除,則輸出形狀將為(nh/sh)×(nw/sw)

2.池化層(降採樣層、匯聚層)

與卷積層類似,匯聚層運算符由一個固定形狀的窗口組成,該窗口根據其步幅大小在輸入的所有區域上滑動,為固定形狀窗口(有時稱為匯聚窗口)遍歷的每個位置計算一個輸出。 然而,不同於卷積層中的輸入與卷積核之間的卷積運算,匯聚層不包含參數。 相反,池運算是確定性的,我們通常計算匯聚窗口中所有元素的最大值或平均值。這些操作分別稱為最大匯聚(maximum pooling)和平均匯聚(average pooling)。

在這兩種情況下,與卷積操作一樣,匯聚窗口從輸入張量的左上角開始,從左往右、從上往下的在輸入張量內滑動。在匯聚窗口到達的每個位置,它計算該窗口中輸入子張量的最大值或平均值。計算最大值或平均值是取決於使用了最大匯聚層還是平均匯聚層。

匯聚窗口形狀為 2×2 的最大匯聚層。着色部分是第一個輸出元素,以及用於計算這個輸出的輸入元素: max(0,1,3,4)=4.

圖中的輸出張量的高度為2,寬度為2。這四個元素為每個匯聚窗口中的最大值:

max(0,1,3,4)=4,max(1,2,4,5)=5,max(3,4,6,7)=7,max(4,5,7,8)=8.
 
 

參考資料:《動手學深度學習》