CNN工作原理的直觀解釋

CNN是卷積神經網絡的 簡稱,全稱convolutional neural network ,是在ANN(人工神經網絡)中演變而來的。
CNN的單元是神經元,如下一個簡單的神經元包括了 樹突(dendrites)、核心(nucleus)、軸突(axon)、軸突末梢(axon terminals)。其中樹突用來感受外界刺激,集中於細胞的核心,然後經過軸突將衝動傳於神經末梢,最後再傳到下一神經元。

卷積神經網絡的出現是受到了生物處理過程的啓發,因爲神經元之間的連接模式類似於動物的視覺皮層組織。
卷積神經網絡也類似與我們的神經系統,它也是由成千上萬個類似於神經元的東西組成。如下圖的輸入x0,類似於外界衝動的輸入,w0是對應的感知樹突,多個這樣的樹突感知衝動疊加在一起傳入到細胞的中心,然後經過激活再傳入到下一個這樣的神經元,就這樣使得衝動一級一級的往下傳導。

 

                    

基本的當個神經元是以wx + b的形式組成,其中                    
 x0、x1、x2表示輸入向量
w0、w1、w2爲權重,幾個輸入則意味着有幾個權重,即每個輸入都被賦予一個權重
b爲偏置bias
f爲激活函數 。

全連接與局部連接:
全連接(左):每個神經元都與每個像素相連。
局部連接(右):每個神經元的權重個數都是卷積核的大小,這樣就相當於每個神經元只與對應圖片部分的像素相連接,這也稱作局部感知。採用這種局部感知的原因在於圖片中相鄰區域具有更大的相關性,距離較遠時相關性也較小。

兩種連接方法的優劣:
全連接:網絡複雜,計算消耗大,造成權重的數量大難以訓練。
局部連接:計算消耗少,極大的減少了權重的數量,方便訓練。

                         
 

CNN網絡
CNN網絡就是基於局部連接的,由前面所說的局部連接每個神經元可感受到的前一層神經元的數量是有限的,它的個數主要由濾波器的大小(卷積核大小)所決定的。濾波器的大小就是神經與的感受視野,簡稱感受視野。如下單個神經元的感受視野爲4。

 

                                            

CNN的結構:如下圖爲一張CNN的結構圖,最左邊是數據輸入層,對數據做一些 處理,比如去均值(把輸入數據 各個維度都中心化爲0)、 歸一化(把所有的數據都歸一到同樣的 範圍)等等 。
CONV:卷積計算層
RELU:激勵層常見爲sigmoid函數, 把數據壓縮到指定範圍
POOL : 池化層,簡言之, 即取區域平均或最大
FC : 全連接層    

                                               
上圖中CNN要做的事情是:給定一張圖片,是車還是馬未知,是什麼車也未知,現在需要模型判斷這張圖片裏具體是一個什麼東西,總之輸出一個結果
下面用一個直觀的例子來解釋CNN的工作原理(來源於知乎)。
首先CNN拿到一張如下圖,它要做的就是識別這張圖是什麼呢,是X,還是O?   

                                                                               

我們人眼一看,很簡單嘛,明顯就是X啊,但是計算機不知道,它不明白什麼是X。計算機要識別這張圖,首先要使得CNN網絡經過簡單的訓練,在訓練中我們給這張圖片加一個標籤,也就是俗稱的Label,Label=X,就告訴了計算機這張圖代表的是X。它就記住了X的長相。
但是。。。但是實際應用中不是所有的X都寫的那麼的規範,比如大小形狀有些如下所示:
                              

不認識了啊,怎麼辦?這就是CNN在識別中要解決的問題了,準確的說是在CNN的卷積計算層要完成的事情。 對比一下之前認識過的,是不是存在相似之處呢?這就是CNN的特徵提取。 我們知道圖片在計算機中是以像素的形式存儲的,在計算機看來兩張圖片長成如下這般:

                                  

                                                                            其中1代表白色,-1代表黑色。

 對比上圖(a)和(b)是否存在相似的特徵?觀察標準的x圖,我們得出以下三組特徵;
                             

                                             

從標準圖中提出如下三個特徵;

                      

從如上圖提取的三個特徵如下;

                                                      

特徵在CNN中也被成爲卷積核(filter),卷積核的別稱也叫做濾波器、窗口。

打個比方,濾波器就像一雙眼睛,人類視角有限,一眼望去,只能看到這世界的局部。如果一眼就看到全世界,你會累,而且一下子接受全世界所有信息,你大腦接收不過來。當然,即便是看局部,針對局部裏的信息人類雙眼也是有偏重、偏好的。

到這爲止我們提取了X字符的三個特徵值,這一步是在識別之前的訓練中要完成的,訓練的目的就是訓練卷積每一層的的濾波器,模型的訓練是另外一堆繁雜的過程,本文不再展開討論。 

CNN卷積計算
CNN的核心就是卷積計算,卷積計算過程也就是特徵值的提取過程,在前面我們分析了卷積核的獲取,這一步它們就要派上用場了,這些核就是用來做卷積計算的。

那麼,什麼是卷積?
對圖像(不同的數據窗口數據)和濾波矩陣(一組固定的權重:因爲每個神經元的多個權重固定,所以又可以看做一個恆定的濾波器filter)做內積(逐個元素相乘再求和)的操作就是所謂的『卷積』操    作,也是卷積神經網絡的名字來源。概括一句話就是:對應位置相乘取平均。
非嚴格意義上來講,下圖中紅框框起來的部分便可以理解爲一個濾波器,即帶着一組固定權重的神經元。多個濾波器疊加便成了卷積層。
                                                 

                          一個濾波器 + 一組固定權重的神經元,可理解爲一個卷積層
下面繼續講怎麼計算 取 feature裏的(1,1)元素值,再取圖像上藍色框內的(1,1)元素值,二者相乘等於1。把這個結果1填入新的圖中。
                                 

計算其他8個座標處的值,9個覆蓋的格子都計算完了會得到如下圖;

                                               

再對上右圖9個值求平均值,將值填入一張新的圖中。

                    

這張圖稱之爲 feature map (特徵圖),圖中的藍色爲一個”窗口“,窗口的特性呢,就是要會滑動。上面是一個例子,一般窗口最開始是從圖像的左上角,從左向右,從上到下的方式滑動。
下圖左是一個直觀的動態卷積計算圖,步長stride=1。 窗口一步一步地按有規律的滑過整幅圖像,經過一系列卷積對應相乘,求均值運算後,我們終於把一張完整的feature map填滿了,得到一張新的特徵圖(下圖B) 

                                                   

                                                     圖A convSobel_卷積特徵提取  gif                 

                                       、

                                           

                                                            圖B 新生成的feature map

動態圖gif數據在變化,每次濾波器都是針對某一局部的數據窗口進行卷積,這就是所謂的CNN中的局部感知機制。 feature map是每一個feature從原始圖像中提取出來的“特徵”。其中的值,越接近爲1表示對應位置和feature的匹配越完整,越是接近-1,表示對應位置和feature的反面匹配越完整,而值接近0的表示對應位置沒有任何匹配或者說沒有什麼關聯。
 一般的一個特徵核提取圖像的一種特徵即產生一張feature map,一幅圖片可能會有成千上萬個這個樣的特徵核來提取各種不同的圖像特徵。 對這張X圖來說,我們用的是3個feature,因此最終產生3個 feature map,至此卷積操作就計算完了。
                                                 

前面我們提到對於新生成的feature map其中的值,越接近爲1表示對應位置和feature的匹配越完整,越是接近-1,表示對應位置和feature的反面匹配越完整,而值接近0的表示對應位置沒有任何匹配或者說沒有什麼關聯。

那麼對於map中的那些沒有關聯和匹配的地方我們是否可以去掉呢?答案是可以捨棄。這樣既減少了數據,又使得操作更加方便,這就是前面說到的非線性激活層,該層用到最多的是RELU函數,  f(x)=max(0,x) 即,保留大於等於0的值,其餘所有小於0的數值直接改寫爲0,如下圖; 
                              

最終經過RELU函數之後就剩下大於0的值

                                                     
                                                    

pooling池化層
卷積操作後,我們得到了一張張有着不同值的feature map,儘管數據量比原圖少了很多,但還是過於龐大(比較深度學習動不動就幾十萬張訓練圖片),因此接下來的池化操作就可以發揮作用了,它最大的目標就是減少數據量。

池化分爲兩種,Max Pooling 最大池化、Average Pooling平均池化。顧名思義,最大池化就是取最大值,平均池化就是取平均值。
拿最大池化舉例:選擇池化尺寸爲3x3,因爲選定一個3x3的窗口,在其內選出最大值更新進新的feature map,如下可觀動態池化過程。 
                                               

                                                                                   Max-pooling.gif 
前面說了這麼多,都是在爲最後的輸出做準備,CNN提取特徵值的流程是從簡單到複雜的過程,基層卷積提取基本的特徵值比如邊、角、曲線,隨着卷積層的增加,對應的濾波器檢測的特徵就更加複雜,高層濾波器是用來檢測低階特徵的組合情況(包括半圓、四邊形等),如此積累,以檢測原來越複雜的特徵。最後一層濾波器按照訓練CNN目的的不同,做了相應的激活,如可能是在檢測到人臉時,手寫字體等時候激活。

回到剛纔的例子,採用三個特徵核,原圖片尺寸爲9X9,在一系列的卷積、relu、池化操作後,得到尺寸被壓縮爲2X2的三張特徵圖。這三張特徵圖表徵了圖像的最高級的特徵,在全連接層用作分類使用。 

                                                     
                                                    

 全連接層
得到了2X2的特徵圖後,對其應用全連接網絡,再全連接層中有一個非常重要的函數----Softmax,它是一個分類函數,輸出的是每個對應類別的概率值。
比如: 【0.5,0.03,0.89,0.97,0.42,0.15】就表示有6個類別,並且屬於第四個類別的概率值0.97最大,因此判定屬於第四個類別。
注意:本例中因爲只有兩個類別X和O,而且數據量到此已經非常少了,因此直接將三個特徵圖改變維度直接變成一維的數據。(相當於全連接層的每個參數(權重)均爲1)

                                                                                     

假設對一張看起來並不標準的圖進行分類。如下(左),對於進行一系列操作後,假設得到的概率值如下所示:對於進行一系列操作後,假設得到的概率值如(右)

                       

 0.9表示極其大可能是X,因此對應到X的黃色線條比對應到O的綠色線條要粗很多很多。我們對結果進行統計分析後可判斷這張圖片裏的字母爲X。 
更復雜全連接可參考: https://blog.csdn.net/m0_37407756/article/details/80904580

Get 更多
http://neuralnetworksanddeeplearning.com/
雨石 卷積神經網絡:http://blog.csdn.net/stdcoutzyx/article/details/41596663
cs231n 卷積神經網絡:http://cs231n.github.io/convolutional-networks/
七月在線寒老師講的5月dl班第4次課CNN與常用框架視頻,已經剪切部分放在七月在線官網:julyedu.com
七月在線5月深度學習班:https://www.julyedu.com/course/getDetail/37
七月在線5月深度學習班課程筆記——No.4《CNN與常用框架》:
http://blog.csdn.net/joycewyj/article/details/51792477 深度學習與計算機視覺系列(10)_細說卷積神經網絡:http://blog.csdn.net/han_xiaoyang/article/details/50542880
圖像卷積與濾波的一些知識點:http://blog.csdn.net/zouxy09/article/details/49080029
CNN、RNN、DNN內部網絡結構區別:https://www.zhihu.com/question/34681168
神經網絡與深度學習簡史:1 感知機和BP算法、4 深度學習的偉大復興
在線製作gif 動圖:http://www.tuyitu.com/photoshop/gif.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章