卷積神經網絡
利用全連接前饋網絡處理圖像時的問題:
(1)參數太多:
對於輸入的1001003的RGB圖像,全連接前饋網絡,第一個隱藏層的每個神經元到輸入層有1001003=30000個獨立的連接,即權重參數,隱藏層神經元個數增加,參數規模急劇增加,網絡訓練效率低,易過擬合。
(2)局部不變性特徵:
全連接網絡很難提取自然圖像中的局部不變性特徵:尺度縮放、平移、旋轉;這些操作不影響自然圖像的語義信息。
卷積神經網絡
CNN三個結構特性:局部連接、權重共享、匯聚
這三特性使CNN具有一定的平移、縮放、旋轉不變性。參數更少。
感受野
卷積神經網絡(CNN)收生物學感受野機制得來。感受野指視覺、聽覺系統中的一些神經元只接受其支配的刺激區域內的信號。一個神經元的感受野指視網膜上特定的區域,只有這個區域的刺激才能激活該神經元。
1. 卷積
一維卷積
假設一個信號發生器每個時刻 產生一個信號 ,其信息的衰減率爲,即在𝑘 − 1 個時間步長後,信息爲原來的 倍.我們把稱爲濾波器(Filter)或卷積(Convolution Kernel). 假設濾波器長度爲𝐾,它和一個信號序列的卷積爲:
信號序列x和濾波器w的卷積定義爲:
其中表示卷積運算。
特殊的,當時,卷積相當於信號序列的簡單移動平均。
二維卷積
給定一個圖像和濾波器,其卷積爲:
一個輸入信息X和濾波器W的二維卷積定義爲:
其中表示卷積運算。二維卷積實例如圖:
均值濾波爲將當前位置的像素設置爲濾波器窗口中所有像素的平均值,即.
卷積常作爲特徵提取的有效方法,圖像經過卷積操作得到的結果叫做特徵映射(Feature Map)。以下分別是:高斯濾波器、平滑去噪濾波器、邊緣特徵提取濾波器。
1.1 互相關
在圖像處理過程中,計算卷積,需要進行卷積核翻轉。在具體實現上,一般使用互相關操作來代替卷積,從而減少開銷。互相關是衡量兩個序列相關性的函數,使用滑動窗口的點積計算實現,給定一個圖像和卷積核,它們的互相關爲:
和卷積公式對比:
互相關和卷積的區別僅僅在於卷積核是否進行翻轉。因此互相關也可以稱爲不翻轉卷積。
一個輸入信息X和濾波器W的互相關可以定義爲:
其中表示互相關運算,表示旋轉180度,爲輸出矩陣。
在神經網絡中,用卷積進行特徵提取,卷積核翻轉不影響其特徵提取能力,當卷積核爲可學習參數時,卷積核互相關在能力上等價,故常用互相關來代替卷積(絕大部分深度學習工具亦如此)。
在後續的文章中,用互相關代替卷積,即本文中的卷積符號用表示,而真正的卷積用表示。
1.2 卷積的變種
引入滑動步長和零填充增加捲積多樣性。滑動步長 (Stride)是指濾波器在滑動時的時間間隔。零填充(Zero Padding)是在輸入向量的邊界外進行補零。示意圖如下:
1.2.1 轉置卷積
常見的卷積是進行降維操作,但一些卷積也可以將低維特徵映射到高維特徵。
對於高維向量 和低維向量 ,。方式變換 將高維映射到低維:
通過轉置實現低維到高維反向映射:
卷積操作可以寫成仿射變換方式。假設一個5 維向量,經過大小爲3 的卷積核 進行卷積,得到3 維向量。卷積操作可以寫爲:
其中是一個稀疏矩陣,其非零元素來自於卷積核中的元素。
要實現3 維向量到5 維向量的映射,可以通過仿射矩陣的轉置來實現:
將低維特徵映射到高維特徵的卷積操作稱爲轉置卷積(Transposed Convolution)也稱爲反捲積(Deconvolution)。步長𝑆 = 1,無零填充𝑃 = 0 的二維卷積和其對應的轉置卷積:
微步卷積 通過減少轉置卷積的步長𝑆 < 1來實現上採樣操作,大幅提高特徵維數。步長𝑆 < 1 的轉置卷積也稱爲微步卷積。爲了實現微步卷積,可以在輸入特徵之間插入0 來間接地使得步長變小。如果卷積操作的步長爲𝑆 > 1,希望其對應的轉置卷積的步長爲 。需要在輸入特徵之間插入𝑆 − 1 個0 來使得其移動的速度變慢。步長𝑆 = 2,無零填充𝑃 = 0 的二維卷積和其對應的轉置卷積如圖:
1.2.2 空洞卷積
對於卷積層想增加輸出單元的感受野可以:
(1)增加捲積核大小(但會增加參數量)
(2)增加捲積的層數(但會增加參數量)
(3)卷積之前進行匯聚操作(但會丟失信息)
(4)空洞卷積(不增加參數量)
空洞卷積又稱膨脹卷積,通過給卷積核插入空洞來增加大小,如果在卷積核每兩元素之間插入 個空洞,卷積核的有效大小爲:
D爲膨脹率,當D=1時,卷積核爲普通的卷積核。
轉置卷積、空洞卷積動態實例:轉置卷積空洞卷積動態圖
1.3 卷積的數學性質
1.3.1 交換性
如不限制卷積信號長度,翻轉卷積具有交換性,即。互相關“卷積”,同樣具有交換性。
寬卷積 給定圖像和卷積核,對圖像進行零填充,兩端各補 和 個零,得到全填充(Full Padding)圖像。寬卷積的定義:
其中表示寬卷積運算。
當輸入信息和卷積核具有固定長度時,其寬卷積仍具有交換性:
1.3.2 導數
假設,其中,,,函數 是一個標量函數,則:
從最後一個公式可看出:
同理:
其中當,或,或,或時,。即相當於對 W 進行了的零填充。
使用互相關的“卷積”:
2. 卷積神經網絡
CNN一般由卷積層、匯聚層、全連接層構成。
2.1 用卷積代替全連接
兩個原因:
局部連接 在卷積層中(第 層)每一個神經元只和下一層(第 層)中某個局部窗口內的神經元連接,構成局部連接網絡,卷積層和下一層連接數大大減少,由 個連接變爲 個連接,K爲濾波器大小。
權重共享 一個濾波器只捕捉輸入數據的一種特定的局部特徵。因此提取多個特徵就要多個不同的濾波器。濾波器 對於第 層的所有的神經元都是相同的,如上圖(b),同顏色上的連接權重相同。
由於局部連接和權重共享的存在,卷積層的參數個數與神經元的數量無關,卷積層的參數只有K維權重 和 維的偏置 ,共 K+1 個參數。
2.2 卷積層
不同的卷積核相當於不同的特徵提取器。
爲充分利用圖像的局部信息,經常將神經元組織爲三維結構的神經層,大小爲 M * N * D ,由 D 個 M * N 大小的特徵映射構成。爲提高卷積網絡的表示能力,可以在每一層使用多個不同的特徵映射。
在輸入層:特徵映射是圖像本身。
灰度圖像:有一個特徵映射,輸入層深度D=1。
彩色圖像:有RGB三個顏色通道的特徵映射,輸入層深度D=3。
卷積層的結構:
(1)輸入特徵映射組: 爲三維張量(tensor),每個切片(Slice)矩陣 爲一個輸入特徵映射,;
(2)輸出特徵映射組: 爲三維張量,每個切片矩陣 爲一個輸出特徵映射,;
(3)卷積核: 爲四維張量,每個切片矩陣 爲一個二維卷積核,;
卷積層的三維結構如圖:
輸出特徵映射 的計算:
其中 爲三維卷積核, 常爲ReLU的非線性激活函數。如希望卷積層輸出P個特徵映射,可將該計算過程重複P次:
在輸入爲 ,輸出爲 的卷積層中,每一個輸出特徵映射需要D個濾波器以及一個偏置b。假設每個濾波器的大小爲 , 那麼共需個參數。
2.3 匯聚層(池化層)
匯聚層(Pooling Layer) 也叫子採樣層(Subsampling Layer),作用是特徵選擇,降維。因爲卷積層只減少了網絡中連接的數量,卻沒有減少特徵映射組中的神經元個數。
匯聚層的輸入特徵映射組爲 ,對於其中的每一個映射組 , ,將其分爲多個可重疊的區域 ,,。匯聚層對每個區域進行下采樣(Down Sampling)得到一個值,作爲這個區域的概括。常見的兩個匯聚函數:
(1)最大匯聚(Max Pooling):
其中 爲 區域 內每個神經元的活性值。
(2)平均匯聚(Mean Pooling):
匯聚層既可以減少神經元數量,又可以是網絡對一些相對小的局部形態改變保持不變性,並擁有更大的感受野。
目前主流的卷積網絡中,匯聚層僅含下采樣操作,早期卷積網絡(LeNet-5) 中,會在匯聚層後接激活函數。
典型的匯聚層爲對 的不重疊區域記性最大匯聚。匯聚層可以看做特殊的卷積層,卷積核大小爲 ,步長爲 ,卷積核爲max函數 或 mean函數。過大的採樣區域會急劇減少神經元的數量,也會造成過多的信息損失。
2.4 典型的卷積網絡結構
典型的卷積網絡結構如圖:
一個卷積塊爲連續M個卷積層和b個匯聚層(M常爲2-5,b常爲0或1)。一個卷積網絡中可以堆疊𝑁 個連續的卷積塊,然後在後面接 K 個全連接層(N常爲1-100,b常爲0-2)。
目前,網絡結構趨向於更小的卷積核(11或33)、更深的結構(大於50層)。此外,由於卷積的操作性越來越靈活(不同的步長),匯聚層作用漸小,故目前流行的卷積網絡中匯聚層在減少,趨向於全卷積網絡。
3 參數學習
利用誤差反向傳播算法進行參數學習。
設第 層爲卷積層,第 層的輸入特徵映射爲,通過卷積計算得到第層的特徵映射淨輸入 。第層的第個特徵映射淨輸入:
其中 和 爲卷積核以及偏置。第層中共有個卷積核和個偏置,可用鏈式法則求導。
損失函數 關於第 層的卷積核 的偏導:
其中
爲損失函數關於第 層的第個特徵映射淨輸入的偏導數;
爲損失函數關於第層的第p個偏置的偏導數。
在卷積網絡中,每層參數的梯度依賴於其所在層的誤差項。
3.1 誤差項的計算
誤差項的計算是關鍵。
匯聚層 當第 層爲匯聚層時,因匯聚層時下采樣, 層的每個神經元的誤差項 對應於第 層的相應特徵映射的一個區域, 層的第 個特徵映射中的每個神經元都有一條邊和 層的第 個特徵映射中的一個神經元相連. 根據鏈式法則,第 層的一個特徵映射的誤差項 ,只需要將 層對應特徵映射的誤差項 進行上採樣操作(和第 層的大小一樣),再和𝑙 層特徵映射的激活值偏導數逐元素相乘,就得到了。
其中爲第層使用的激活函數的導數,up爲上採樣函數。若下采樣是最大匯聚,誤差項 中的每個值都直接傳到上一層對應區域中的最大值所對應的神經元,該區域其他神經元的誤差項設爲0。若下采樣是平均匯聚,誤差項 中的每個值都會被平均分配到上一層對應區域中的所有神經元上。
卷積層當 層爲卷積層時,假設特徵映射淨輸入 。其中第 個特徵映射輸入爲:
其中 和 爲第 層的卷積核、偏置。第 層中共有 個卷積核和 個偏置。第 層的第 個特徵映射的誤差項 的具體推導過程如下,其中 爲寬卷積:
4 典型的卷積神經網絡
4.1 LeNet-5
LeNet-5網絡結構如圖:
LeNet-5網絡共有7層,輸入圖像爲 32 32,輸出對應爲10個類別數字的概率得分。每層結構如下:
- C1卷積層:6個5 5的濾波器,得到6組28 28=784的特徵映射,故C1層的神經元數量爲6 784=4704,可訓練參數數量爲6 25+6=156,連接數爲156 784=122304.
- S2匯聚層:平均匯聚,採樣窗口爲 2 2,並接一個激活函數,神經元個數爲6 14 14 = 1176,可訓練參數數量爲 ,連接數爲 。
- C3卷積層:LeNet-5用連接表來定義輸入和輸出特徵映射之間的依賴關係,共使用60個 的濾波器,得到16組大小爲 的特徵映射,神經元個數爲16 100 = 1600,可訓練參數數量爲 ,連接數爲 。
- S4匯聚層:採樣窗口爲 ,得到16個 大小的特徵映射,可訓練參數數量爲 ,連接數爲 。
- C5卷積層:使用 個 的濾波器,得到120組大小爲 的特徵映射。C5層的神經元數量爲120,可訓練參數數量爲 ,連接數爲 。
- F6全連接層:84個神經元,可訓練參數數量爲 。連接數和可訓練參數個數相同,爲10164。
- 輸出層:輸出層由 10個徑向基函數 組成。
連接表 卷積層的輸入和輸出特徵映射之間是全連接關係,可用連接表轉爲爲非全連接關係。
C3層的第0-5個特徵映射依賴於S2 層的特徵映射組的每3個連續子集,第6-11個特徵映射依賴於S2 層的特徵映射組的每4個連續子集,第12-14個特徵映射依賴於S2 層的特徵映射的每4個不連續子集,第15個特徵映射依賴於S2 層的所有特徵映射。
如果第p個輸出特徵映射依賴於第𝑑個輸入特徵映射,則,否則爲0。
其中𝑇 爲𝑃 × 𝐷 大小的連接表. 假設連接表𝑇 的非零個數爲𝐾,每個濾波器的大小爲𝑈 × 𝑉,那麼共需要𝐾 × 𝑈 × 𝑉 + 𝑃 參數。
4.2 AlexNet
AlexNet是第一個現代深度卷積網絡模型,首次使用GPU 進行並行訓練,採用了ReLU 作爲非線性激活函數,使用Dropout 防止過擬合,使用數據增強來提高模型準確率等。AlexNet 贏得了2012 年ImageNet 圖像分類競賽的冠軍。
AlexNet網絡規模超出了當時的單個GPU 的內存限制,AlexNet 將網絡拆爲兩半,分別放在兩個GPU 上,GPU 間只在某些層(比如第3層)進行通信。
AlexNet 的輸入爲224 × 224 × 3 的圖像,輸出爲1 000 個類別的條件概率,具體結構如下:
- 卷積層1:兩個大小爲11 × 11 × 3 × 48 的卷積核,步長𝑆 = 4,零填充𝑃 = 3,得到兩個大小爲55 × 55 × 48 的特徵映射組。
- 匯聚層1:爲3 × 3 的最大匯聚操作,步長𝑆 = 2,得到兩個27 × 27 × 48 的特徵映射組。
- 卷積層2:兩個大小爲5 × 5 × 48 × 128 的卷積核,步長𝑆 = 1,零填充𝑃 = 2,得到兩個大小爲27 × 27 × 128 的特徵映射組。
- 匯聚層2:3 × 3 的最大匯聚操作,步長𝑆 = 2,得到兩個大小爲13 × 13 × 128 的特徵映射組。
- 卷積層3:兩個路徑的融合,使用一個大小爲3 × 3 × 256 × 384 的卷積核,步長𝑆 = 1,零填充𝑃 = 1,得到兩個大小爲13 × 13 × 192 的特徵映射組。
- 卷積層4:兩個大小爲3 × 3 × 192 × 192 的卷積核,步長𝑆 = 1,零填充𝑃 = 1,得到兩個大小爲13 × 13 × 192 的特徵映射組。
- 卷積層5:兩個大小爲3 × 3 × 192 × 128 的卷積核,步長𝑆 = 1,零填充𝑃 = 1,得到兩個大小爲13 × 13 × 128 的特徵映射組。
- 匯聚層3:3 × 3 的最大匯聚操作,步長𝑆 = 2,得到兩個大小爲6 × 6 × 128 的特徵映射組。
- 全連接層:三個全連接層,神經元數量分別爲4096、4096 和1 000。
AlexNet 在前2個匯聚層之後進行了局部響應歸一化(Local Response Normalization,LRN)以增強模型的泛化能力。
4.3 Inception
在Inception 網絡中,一個卷積層包含多個不同大小的卷積操作,稱爲Inception 模塊。Inception 網絡是由有多個Inception 模塊和少量的匯聚層堆疊而成。
Inception 模塊同時使用1 × 1、3 × 3、5 × 5 等不同大小的卷積核,並將得到的特徵映射在深度上拼接(堆疊)起來作爲輸出特徵映射。先用1 × 1卷積對四組平的特徵抽取方式進行減少特徵映射的深度。
Inception V1版本的GoogleNet是2014 年ImageNet 圖像分類競賽的冠軍。由9個Inception V1模塊和5個匯聚層、卷積層、全連接層共22層網絡構成,並引入兩個輔助分類器來加強監督信息以解決梯度消失問題:
高清圖見:GoogLeNet網絡結構圖
Inception 網絡有多個改進版本,如Inception V3:Inception v3 網絡用多層的小卷積核來替換大的卷積核,以減少計算量和參數量,並保持感受野不變。具體包括:(1)使用兩層3 × 3 的卷積來替換v1 中的5 × 5 的卷積;(2)使用連續的𝐾 × 1 和1 × 𝐾 來替換𝐾 × 𝐾 的卷積。引入了標籤平滑以及批量歸一化等優化方法進行訓練。
4.4 殘差網絡
殘差網絡(Residual Network,ResNet)通過給非線性的卷積層增加直連邊(Shortcut Connection)提高信息的傳播效率。
在一個深度網絡中,常用一個非線性單元 去逼近目標函數 。若將目標函數拆分爲:恆等函數 和殘差函數 :
殘差函數更容易學習,故將優化問題轉爲:讓非線性單元 去逼近殘差函數 ,利用 去逼近 。
殘差網絡將很多個殘差單元串聯起來構成的一個非常深的網絡。殘差單元由多個級聯的(等寬)卷積層和一個跨層的直連邊組成,再經過ReLU 激活後得到輸出: