在前面咱們講述了DNN的模型與前向反向傳播算法。而在DNN大類中,卷積神經網絡(Convolutional Neural Networks,如下簡稱CNN)是最爲成功的DNN特例之一。CNN普遍的應用於圖像識別,固然如今也應用於NLP等其餘領域,本文咱們就對CNN的模型結構作一個總結。html
在學習CNN前,推薦你們先學習DNN的知識。若是不熟悉DNN而去直接學習CNN,難度會比較的大。這是我寫的DNN的教程:git
深度神經網絡(DNN)模型與前向傳播算法github
首先咱們來看看CNN的基本結構。一個常見的CNN例子以下圖:post
圖中是一個圖形識別的CNN模型。能夠看出最左邊的船的圖像就是咱們的輸入層,計算機理解爲輸入若干個矩陣,這點和DNN基本相同。學習
接着是卷積層(Convolution Layer),這個是CNN特有的,咱們後面專門來說。卷積層的激活函數使用的是ReLU。咱們在DNN中介紹過ReLU的激活函數,它其實很簡單,就是$ReLU(x) = max(0,x)$。在卷積層後面是池化層(Pooling layer),這個也是CNN特有的,咱們後面也會專門來說。須要注意的是,池化層沒有激活函數。htm
卷積層+池化層的組合能夠在隱藏層出現不少次,上圖中出現兩次。而實際上這個次數是根據模型的須要而來的。固然咱們也能夠靈活使用使用卷積層+卷積層,或者卷積層+卷積層+池化層的組合,這些在構建模型的時候沒有限制。可是最多見的CNN都是若干卷積層+池化層的組合,如上圖中的CNN結構。blog
在若干卷積層+池化層後面是全鏈接層(Fully Connected Layer, 簡稱FC),全鏈接層其實就是咱們前面講的DNN結構,只是輸出層使用了Softmax激活函數來作圖像識別的分類,這點咱們在DNN中也有講述。
從上面CNN的模型描述能夠看出,CNN相對於DNN,比較特殊的是卷積層和池化層,若是咱們熟悉DNN,只要把卷積層和池化層的原理搞清楚了,那麼搞清楚CNN就容易不少了。
首先,咱們去學習卷積層的模型原理,在學習卷積層的模型原理前,咱們須要瞭解什麼是卷積,以及CNN中的卷積是什麼樣子的。
你們學習數學時都有學過卷積的知識,微積分中卷積的表達式爲:$$S(t) = \int x(t-a)w(a) da$$
離散形式是:$$s(t) = \sum\limits_ax(t-a)w(a)$$
這個式子若是用矩陣表示能夠爲:$$s(t)=(X*W)(t)$$
其中星號表示卷積。
若是是二維的卷積,則表示式爲:$$s(i,j)=(X*W)(i,j) = \sum\limits_m \sum\limits_n x(i-m,j-n) w(m,n)$$
在CNN中,雖然咱們也是說卷積,可是咱們的卷積公式和嚴格意義數學中的定義稍有不一樣,好比對於二維的卷積,定義爲:$$s(i,j)=(X*W)(i,j) = \sum\limits_m \sum\limits_n x(i+m,j+n) w(m,n)$$
這個式子雖然從數學上講不是嚴格意義上的卷積,可是大牛們都這麼叫了,那麼咱們也跟着這麼叫了。後面講的CNN的卷積都是指的上面的最後一個式子。
其中,咱們叫W爲咱們的卷積核,而X則爲咱們的輸入。若是X是一個二維輸入的矩陣,而W也是一個二維的矩陣。可是若是X是多維張量,那麼W也是一個多維的張量。
有了卷積的基本知識,咱們如今來看看CNN中的卷積,假如是對圖像卷積,回想咱們的上一節的卷積公式,其實就是對輸入的圖像的不一樣局部的矩陣和卷積核矩陣各個位置的元素相乘,而後相加獲得。
舉個例子以下,圖中的輸入是一個二維的3x4的矩陣,而卷積核是一個2x2的矩陣。這裏咱們假設卷積是一次移動一個像素來卷積的,那麼首先咱們對輸入的左上角2x2局部和卷積核卷積,即各個位置的元素相乘再相加,獲得的輸出矩陣S的$S_{00}$的元素,值爲$aw+bx+ey+fz$。接着咱們將輸入的局部向右平移一個像素,如今是(b,c,f,g)四個元素構成的矩陣和卷積核來卷積,這樣咱們獲得了輸出矩陣S的$S_{01}$的元素,一樣的方法,咱們能夠獲得輸出矩陣S的$S_{02},S_{10},S_{11}, S_{12}$的元素。
最終咱們獲得卷積輸出的矩陣爲一個2x3的矩陣S。
再舉一個動態的卷積過程的例子以下:
咱們有下面這個綠色的5x5輸入矩陣,卷積核是一個下面這個黃色的3x3的矩陣。卷積的步幅是一個像素。則卷積的過程以下面的動圖。卷積的結果是一個3x3的矩陣。
上面舉的例子都是二維的輸入,卷積的過程比較簡單,那麼若是輸入是多維的呢?好比在前面一組卷積層+池化層的輸出是3個矩陣,這3個矩陣做爲輸入呢,那麼咱們怎麼去卷積呢?又好比輸入的是對應RGB的彩色圖像,便是三個分佈對應R,G和B的矩陣呢?
在斯坦福大學的cs231n的課程上,有一個動態的例子,連接在這。建議你們對照着例子中的動圖看下面的講解。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)
1) Neural Networks and Deep Learning by By Michael Nielsen
2) Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville
4)CS231n Convolutional Neural Networks for Visual Recognition, Stanford