卷積神經網絡(CNN)的相關概念

傳統神經網絡存在的問題

卷積神經網絡(CNN)的相關概念

說卷積神經網絡前,我們要先說一下傳統神經網絡存在的一些問題,上圖是一個典型的傳統神經網絡的示例圖。設想一個場景,假設我們要訓練的的樣本圖片是100x100(像素)的,那麼整張圖片總共就是有10000個像素,那麼在定義一個 傳統神經網絡的時候,輸入層(input layer)就需要有1w個神經元,那麼如果我們的中間的隱藏層(hidden layer)也需要有1w個神經元,那麼總共需要的參數(權值)就高達1億個(1w*1w),試想一下,這還只是一張100x100的圖片就需要這麼多的參數,如果圖片更大之後呢,可想而知整個神經網絡的計算量有多恐怖。當然,一旦權重多了之後,則必須要有足夠量的樣本進行訓練,否則就會出現 的現象。因此我們可以知道,傳統神經網絡有以下兩個問題:

  • 權值太多,計算量太大
  • 權值太多,如果沒有大量樣本支撐則會出現過擬合現象

卷積神經網絡

卷積

什麼是卷積?

在瞭解卷積神經網絡之前我們需要知道什麼是卷積。對圖像(不同的數據窗口數據)和濾波矩陣(一組固定的權重:因為每個神經元的多個權重固定,所以又可以看做一個恆定的濾波器filter)做內積(逐個元素相乘再求和)的操作就是所謂的『卷積』操作,也是卷積神經網絡的名字來源。非嚴格意義上來講,下圖中紅框框起來的部分便可以理解為一個濾波器(filter),即帶著一組固定權重的神經元。多個濾波器疊加便成了卷積層。

卷積神經網絡(CNN)的相關概念

舉個具體的例子。比如下圖中,圖中左邊部分是原始輸入數據,圖中中間部分是濾波器filter,圖中右邊是輸出的新的二維數據。

卷積神經網絡(CNN)的相關概念

分解下上圖

卷積神經網絡(CNN)的相關概念

對應位置上是數字先相乘後相加

卷積神經網絡(CNN)的相關概念

=

卷積神經網絡(CNN)的相關概念

中間濾波器filter與數據窗口做內積,其具體計算過程則是:4x0 + 0x0 + 0x0 + 0x0 + 0x1 + 0x1 + 0x0 + 0x1 + -4x2 = -8

圖像上的卷積

在下圖對應的計算過程中,輸入是一定區域大小(width*height)的數據,和濾波器filter(帶著一組固定權重的神經元)做內積後等到新的二維數據。

如下圖所示:

卷積神經網絡(CNN)的相關概念

具體來說,左邊是圖像輸入,中間部分就是濾波器filter(帶著一組固定權重的神經元),不同的濾波器filter會得到不同的輸出數據,比如顏色深淺、輪廓。相當於如果想提取圖像的不同特徵,則用不同的濾波器filter,提取想要的關於圖像的特定信息:顏色深淺或輪廓。用一句話解釋不同濾波器之間的差異就是:一千個讀者就有一千個哈姆雷特

什麼是卷積神經網絡?

卷積神經網絡(Convolutional Neural Network, CNN)是一種前饋神經網絡,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型圖像處理有出色表現。卷積神經網絡與普通神經網絡非常相似,它們都由具有可學習的權重和偏置常量(biases)的神經元組成。每個神經元都接收一些輸入,並做一些點積計算,輸出是每個分類的分數,普通神經網絡裡的一些計算技巧到這裡依舊適用。但是卷積神經網絡默認輸入是圖像,可以讓我們把特定的性質編碼入網絡結構,使是我們的前饋函數更加有效率,並減少了大量參數。

具有三維體積的神經元(3D volumes of neurons)

卷積神經網絡利用輸入是圖片的特點,把神經元設計成三個維度 : width, height, depth(注意這個depth不是神經網絡的深度,而是用來描述神經元的) 。比如輸入的圖片大小是 32 × 32 × 3 (rgb),那麼輸入神經元就也具有 32×32×3 的維度。下面是圖解:

卷積神經網絡(CNN)的相關概念

一個卷積神經網絡各層應用實例

卷積神經網絡(CNN)的相關概念

上圖中CNN要做的事情是:給定一張圖片,是車還是馬未知,是什麼車也未知,現在需要模型判斷這張圖片裡具體是一個什麼東西,總之輸出一個結果:如果是車 那是什麼車。

我們按照從左到右的方向來理一下:

左邊:

  • 最左邊是數據輸入層,對數據做一些處理,比如去均值(把輸入數據各個維度都中心化為0,避免數據過多偏差,影響訓練效果)、歸一化(把所有的數據都歸一到同樣的範圍)、PCA/白化等等。CNN只對訓練集做“去均值”這一步。

中間:

  • CONV:卷積計算層,線性乘積求和。
  • RELU:激勵層,ReLU是激活函數的一種。
  • POOL:池化層,簡言之,即取區域平均或最大。

右邊:

  • FC:全連接層

卷積神經網絡(CNN)中的局部感知和權重共享

CNN中的局部感知

