上期回顧:以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解釋器論文
想了解更多關於人工智能的資訊
歡迎關注普適極客