一)卷積神經網絡歷史沿革
二)CNN簡單介紹
三)CNN相關基礎知識
在過去的幾年里,卷積神經網絡(CNN)引起了人們的廣泛關注,尤其是因為它徹底改變了計算機視覺領域,它是近年來深度學習能在計算機視覺領域取得突破性成果的基石。它也逐漸在被其他諸如自然語言處理、推薦系統(tǒng)和語音識別等領域廣泛使用。在這里,主要從三個方面介紹CNN,
(1)CNN歷史發(fā)展 (2)CNN簡單介紹 (3)CNN相關基礎知識
卷積神經網絡的發(fā)展最早可以追溯到上世紀60年代,Hubel等人通過對貓視覺皮層細胞的研究,提出了感受野這個概念,到80年代,Fukushima在感受野概念的基礎之上提出了神經認知機的概念,可以看作是卷積神經網絡的第一個實現網絡。 而后隨著計算機軟硬件技術的發(fā)展,尤其GPU,使得CNN快速發(fā)展,在2012年ImageNet大賽中CNN由于其高精確度脫穎而出,于是,深度學習正式進入人們的視野。而后,R-CNN,FAST-CNN,Faster-cnn等快速發(fā)展,在深度學習領域大放異彩。
1962年 Hubel和Wiesel
卷積神經網絡的發(fā)展,最早可以追溯到1962年,Hubel和Wiesel對貓大腦中的視覺系統(tǒng)的研究。
1980年 福島邦彥
1980年,日本科學家福島邦彥在論文《Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position》提出了一個包含卷積層、池化層的神經網絡結構。
1998年 Yann Lecun
1998年,在這個基礎上,Yann Lecun在論文《Gradient-Based Learning Applied to Document Recognition》中提出了LeNet-5,將BP算法應用到這個神經網絡結構的訓練上,就形成了當代卷積神經網絡的雛形。
- 2012年 Hinton組
直到2012年,Imagenet圖像識別大賽中,Hinton組的論文《ImageNet Classification with Deep Convolutional Neural Networks》中提到的Alexnet引入了全新的深層結構和dropout方法,一下子把error rate從25%以上提升到了15%,顛覆了圖像識別領域。
和人認識事物的過程一樣,有外界信號刺激眼睛的視神經,而后傳到大腦皮層,形成物體的形象,卷積神經網絡通過識別圖像的特征,以對圖片的特征識別。
在 CNN 出現之前,圖像對于人工智能來說是一個難題,有2個原因:
- 圖像需要處理的數據量太大,導致成本很高,效率很低
- 圖像在數字化的過程中很難保留原有的特征,導致圖像處理的準確率不高
(1)需要處理的數據量太大
圖像是由像素構成的,每個像素又是由顏色構成的,通常彩色圖片有RGB三原色組成,每一種單通道的圖都是由一個0 -255之間的二維矩陣組成。
現在隨隨便便一張圖片都是 1000×1000 像素以上的, 每個像素都有RGB 3個參數來表示顏色信息。假如我們處理一張 1000×1000 像素的圖片,我們就需要處理3百萬個參數!
1000×1000×3=3,000,000
這么大量的數據處理起來是非常消耗資源的!
卷積神經網絡 – CNN 解決的第一個問題就是“將復雜問題簡化”,把大量參數降維成少量參數,再做處理。
(2)保留圖像特征
圖片數字化的傳統(tǒng)方式我們簡化一下,就類似下圖的過程:
對于上述圖片的處理,可以看出,同樣的原點,處理方式完全不一樣,圖像的內容(本質)并沒有發(fā)生變化,只是位置發(fā)生了變化。
所以,在卷積神經網絡中,他用類似視覺的方式保留了圖像的特征,當圖像做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的圖像。
那么,人是如何識別圖片的呢?
當您看到一個物體時,您眼中的光感受器會通過視神經將信號發(fā)送到正在處理輸入的主視覺皮層。在初級視覺皮層,使眼睛看到的東西的感覺。神經元和大腦連接的深層復雜層次結構在記憶和標記物體的過程中起著重要作用。
上圖完整的展示了我們是如何通過視神經來識別外界物體的,人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發(fā)現邊緣和方向),然后抽象(大腦判定,眼前的物體的形狀,是圓形的),然后進一步抽象(大腦進一步判定該物體是只氣球)。即外界輸入,初步處理,特征選擇,然后進一步抽象識別物體。
那么,卷積神經網絡作為普通神經網絡的一種,又是如何工作的呢?
對于普通的神經網絡,即全連接感知器模型,如下圖:
多層感知器模型能夠很好的處理二維數據,這種方法的局限性在于,
- 圖像在同一列鄰近的像素在這個向量中可能相距較遠。它們構成的模式可能難以被模型識別。
- 對于大尺寸的輸入圖像,使用全連接層容易導致模型過大。假設輸入是高和寬均為1,0001,000像素的彩色照片(含3個通道)。即使全連接層輸出個數仍是256,該層權重參數的形狀也是3,000,000×2563,000,000×256:它占用了大約3 GB的內存或顯存。這會帶來過于復雜的模型和過高的存儲開銷。
卷積神經網絡依舊是層級網絡,只是層的功能和形式做了變化,可以說是傳統(tǒng)神經網絡的一個改進。比如下圖中就多了許多傳統(tǒng)神經網絡沒有的層次,如卷積層,池化層等。
卷積神經網絡的層級結構
· 數據輸入層/ Input layer
· 卷積計算層/ CONV layer
· ReLU激勵層 / ReLU layer
· 池化層 / Pooling layer
· 全連接層 / FC layer
CNN,即卷積神經網絡,CNN本質上是一個多層感知機,其成功的原因關鍵在于它所采用的局部連接和共享權值的方式,一方面減少了的權值的數量使得網絡易于優(yōu)化,另一方面降低了過擬合的風險。
在詳細介紹卷積神經網絡之前,了解幾個基本的概念是非常有必要的。
卷積神經網絡相比較其他常規(guī)的神經網絡在于其能夠利用卷積來提取圖像中的特征,那么,什么是卷積運算呢?
在二維卷積層中,一個二維輸入數組和一個二維核(kernel)數組通過互相關運算輸出一個二維數組。我們用一個3*3的矩陣和2*2的核來做二位互相關運算,圖中的陰影部分為第一個輸出元素及其計算所使用的輸入和核數組元素:0×0+1×1+3×2+4×3=190×0+1×1+3×2+4×3=19。
在二維互相關運算中,卷積窗口從輸入數組的最左上方開始,按從左往右、從上往下的順序,依次在輸入數組上滑動。當卷積窗口滑動到某一位置時,窗口中的輸入子數組與核數組按元素相乘并求和,得到輸出數組中相應位置的元素。依次做卷積運算,即得到:
用動圖來展示:
那么,二維卷積層將輸入和卷積核做互相關運算,并加上一個標量偏差來得到輸出。卷積層的模型參數包括了卷積核和標量偏差。在訓練模型的時候,通常我們先對卷積核隨機初始化,然后不斷迭代卷積核和偏差。用卷積來實現兩個矩陣之間的運算,
二維卷積層輸出的二維數組可以看作輸入在空間維度(寬和高)上某一級的表征,也叫特征圖(feature map)。影響元素xx的前向計算的所有可能輸入區(qū)域(可能大于輸入的實際尺寸)叫做xx的感受野(receptive field)。
以下圖為例,輸入中陰影部分的4個元素是輸出中陰影部分元素的感受野。我們將圖中形狀為2×22×2的輸出記為Y,并考慮一個更深的卷積神經網絡:將Y與另一個形狀為2×22×2的核數組做互相關運算,輸出單個元素zz。那么,z在Y上的感受野包括Y的全部4個元素,在輸入上的感受野包括其中全部9個元素??梢?,我們可以通過更深的卷積神經網絡使特征圖中單個元素的感受野變得更加廣闊,從而捕捉輸入上更大尺寸的特征。
一般來說,假設輸入形狀是h×w×w,卷積核窗口形狀是h×w,那么輸出形狀將會是
(n?k+1)×(n?k+1).
所以卷積層的輸出形狀由輸入形狀和卷積核窗口形狀決定。
(1)填充
填充(padding)是指在輸入高和寬的兩側填充元素(通常是0元素)。填充可以增加輸出的高和寬。
下圖我們在原輸入高和寬的兩側分別添加了值為0的元素,使得輸入高和寬從3變成了5,并導致輸出高和寬由2增加到4。圖5.2中的陰影部分為第一個輸出元素及其計算所使用的輸入和核數組元素:0×0+0×1+0×2+0×3=00×0+0×1+0×2+0×3=0。
(2)步幅
卷積窗口從輸入數組的最左上方開始,按從左往右、從上往下的順序,依次在輸入數組上滑動。我們將每次滑動的行數和列數稱為步幅(stride),即卷積核在輸入矩陣中每次滑動的行數和列數。步幅可以減小輸出的高和寬。
下圖展示了在高上步幅為3、在寬上步幅為2的二維互相關運算??梢钥吹剑敵龅谝涣械诙€元素時,卷積窗口向下滑動了3行,而在輸出第一行第二個元素時卷積窗口向右滑動了2列。當卷積窗口在輸入上再向右滑動2列時,由于輸入元素無法填滿窗口,無結果輸出。陰影部分為輸出元素及其計算所使用的輸入和核數組元素:0×0+0×1+1×2+2×3=80×0+0×1+1×2+2×3=8、0×0+6×1+0×2+0×3=60×0+6×1+0×2+0×3=6。
假設彩色圖像的高和寬分別是h和w(像素),那么它可以表示為一個3×h×w的多維數組。我們將大小為3的這一維稱為通道(channel)維,灰度圖維為1×h×w。用多通道可以拓展卷積層的模型參數。
下圖展示了含2個輸入通道的二維互相關計算的例子。在每個通道上,二維輸入數組與二維核數組做互相關運算,再按通道相加即得到輸出。陰影部分為第一個輸出元素及其計算所使用的輸入和核數組元素:(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56。
1×1卷積層通常用來調整網絡層之間的通道數,并控制模型復雜度。