TensorFlow系列專題(十二):CNN最全原理剖析(序)

目錄

  • 前言
  • 卷積層(餘下部分)
  • 卷積的基本結構
  • 卷積層
  • 什麼是卷積
  • 滑動步長和零填充
  • 池化層
  • 卷積神經網絡的基本結構
  • 總結
  • 參考文獻

一、前言

上一篇我們一直說到了CNN [1]卷積層的特性,今天會繼續講解卷積層的基本結構

二、卷積層(餘下部分)

1. 卷積的基本結構

如圖1所示,假設輸入到神經網絡中的是一張大小為256 * 256的圖像,第一層隱藏層的神經元個數為241 * 241。在只考慮單通道的情況下,全連接神經網絡輸入層到第一層隱藏層的連接數為(256 * 256) * (241 * 241),也就是說輸入層到第一層隱藏層有(256 * 256) * (241 * 241)+1個參數(1為偏置項參數個數)。而在卷積神經網絡中,假設我們使用了一個大小為16 * 16的卷積核,則輸入層到第一層隱藏層的連接數為(256 * 256) * (16 * 16),由於我們的卷積核是共享的,因此參數個數僅為 (16 * 16) + 1個。有時候為了提取圖像中不同的特徵,我們可能會使用多個卷積核,假設這裡我們使用了100個大小為16 * 16的卷積核,則輸入層到第一層隱藏層的參數個數也僅為100 * (16 * 16) + 1,這依然遠遠少於全連接神經網絡的參數個數。

根據圖4-11所示的例子我們可以看到卷積神經網絡的兩個重要特性:

局部連接

:全連接神經網絡中,第層的每一個神經元和第層的每一個神經元之間都有連接。而在卷積神經網絡中,第層的每一個神經元都只和第層的部分神經元之間有連接,而這個"部分"有多大,則具體取決於卷積核的大小。

權值共享:在卷積神經網絡中,同一隱藏層的每一個神經元所使用的卷積核都是相同的,卷積核對同一隱藏層的神經元來說是共享的。

TensorFlow系列專題(十二):CNN最全原理剖析(序)

圖1全連接神經網絡(左)和卷積神經網絡(右)連接數示例

在卷積層中,特徵圖(feature map,又稱為特徵映射)是輸入層的圖像(或其它的特徵圖)經過卷積之後得到的特徵輸出。一個卷積核只負責提取某一類特定的特徵,為了充分的提取出圖像中的信息,我們通常會使用多個卷積核。卷積層的一般性結構可以表示如下:

1. 輸入特徵映射組:輸入特徵映射組 X(X∈R^(M×N×D)) 是一個三維的張量(tensor),其中每個切片(slice)矩陣 X^d (X^d∈R^(M×N),1≤d≤D)是一個輸入特徵映射。每個特徵映射的大小為M×N,D是輸入特徵映射的個數。

2. 輸出特徵映射組:輸出特徵映射組Y(Y∈R^(M^'×N^'×P))也是一個三維張量,其中每個切片矩陣 Y^p (Y^p∈R^(M^'×N^' ),1≤p≤P)是一個輸出特徵映射。每個特徵映射的大小為M^'×N^',P是輸出特徵映射的個數。

3. 卷積核:卷積核W(W∈R^(m×n×D×P))是一個四維張量,其中每個切片矩陣 W^(p,d) (W^(p,d)∈R^(m×n),1≤p≤P,1≤d≤D)是一個二維的卷積核。

為了更直觀的理解,我們看如圖2所示的例子。示例中的輸入特徵映射組有兩個特徵映射,每個特徵映射的大小為5*5,對應有M=5,N=5,D=2。輸出特徵映射組有三個特徵映射,每個特徵映射的大小為3*3,對應有M=3,N=3,P=3。卷積核的維度是3*3*2*3,每個二維卷積核的大小為3*3,對應有m=3,n=3,D=2,P=3。

TensorFlow系列專題(十二):CNN最全原理剖析(序)

圖2一個卷積層的結構示例

圖3所示是卷積層中從輸入特徵映射組到輸出特徵映射組的計算過程示例。卷積核W^(p,1),W^(p,2),⋯,W^(p,D)分別對輸入的特徵映射X^1,X^2,⋯,X^D進行卷積,然後將卷積得到的結果相加,再加上一個偏置b^p後得到卷積層的淨輸入Z^p,如式1。最後經過一個非線性激活函數後得到輸出特徵映射Y^p,如式2,其中函數f(∙)為非線性激活函數。

TensorFlow系列專題(十二):CNN最全原理剖析(序)

在圖3所示的例子中,每一個輸入特徵映射都需要個卷積核和一個偏置。假設每個二維卷積核的大小為m×n,那麼該層卷積層共需要的參數個數為:(m×n)×P×D+P。

TensorFlow系列專題(十二):CNN最全原理剖析(序)

圖3卷積層中計算過程示例

三、池化層

池化層(pooling layer)也稱為子採樣層(subsampling layer),池化層一般都是緊跟在卷積層之後,它的作用是進行特徵選擇,減少特徵的數量,進而減少網絡中參數的數量。

對於一個特徵映射,我們可以將其劃分為多個區域(這些區域可以有重合部分),池化就是對這些劃分後的區域進行下采樣(down sampling),然後得到一個值,並將這個值作為該區域的概括。池化層的方式有多種,一般常用的有最大池化(maximum pooling)和平均池化(mean pooling)。

最大池化(maximum pooling):選取區域內的最大值的神經元作為該區域的概括。

平均池化(mean pooling):取區域內所有神經元的均值作為該區域的概括。

如圖4是一個最大池化和均值池化的示例,這裡我們將一個特徵映射劃分為了4個區域,即池化窗口的大小為2×2,步長為2。

TensorFlow系列專題(十二):CNN最全原理剖析(序)

圖4 最大池化和平均池化示例

目前大多數卷積神經網絡中,池化層僅包含下采樣操作,池化層沒有需要訓練的參數。但在一些早期的卷積網絡中,會在池化層中使用一個非線性激活函數,例如我們會面會介紹的LeNet-5。現在,池化層的作用已經越來越小,通過增加捲積的步長也可以達到池化層同樣的效果。因此在目前一些比較新的卷積神經網絡中,池化層出現的頻率已經越來越低。

四、卷積神經網絡的基本結構

一個基本的卷積神經網絡通常是由卷積層、池化層和全連接層交叉堆疊而成。如圖5所示,由連續M個卷積層和h個池化層構成一個卷積塊(M的取值一般為1~5,h的取值一般為0或1),一個卷積神經網絡中可以堆疊N個連續的卷積塊(N的取值可以很大,較深的網絡可以達到100多層)。在個連續的卷積塊之後是K個連續的全連接層(K一般取1~2)。

TensorFlow系列專題(十二):CNN最全原理剖析(序)

圖5基本的卷積神經網絡結構示意圖

五、總結

本節介紹了卷積層的結構及池化層和卷積神經網絡的特性,下一節將結合代碼介紹基於CNN的一個實際比賽的冰山雷達波圖像識別項目。

六、參考文獻

[1] Alex Krizhevsky: ImageNet Classification with Deep Convolutional Neural Networks .NIPS 2012


分享到:


相關文章: