1. 程式人生 > >理解卷積神經網路?看這篇論文就夠了

理解卷積神經網路?看這篇論文就夠了

https://www.toutiao.com/a6641180491963695629/

 

 2018-12-31 23:32:08

南洋理工大學的綜述論文《Recent Advances in Convolutional Neural Networks》對卷積神經網路的各個元件以及進展情況進行總結和解讀,其中涉及到 CNN 中各種重要層的數學原理以及各種啟用函式和損失函式。機器之心技術分析師對該論文進行了解讀。

論文地址:https://arxiv.org/abs/1512.07108

理解卷積神經網路?看這篇論文就夠了

 

引言

近段時間來,深度 CNN 已經在多個深度學習應用領域取得了出色的表現,並且也有很好的泛化的能力。影象分類、目標檢測、例項分割和場景理解等大量任務都使用 CNN 實現了當前最佳。這篇論文總結了從最初到現在的 CNN 發展情況,並給出了以下指示:

  • 解釋卷積層的數學原理
  • 解釋池化層的數學原理
  • 介紹某些常用的啟用函式
  • 介紹某些常用的損失函式
  • 簡要介紹基於 CNN 的應用

卷積層的數學原理

從數學上看,第 l 層的第 k 個特徵圖的位置 (i,j) 處的特徵值可以寫成 z_{i,j,k}^l,可這樣計算:

理解卷積神經網路?看這篇論文就夠了

 

其中 w_k^l 是第 l 層的權重,b_k^l 是第 l 層的偏置。x_{i,j}^l 是第 l 層的 (i,j) 位置的輸入圖塊。一個特徵圖的權重是共享的。CNN 的最大優勢之一就是這種權重共享機制,因為引數更少時,它能顯著降低計算複雜度,同時還能讓訓練和優化更簡單。

基於這類基本卷積層的一種最著名的應用是用於 USPS 數字和 MNIST 識別的 LeNet-5,如下圖所示:

理解卷積神經網路?看這篇論文就夠了

 

LeNet-5 由三類層構成,即卷積層、池化層和全連線層。卷積層的目標是學習更能代表輸入的特徵,池化層則是為了降低空間維度,全連線層則是用於類別預測。具體而言,卷積層由多個卷積核構成,這使其能夠得到多個特徵圖,而且特徵圖的每個神經元都會連線到之前一層中的臨近神經元區域,我們將這個區域稱為之前一層中神經元的感受野(receptive field)。

如上圖所示,首先通過求輸入與一個學習後的卷積核的卷積,可以得到一個新的特徵圖,然後在卷積得到的結果上逐元素應用非線性啟用。在當時,MNIST 或 USPS 數字的分類結果是很好的,即使現在也仍有很多研究者在使用它們來進行簡單實驗,以解釋說明各種各樣的演算法。一般而言,任何型別的卷積網路都能在這些資料集上輕鬆實現 97%-98% 的準確度。

近段時間來,研究者還為卷積運算提出了一些新型的架構。其中最著名的一個是擴張卷積(dilated convolution)。擴張型 CNN 是 CNN 的一項近期進展,為卷積層引入了某些額外的超引數。通過在過濾器之間插入零,可以增大網路的感受野,使得網路能夠覆蓋更多相關資訊。從數學上看,使用擴張方法的 1-D 擴張卷積可將訊號 F 與大小為 r 的卷積核 k 進行卷積:(F_{*l} k)_t = sum_t (k_t * F_{t−l * t}),其中 *l 表示 l-擴張卷積。通過這種方式,該公式可以直接擴充套件成 2-D 擴張卷積。

理解卷積神經網路?看這篇論文就夠了

 

上圖展示了三個擴張卷積層,其中擴張因子 l 隨每層而指數增大。中間特徵圖 F2 是由底部特徵圖 F1 通過應用 1-擴張卷積而得到的,其中 F2 中的每個元素都有一個大小為 3×3 的感受野。F3 是由 F2 通過應用 2-擴張卷積而得到的。特徵圖 F4 是由 F3 通過應用 4-擴張卷積而得到的。見紅色輪廓。

