在上面圖中,在每次的卷積操作后都使用了一個(gè)叫做 ReLU 的操作。ReLU 表示修正線性單元(Rectified Linear Unit),是一個(gè)非線性操作。它的輸入如下所示:

ReLU 是一個(gè)元素級別的操作(應(yīng)用到各個(gè)像素),并將特征圖中的所有小于 0 的像素值設(shè)置為零。ReLU 的目的是在 ConvNet 中引入非線性,因?yàn)樵诖蟛糠值奈覀兿M?ConvNet 學(xué)習(xí)的實(shí)際數(shù)據(jù)是非線性的(卷積是一個(gè)線性操作——元素級別的矩陣相乘和相加,所以我們需要通過使用非線性函數(shù) ReLU 來引入非線性。
ReLU 操作可以從下面的圖中理解。它展示的 ReLU 操作是應(yīng)用到上面圖 6 得到的特征圖之一。這里的輸出特征圖也可以看作是“修正”過的特征圖。

其他非線性函數(shù),比如 tanh 或者 sigmoid 也可以用來替代 ReLU,但 ReLU 在大部分情況下表現(xiàn)是更好的。
池化操作
空間池化(Spatial Pooling)(也叫做亞采用或者下采樣)降低了各個(gè)特征圖的維度,但可以保持大部分重要的信息。空間池化有下面幾種方式:最大化、平均化、加和等等。
對于最大池化(Max Pooling),我們定義一個(gè)空間鄰域(比如,2x2 的窗口),并從窗口內(nèi)的修正特征圖中取出最大的元素。除了取最大元素,我們也可以取平均(Average Pooling)或者對窗口內(nèi)的元素求和。在實(shí)際中,最大池化被證明效果更好一些。
下面的圖展示了使用 2x2 窗口在修正特征圖(在卷積 + ReLU 操作后得到)使用最大池化的例子。

我們以 2 個(gè)元素(也叫做“步長”)滑動(dòng)我們 2x2 的窗口,并在每個(gè)區(qū)域內(nèi)取最大值。如上圖所示,這樣操作可以降低我們特征圖的維度。
在下圖展示的網(wǎng)絡(luò)中,池化操作是分開應(yīng)用到各個(gè)特征圖的(注意,因?yàn)檫@樣的操作,我們可以從三個(gè)輸入圖中得到三個(gè)輸出圖)。

下圖展示了在圖 9 中我們在 ReLU 操作后得到的修正特征圖的池化操作的效果。

池化函數(shù)可以逐漸降低輸入表示的空間尺度。特別地,池化:
使輸入表示(特征維度)變得更小,并且網(wǎng)絡(luò)中的參數(shù)和計(jì)算的數(shù)量更加可控的減小,因此,可以控制過擬合
使網(wǎng)絡(luò)對于輸入圖像中更小的變化、冗余和變換變得不變性(輸入的微小冗余將不會(huì)改變池化的輸出——因?yàn)槲覀冊诰植苦徲蛑惺褂昧俗畲蠡?平均值的操作。
幫助我們獲取圖像最大程度上的尺度不變性(準(zhǔn)確的詞是“不變性”)。它非常的強(qiáng)大,因?yàn)槲覀兛梢詸z測圖像中的物體,無論它們位置在哪里(參考 18 和 19 獲取詳細(xì)信息)。
目前為止的故事

到目前為止我們了解了卷積、ReLU 和池化是如何操作的。理解這些層是構(gòu)建任意 CNN 的基礎(chǔ)是很重要的。正如上圖所示,我們有兩組卷積、ReLU & 池化層 —— 第二組卷積層使用六個(gè)濾波器對第一組的池化層的輸出繼續(xù)卷積,得到一共六個(gè)特征圖。接下來對所有六個(gè)特征圖應(yīng)用 ReLU。接著我們對六個(gè)修正特征圖分別進(jìn)行最大池化操作。
這些層一起就可以從圖像中提取有用的特征,并在網(wǎng)絡(luò)中引入非線性,減少特征維度,同時(shí)保持這些特征具有某種程度上的尺度變化不變性。
第二組池化層的輸出作為全連接層的輸入,我們會(huì)在下一部分介紹全連接層。
全連接層
全連接層是傳統(tǒng)的多層感知器,在輸出層使用的是 softmax 激活函數(shù)(也可以使用其他像 SVM 的分類器,但在本文中只使用 softmax)。“全連接(Fully Connected)”這個(gè)詞表明前面層的所有神經(jīng)元都與下一層的所有神經(jīng)元連接。如果你對多層感知器不熟悉的話,我推薦你閱讀 這篇文章 。