在CNN中,濾波器filter(帶著一組固定權重的神經元)對局部輸入數據進行卷積計算。每計算完一個數據窗口內的局部數據後,數據窗口不斷平移滑動,直到計算完所有數據。這個過程中,有這麼幾個參數:

  • 深度depth:神經元個數,決定輸出的depth厚度。同時代表濾波器個數。
  • 步長stride:決定滑動多少步可以到邊緣。
  • 填充值zero-padding:在外圍邊緣補充若干圈0,方便從初始位置以步長為單位可以剛好滑倒末尾位置,通俗地講就是為了總長能被步長整除。
卷積神經網絡(CNN)的相關概念

上圖就是一個典型的局部感知的示例圖。其中黃色部分的矩陣為濾波器,深度為1,步長為1,填充值為0。很明顯我們可以看出,每次濾波器都是針對某一局部的數據窗口進行卷積,這就是所謂的CNN中的局部感知機制。

那為什麼要局部感知呢?

打個比方,濾波器就像一雙眼睛,人類視角有限,一眼望去,只能看到這世界的局部。如果一眼就看到全世界,你會累死,而且一下子接受全世界所有信息,你大腦接收不過來。當然,即便是看局部,針對局部裡的信息人類雙眼也是有偏重、偏好的。比如看美女,對臉、胸、腿是重點關注,所以這3個輸入的權重相對較大。

CNN中的權重共享

那麼權重共享又是什麼呢?還是拿上圖舉例,濾波器在滑動的過程中,輸入在變化,但中間濾波器(filter)的權重(即每個神經元連接數據窗口的權重)是固定不變的,這個權重不變即所謂的CNN中的權重(參數)共享機制。

再打個比方,某人環遊全世界,所看到的信息在變,但採集信息的雙眼不變。btw,不同人的雙眼看同一個局部信息所感受到的不同,即一千個讀者有一千個哈姆雷特,所以不同的濾波器就像不同的雙眼,不同的人有著不同的反饋結果。

用一張動圖詮釋局部感知和權重共享

卷積神經網絡(CNN)的相關概念

我在蒐集資料的過程中發現了這張圖,第一感覺非常的酷,如果理解了局部感知和權重共享那這張圖就不難看懂了。

相信你也會有一個疑問,上圖中的輸出結果1具體是怎麼計算得到的呢?接下來我們來分解下上述動圖,詳細解釋下計算過程。

首先是第一張:

卷積神經網絡(CNN)的相關概念

其實,計算過程類似wx + b,w對應濾波器Filter w0,x對應不同的數據窗口,b對應Bias b0,相當於濾波器Filter w0與一個個數據窗口相乘再求和後,最後加上Bias b0得到輸出結果1,如下過程所示:

卷積神經網絡(CNN)的相關概念

1x0 + 1x0 + -1x0 + -1x0 + 0x0 + 1x1+-1x0 + -1x0 + 0x1

+

卷積神經網絡(CNN)的相關概念

-1x0 + 0x0 + -1x0 + 0x0 + 0x1 + -1x1 + 1x0 + -1x0 + 0x2

+

卷積神經網絡(CNN)的相關概念

0x0 + 1x0 + 0x0 + 1x0 + 0x2 + 1x0 + 0x0 + -1x0 + 1x0

+

1(這裡的1就是Bias b0)

=

1

然後濾波器Filter w0固定不變,數據窗口向右移動2步,繼續做內積計算,得到0的輸出結果

卷積神經網絡(CNN)的相關概念

最後,換做另外一個不同的濾波器Filter w1、不同的偏置Bias b1,再跟圖中最左邊的數據窗口做卷積,可得到另外一個不同的輸出。

卷積神經網絡(CNN)的相關概念

池化

池化,簡言之,即取區域平均或最大,其目的是為了減少特徵圖。池化操作對每個深度切片獨立,規模一般為 2*2,相對於卷積層進行卷積運算,池化層進行的運算一般有以下幾種:

  • 最大池化(Max Pooling)。取4個點的最大值。這是最常用的池化方法。
  • 均值池化(Mean Pooling)。取4個點的均值。
  • 高斯池化。借鑑高斯模糊的方法。不常用。
  • 可訓練池化。訓練函數 ff ,接受4個點為輸入,出入1個點。不常用。

最常見的池化層是規模為2*2, 步幅為2,對輸入的每個深度切片進行下采樣。每個MAX操作對四個數進行,如下圖所示:

卷積神經網絡(CNN)的相關概念

上圖所展示的是取區域最大,即上圖左邊部分中 左上角2x2的矩陣中6最大,右上角2x2的矩陣中8最大,左下角2x2的矩陣中3最大,右下角2x2的矩陣中4最大,所以得到上圖右邊部分的結果:6 8 3 4。均值池化類似。

  • 池化操作將保存深度大小不變
  • 如果池化層的輸入單元大小不是二的整數倍,一般採取邊緣補零(zero-padding)的方式補成2的倍數,然後再池化。

全連接層(Fully-connected layer)

全連接層和卷積層可以相互轉換:

  • 對於任意一個卷積層,要把它變成全連接層只需要把權重變成一個巨大的矩陣,其中大部分都是0 除了一些特定區塊(因為局部感知),而且好多區塊的權值還相同(由於權重共享)。
  • 相反地,對於任何一個全連接層也可以變為卷積層。比如,一個$K=4096$ 的全連接層,輸入層大小為 $7∗7∗512$,它可以等效為一個$ F=7, P=0, S=1, K=4096$的卷積層。換言之,我們把 filter size 正好設置為整個輸入層大小。


分享到:


相關文章: