卷積神經網絡(Convolutional Neural Networks, CNN)的核心是進行卷積運算操作。在實際應用中往往采用多層網絡結構,因此又被稱為深度卷積神經網絡。本文將從單個卷積的計算出發,帶大家掌握卷積層在神經網絡中的運算方法。
2.1 單個卷積的計算
要想了解卷積層在神經網絡中的計算過程,我們首先需要了解單個“卷積”是如何運作的。
想必大家在學習CNN的過程中都見過下圖( 出處在此 ,這上面有各種各樣的卷積gif圖):
input_shape=(5,5),kernelsize=(3,3),padding=‘same’,stride=1,output_shape=(5,5)
在此圖中:
在此次計算中:
Ps: 在實際應用中,每壹個輸出的特征圖還會配備壹個偏置bais,在上圖中無表示。
2.2 卷積層在神經網絡中的運算
了解完單個卷積是如何計算的之後,我們就可以從神經網絡的角度來看‘卷積層’的運算過程了。下圖展示的是輸入三通圖像(8*8*3)經壹層卷積結構,輸出兩通特征圖(8*8*2)的計算過程:
卷積參數:input_shape=(8,8,3),kernelsize=(3,3),padding=‘same’,stride=1,output_shape=(8,8,2)
在此圖中:
在此次卷積層的運算中:
首先我們來關註壹下輸入和輸出,他倆的尺度都是(8*8),而輸入是3通道,輸出是2通道(深度學習中不管幹啥壹定要先看輸入輸出,對壹層是這樣,對整個模型也是這樣)。
其次就準備進入我們最熟悉的卷積核計算了,可是在此之前我們得知道,這個運算過程中到底發生了幾次卷積核計算呢?有的朋友可能要說,卷積的壹大特性就是‘權值***享’,有幾通輸出就有幾個卷積核,每個卷積核把輸入特征圖從頭掃到尾。然而這個其實是不對的!
實際上,在卷積核計算數量問題上,應該是“ 有幾通道的輸出就有幾套卷積核,每套內的卷積核數量與輸入通道數相等 ”,就像我在上圖中所畫的:
至此,這壹個卷積層的運算就全部完成了。
2.3 “可訓練參數”驗證
畢竟空口無憑,下面我來通過“ 可訓練參數 ”的數量,來為大家驗證壹下卷積層是不是按我說的這麽運算的。大家應該知道,壹個卷積層內的“可訓練參數”,其實就是指的卷積核裏的那些值,以及要加的偏置量,那麽如果按照前面描述的計算方法來看,壹個卷積層內的“可訓練參數有多少呢”?我們可知:
由此可得到:
那麽按理說可訓練參數量應為:
讓我們用keras的summary()來驗證壹下:
很棒!
記住,普通卷積層的可訓練參數量為:
Ps: 還有壹個衡量模型大小、復雜度的量叫做“理論計算量FLOPs”(floating point operations)。它通常只考慮Conv、FC等參數層的乘、加操作的數量,並且“純加”操作也會被忽略(例如bias)。卷積層運算中的FLOPs計算公式為:
Ps: 這裏還要為大家明確壹個“感受野”的概念,簡單來講就是卷積神經網絡中的某壹層特征圖上的壹個點,對應到原圖上可以關聯到多少個點,我們用壹張圖來解釋壹下:
上圖展示的是壹個3層壹維卷積,kernel_size=3,我們可以看到:頂層左壹的像素與底層左起7個像素值有關,這時候就代表它的感受野有7。我們可以顯而易見的得出以下兩個結論:
這個感受野在後續的卷積的拆分講解中還要用到。