池化層的數學原理

池化層是 CNN 中一個很重要的模組,這類層最重要的目標是降低特徵圖的大小,具體方式是通過使用某個函式來融合子區域,比如取平均或最大/最小值。池化的工作方式是在輸入上滑動一個視窗並將該視窗中的內容送入池化函式。池化的工作方式非常類似於離散卷積,只是用某個其它函式替代了卷積核的線性組合。

描述沿某個方向 j 的池化層的性質的數學公式:

  • i_j:沿方向 j 的輸入大小
  • k_j:沿方向 j 的池化視窗大小
  • s_j:沿方向 j 的步幅

所得到的沿方向 j 的輸出大小 o_j 可以這樣計算:o_j = (i_j - k_j) / s_j + 1,注意池化層通常不會使用零填充。

最大池化和平均池化可以歸納為 Lp 池化,可描述為:

理解卷積神經網路?看這篇論文就夠了

 

其中 y_{i,j,k} 是池化運算元在第 k 個特徵圖的位置 (i,j) 處的輸出,a_{m,n,k} 是第 k 個特徵圖中的池化區域 R_{ij} 中位置 (m,n) 處的特徵值。特別要指出,當 p=1 時,Lp 對應於平均池化,當 p 趨近無窮是,Lp 會變成最大池化。

池化還有一些其它選擇,比如混合池化,其公式可寫成:

理解卷積神經網路?看這篇論文就夠了

 

這可被視為最大池化和平均池化的混合版本,其中 λ 是一個 0 到 1 之間的隨機值,表明了使用平均池化和最大池化的位置。在實踐中,這有望降低過擬合問題,且表現也會比單純的最大池化或平均池化好一點。

某些常用的啟用函式

ReLU

理解卷積神經網路?看這篇論文就夠了

 

上圖是 ReLU 函式。ReLU 啟用函式定義如下:

理解卷積神經網路?看這篇論文就夠了

 

其中 z_{i,j,k} 是第 k 通道中位置 (i,j) 處的啟用函式的輸入。ReLU 是一個逐元素的函式,會保留正的部分,並將負的部分變成零。相比於 sigmoid 或 tanh,ReLU 中的 max(.) 運算能使其速度更快。ReLU 的缺點是其在 0 處的不連續性,這可能會導致在反向傳播中出現梯度消失問題。

Leaky ReLU

理解卷積神經網路?看這篇論文就夠了

 

為了避免梯度消失問題,研究者提出了一種很重要的 ReLU 變體函式:Leaky ReLU。其數學形式為:

理解卷積神經網路?看這篇論文就夠了

 

其中 λ 的取值範圍是 (0,1)。Leaky ReLU 並不強制負的部分為零,相反它允許有一個較小的非零梯度。

PArametric ReLU

理解卷積神經網路?看這篇論文就夠了

 

上圖是 PReLU 的圖示。PReLU 和 Leaky ReLU 的不同之處是引數 λ。首先來看 PReLU 的公式:

理解卷積神經網路?看這篇論文就夠了

 

其中 λ_k 是第 k 個通道所學習到的引數。這些 λ 不是預定義的,而是通過資料學習到的,而且可學習的引數 λ_k 的數量正是網路中通道的數量。因為用於訓練的額外引數很少,所以無需擔心過擬合問題。它可以在反向傳播過程中與其它引數一起同時優化。另外也還有很多其它有用的非線性啟用函式,比如 ELU、Maxout 等。

某些常用的損失函式

hinge 損失

hinge 損失通常用於訓練 SVM 及其變體。用於多類 SVM 的 hinge 損失定義如下:

理解卷積神經網路?看這篇論文就夠了

 

其中 w 是可訓練的權重;δ(y(i), j) 是指示函式,如果 y(i) = j,則其輸出為 1,否則輸出為 0。N 是樣本數量,K 是類別數量。如果 p=1,則稱為 L1-hinge 損失;如果 p=2,則稱為 L2-hinge 損失。

softmax 損失

理解卷積神經網路?看這篇論文就夠了

 

softmax 損失可以說是分類目標方面最流行的損失,其中 N 是影象數量,K 是類別數量,p_j 是第 j 類的概率,y 是基本真值。1{.} 是一個指示函式,如果 y_i == j,則輸出 1,否則輸出 0。

softmax 損失是一種泛化的 logistic 損失,能將預測結果轉換成範圍 (0,1) 之間的非負值並給出在各類別上的概率分佈。

對比損失

對比損失常被用於訓練用於影象檢索或人臉驗證的孿生網路。其基本思想是增大不相似配對之間的距離,減小相似配對之間的距離。數學公式可寫成:

理解卷積神經網路?看這篇論文就夠了

 

如果 y=1,則第二項為 0,總損失就來自第一項,這就意味著目標就成了降低相似配對之間的距離。如果 y=0,則第一項為 0,總損失就來自第二項,這就意味著目標就成了增大不相似配對之間的距離。注意,如果不相似配對之間的距離小於餘量,則總損失會增大。

三重損失

三重損失是對對比損失的一種聰明的改進。假設我們有三張影象,這個三元組單元 (x_a, x_p, x_n) 包含一個錨影象、正例和負例。

理解卷積神經網路?看這篇論文就夠了

 

上述公式是三重損失,其中 N 是影象數量,d_{a,p} 是錨影象與其正例影象之間的距離,d_{a,n} 是錨影象與其負例影象之間的距離,m 是餘量。其目標是增大 d_{a,n},使得 d_{a,p} 和 d_{a,n} 之差大於餘量 m。三重損失的目標是最小化錨影象和正例之間的距離,以及最大化負例和錨影象之間的距離。

常用的損失函式有很多,比如 histogram 損失、lda 損失、KL-散度損失等。就不一一介紹了。

CNN 的應用

影象分類

理解卷積神經網路?看這篇論文就夠了

 

2012 年,Krizhevsky et al. [1] 提出了 LeNet-5 的一個擴充套件版 AlexNet,在 ILSVRC 2012 取得了最佳表現。上圖即為其架構。由於計算時間限制,他們使用了一種並行結構來進行訓練。一個 GPU 執行圖中頂部的層部分,另一個 GPU 執行上圖底部的層。

目標檢測

理解卷積神經網路?看這篇論文就夠了

 

2014-2017 年,微軟和 Facebook 的研究者開發了多種基於 CNN 的目標檢測方法,包括但不限於 R-CNN、SPP-Net、fast RCNN、faster RCNN 和 Mask RCNN。上圖是基本的 R-CNN [2]。在從原始影象中提取出區域提議之後,它們會被調整為固定尺寸並會被髮送給一個預訓練的 CNN。然後輸出特徵會得到優化,以便邊界框迴歸和分類。

影象分割

理解卷積神經網路?看這篇論文就夠了

 

影象分類可以粗略地分為兩部分:形義分割和例項分割。其目標是預測單張影象中每個畫素屬於哪一類。CNN 可用於從畫素層面或圖塊層面預測類別可能性。Long et al. [3] 為畫素級分割提出了一種全卷積網路,如上圖所示,該網路類似於一般的網路,只是最後一層不同,這一層被稱為去卷積層。這一層的學習目標是上取樣標籤圖的解析度。其結果可以是一張輸出影象,其中包含了密集的畫素級預測。

基於 CNN 的方法可用於很多不同的領域,比如影象檢索、人臉識別、文字分類、機器翻譯、3D 重建、視覺問答或影象繪製等。這裡不可能全面覆蓋。

分析師簡評

儘管 CNN 表現出色而且泛化能力優異,但仍還有些問題仍待進一步研究。CNN 的訓練需要大規模資料集和大量計算能力,但人工收集資料的成本很高而且易出錯。因此,研究者們也在探索能利用大量無標註資料的弱監督學習和無監督學習。與此同時,為了加速訓練過程,也有必要開發高效且可擴充套件的並行訓練演算法。最後且最重要的是如何解釋網路以及理解網路的內在部分,因為人們如果不知道 CNN 表現優異的原因,人們不會願意坐在基於 CNN 的自動駕駛汽車中或接受基於 CNN 的醫療技術的治療。