五分鐘教你讀懂卷積神經網絡【CNN】

上期回顧:以RBN(徑向基函數)神經網絡爲例,簡要介紹了前饋型神經網絡中,「神經元」到底是如何進行「曲線擬合」的。詳情可回顧:

 

神經網絡如何從入門到精通?(請戳我)

 

在理論上RBF神經網絡和BP神經網絡能以任意精度逼近任何非線性函數,且Poggio和Girosi已經證明,RBF網絡是連續函數的最佳逼近,並且具有良好的泛化能力。

 

但是,生活中絕大多數的問題,並不是簡單的曲線擬合問題。

 

因此CNN、DCNN、RNN、LSTM、GAN等等衆多的神經網絡,爲了更好地解決不同方向的實際問題應運而生。

 

本期,將以圖像識別的常用方法CNN(卷積神經網絡)進行介紹。

 

▐ CNN卷積神經網絡

 

卷積神經網絡(CNN)是神經網絡的一種,它在圖像識別和分類等領域已經被證明非常有效。

 

卷積神經網絡可以有效識別人臉、物體和交通標誌,以及輔助自動駕駛汽車進行路徑規劃。

 

▐ 爲什麼需要卷積神經網絡?

 

以下圖爲例,簡單繪製了常規的前饋型神經網絡的網絡結構。圖中神經元之間的連線,都是需要學習的權重w和偏置b。

 

隨着圖像分辨率的不斷增大,以1080P的手機拍攝的灰度圖像爲例:1920*1080 =2073600,就擁有約兩百萬個像素點。

 

如果隱藏層僅僅只有1000個神經元,需要學習的參數就有20億個參數,學習難度較高。

 

彩色圖像由於具有RBG三個通道的信息,需要學習的參數就更多了。

 

Fig.1 前饋型神經網絡結構

 

研究發現,圖像的下采樣對人進行圖像識別的影響較小。

 

以下圖爲例,高分辨率的X,經簡化爲9*9的像素點圖像。我們依然可以清晰地辨認出字母「X」。

 

Fig.2「X」的下采樣

 

Fig.3 局部特徵識別

 

同時,根據人類圖像識別的知識,人在識別圖片特徵時,並不需要同時獲取整張圖的所有特徵。

 

例如,我們可能只需識別右邊小圖的局部特徵,就能辨別出這是「鳥嘴」而不需要獲取完整的圖片特徵。

 

卷積神經網絡實際上,就是應用上述思想。

 

利用人類在圖像識別過程中的知識,只用比較少的參數進行圖像數據的處理,簡化神經網絡的結構,提高圖像識別的效率和精準度。

 

▐ 如何理解卷積神經網絡?

 

理解卷積神經網絡時,我們可以先把卷積神經網絡拆分爲:卷積神經網絡

 

Fig.4 數字「8」的卷積神經網絡歷程

 

如上的卷積神經網絡結構圖,分爲左邊紅框的[「卷積」-「池化」]特徵提取區,以及右邊藍框的全連接神經網絡區。下文着重介紹卷積區:

 

(1)卷積層Convolution Layers

 

在矩陣運算中,卷積是一種常用的局部特徵提取方法。

 

下圖是「X」圖像經垂直梯度卷積核的卷積結果。

 

Fig.5矩陣數據局部特徵提取

 

其中(a)爲原數據矩陣,(b)爲垂直梯度卷積核,(c)爲原數據矩陣以垂直梯度算子爲卷積核的卷積結果。

 

下公式爲圖(a)左上角九個元素的卷積結果。

 

1*1+0*0+0*(-1)+0*1+1*0+0*(-1)+0*1+0*0+1*(-1)=0

 

下面的動圖更爲清晰地演示了卷積運算的計算過程。

 

原數據矩陣上,以滑動窗口內的9個值,和卷積核的值,一一對應相乘相加,其結果就是該窗口的卷積值。

 

Fig.6 卷積動畫演示

 

而我們平時熟知的圖像,在計算機中的表示,其實也是一個如上述圖像的矩陣,矩陣中每一個元素的取值分別對應了圖像在該像素位置的顏色。

 

Fig.7 手寫數字圖像「8」及其對應的矩陣表示

 

因此,我們對圖像同樣可以採取卷積的操作,在大大減少圖像維度的同時,提取圖像的有效局部特徵信息。

 

(2)池化層 Pooling Layers

 

由於圖像的維度一般較大,爲了進一步減少圖像的尺寸,一般在進行「卷積」特徵提取後,還會進行一步「池化」操作。

 

池化(pool)即下採樣(downsamples),目的是爲了進一步減少特徵圖(Feature Map)的尺寸。

 

卷積層基於不同的特徵提取目標,會採用不同的卷積核;而池化層則具有以下特性:

 

  • 特徵不變性。也就是我們在圖像處理中經常提到的特徵的尺度不變性,池化操作就是圖像的resize,平時一張狗的圖像被縮小了一倍我們還能認出這是一張狗的照片。

     

    這說明這張圖像中仍保留着狗最重要的特徵,我們一看就能判斷圖像中畫的是一隻狗,圖像壓縮時去掉的信息只是一些無關緊要的信息,而留下的信息則是具有尺度不變性的特徵,是最能表達圖像的特徵。

 

 

  • 特徵降維。我們知道一幅圖像含有的信息是很大的,特徵也很多,但是有些信息對於我們做圖像任務時沒有太多用途或者有重複,我們可以把這類冗餘信息去除,把最重要的特徵抽取出來,這也是池化操作的一大作用。

 

  • 在一定程度上防止過擬合,更方便優化

 

池化層進行的運算一般有以下幾種:

 

  • 最大池化(Max Pooling)。取不重疊的4個點的最大值。 

 

  • 均值池化(Mean Pooling)。取不重疊的4個點的均值。 

 

  • 高斯池化。借鑑高斯模糊的方法。(不常用)

 

  • 可訓練池化。訓練函數 ff ,接受不重疊的4個點爲輸入,出入1個點。(不常用)

 

池化層最常用的方法是MaxPooling,其思想非常簡單,爲了與卷積過程區分,最大池化的計算例子如下:

 

Fig.8 最大池化演示

 

其中,池化窗口filters的大小和步長stride的長度一般保持一致。

 

如圖所示,最大池化的目標是,特徵降維,在圖像壓縮的過程中保留最能表達圖像的特徵。

 

圖像之間的尺寸並不一致,因此可以選擇多次卷積、池化操作,直至所提取的Feature Map變爲所需要的尺寸。

 

至此,我們就實現了圖像數據的特徵提取,並避免了「億萬」級別的像素數據帶來的數據維度問題。

 

通常,全連接層在卷積神經網絡的尾部。該層的連接方式與傳統的神經網絡中神經元的連接方式一致。

 

Fig.9 卷積神經網絡的整體結構

 

簡單概括就是:卷積神經網絡(CNN),通過卷積(Convolution)、池化(Pooling)等操作對圖像信息進行降維和特徵提取,並把提取的多個Feature Map以作爲輸入進行全連接神經網絡學習。

 

參考資料:

 

https://www.bilibili.com/video/av44989461 李宏毅講解CNN神經網絡

https://poloclub.github.io/cnn-explainer/ CNN解釋器

https://arxiv.org/abs/2004.15004 佐治亞理工中國博士的CNN解釋器論文

想了解更多關於人工智能的資訊

歡迎關注普適極客