接下來,5 x 5 的圖像和 3 x 3 的矩陣的卷積可以按下圖所示的動畫一樣計算:

現在停下來好好理解下上面的計算是怎么完成的。我們用橙色的矩陣在原始圖像(綠色)上滑動,每次滑動一個像素(也叫做“步長”),在每個位置上,我們計算對應元素的乘積(兩個矩陣間),并把乘積的和作為最后的結果,得到輸出矩陣(粉色)中的每一個元素的值。注意,3 x 3 的矩陣每次步長中僅可以“看到”輸入圖像的一部分。
在 CNN 的術語中,3x3 的矩陣叫做“濾波器(filter)”或者“核(kernel)”或者“特征檢測器(feature detector)”,通過在圖像上滑動濾波器并計算點乘得到矩陣叫做“卷積特征(Convolved Feature)”或者“激活圖(Activation Map)”或者“特征圖(Feature Map)”。記住濾波器在原始輸入圖像上的作用是特征檢測器。
從上面圖中的動畫可以看出,對于同樣的輸入圖像,不同值的濾波器將會生成不同的特征圖。比如,對于下面這張輸入圖像:

In the table below, we can see the effects of convolution of the above image with different filters. As shown, we can perform operations such as Edge Detection, Sharpen and Blur just by changing the numeric values of our filter matrix before the convolution operation 8 – this means that different filters can detect different features from an image, for example edges, curves etc. More such examples are available in Section 8.2.4 here.
在下表中,我們可以看到不同濾波器對上圖卷積的效果。正如表中所示,通過在卷積操作前修改濾波矩陣的數值,我們可以進行諸如邊緣檢測、銳化和模糊等操作 —— 這表明不同的濾波器可以從圖中檢測到不同的特征,比如邊緣、曲線等。在 這里的 8.2.4 部分 中可以看到更多的例子。

另一個理解卷積操作的好方法是看下面這張圖的動畫:

濾波器(紅色框)在輸入圖像滑過(卷積操作),生成一個特征圖。另一個濾波器(綠色框)在同一張圖像上卷積可以得到一個不同的特征圖。注意卷積操作可以從原圖上獲取局部依賴信息。同時注意這兩個不同的濾波器是如何從同一張圖像上生成不同的特征圖。記住上面的圖像和兩個濾波器僅僅是我們上面討論的數值矩陣。
在實踐中,CNN 會在訓練過程中學習到這些濾波器的值(盡管我們依然需要在訓練前指定諸如濾波器的個數、濾波器的大小、網絡架構等參數)。我們使用的濾波器越多,提取到的圖像特征就越多,網絡所能在未知圖像上識別的模式也就越好。
特征圖的大小(卷積特征)由下面三個參數控制,我們需要在卷積前確定它們:
深度(Depth):深度對應的是卷積操作所需的濾波器個數。在下圖的網絡中,我們使用三個不同的濾波器對原始圖像進行卷積操作,這樣就可以生成三個不同的特征圖。你可以把這三個特征圖看作是堆疊的 2d 矩陣,那么,特征圖的“深度”就是三。

步長(Stride):步長是我們在輸入矩陣上滑動濾波矩陣的像素數。當步長為 1 時,我們每次移動濾波器一個像素的位置。當步長為 2 時,我們每次移動濾波器會跳過 2 個像素。步長越大,將會得到更小的特征圖。
零填充(Zero-padding):有時,在輸入矩陣的邊緣使用零值進行填充,這樣我們就可以對輸入圖像矩陣的邊緣進行濾波。零填充的一大好處是可以讓我們控制特征圖的大小。使用零填充的也叫做泛卷積,不適用零填充的叫做嚴格卷積。這個概念在下面的參考文獻 14 中介紹的非常詳細。
非線性簡介(ReLU)
An additional operation called ReLU has been used after every Convolution operation in Figure 3 above. ReLU stands for Rectified Linear Unit and is a non-linear operation. Its output is given by: