乾貨 | 深度學習之卷積神經網路(CNN)的前向傳播演算法詳解
微信公眾號
關鍵字全網搜尋最新排名
【機器學習演算法】:排名第一
【機器學習】:排名第一
【Python】:排名第三
【演算法】:排名第四
前言
在(乾貨 | 深度學習之卷積神經網路(CNN)的模型結構)中,我們對CNN的模型結構做了總結,這裡我們就在CNN的模型基礎上,看看CNN的前向傳播演算法是什麼樣子的。重點會和傳統的DNN比較討論。
深度學習系列
CNN結構回顧
在(乾貨 | 深度學習之卷積神經網路(CNN)的模型結構)裡,已經講到了CNN的結構,包括輸出層,若干的卷積層+ReLU啟用函式,若干的池化層,DNN全連線層,以及最後的用Softmax啟用函式的輸出層。這裡我們用一個彩色的汽車樣本的影象識別再從感官上回顧下CNN的結構。圖中的CONV即為卷積層,POOL即為池化層,而FC即為DNN全連線層,包括了我們上面最後的用Softmax啟用函式的輸出層。
CNN結構示意圖
從上圖可以看出,要理順CNN的前向傳播演算法,重點是輸入層的前向傳播,卷積層的前向傳播以及池化層的前向傳播。而DNN全連線層和用Softmax啟用函式的輸出層的前向傳播演算法我們在講DNN時已經講到了。
CNN輸入層到卷積層的前向傳播
輸入層的前向傳播是CNN前向傳播演算法的第一步。一般輸入層對應的都是卷積層,因此我們標題是輸入層前向傳播到卷積層。
這裡還是以影象識別為例
先考慮最簡單的,樣本都是二維的黑白圖片。這樣輸入層X就是一個矩陣,矩陣的值等於圖片的各個畫素位置的值。這時和卷積層相連的卷積核W就也是矩陣。如果樣本都是有RGB的彩色圖片,這樣輸入X就是3個矩陣,即分別對應R,G和B的矩陣,或者說是一個張量。這時和卷積層相連的卷積核W就也是張量,對應的最後一維的維度為3.即每個卷積核都是3個子矩陣組成。同樣的方法,對於3D的彩色圖片之類的樣本,我們的輸入X可以是4維,5維的張量,那麼對應的卷積核W也是個高維的張量。
其中,上標代表層數,星號代表卷積,而 b 代表我們的偏倚, σ 為啟用函式,一般都是ReLU。
和DNN的前向傳播比較一下,其實形式非常的像,只是我們這兒是張量的卷積,而不是矩陣的乘法。同時由於W是張量,那麼同樣的位置,W引數的個數就比DNN多很多了。
為了簡化我們的描述,本文後面如果沒有特殊說明,我們都預設輸入是3維的張量,即用RBG可以表示的彩色圖片。
定義的CNN模型引數
1) 一般我們的卷積核不止一個,比如有K個,那麼我們輸入層的輸出,或者說第二層卷積層的對應的輸入就K個。
2) 卷積核中每個子矩陣的的大小,一般都用子矩陣為方陣的卷積核,比如FxF的子矩陣。
3) 填充padding(以下簡稱P),我們卷積的時候,為了可以更好的識別邊緣,一般都會在輸入矩陣在周圍加上若干圈的0再進行卷積,加多少圈則P為多少。
4) 步幅stride(以下簡稱S),即在卷積過程中每次移動的畫素距離大小。
CNN隱層到卷積層的前向傳播
現在再來看普通隱藏層前向傳播到卷積層時的前向傳播演算法。
假設隱藏層的輸出是M個矩陣對應的三維張量,則輸出到卷積層的卷積核也是M個子矩陣對應的三維張量。這時表示式和輸入層的類似,也是
其中,上標代表層數,星號代表卷積,而b代表我們的偏倚, σ為啟用函式,一般是ReLU。也可以寫成M個子矩陣子矩陣卷積後對應位置相加的形式,即:
和上面唯一的區別僅僅在於,輸入是隱藏層來的,而不是我們輸入的原始圖片樣本形成的矩陣。需要我們定義的CNN模型引數也和上一節一樣,這裡我們需要定義卷積核的個數K,卷積核子矩陣的維度F,填充大小P以及步幅S。
CNN隱層到池化層的前向傳播
池化層的處理邏輯是比較簡單的,目的就是對輸入的矩陣進行縮小概括。比如輸入的若干矩陣是NxN維的,而我們的池化大小是k x k的區域,則輸出的矩陣都是N/k × N/k維的。
這裡需要需要我們定義的CNN模型引數是:
1)池化區域的大小k
2)池化的標準,一般是MAX或者Average。
CNN隱層到全連線層的前向傳播
由於全連線層就是普通的DNN模型結構,因此我們可以直接使用DNN的前向傳播演算法邏輯,即:
這裡的啟用函式一般是sigmoid或者tanh。經過了若干全連線層之後,最後的一層為Softmax輸出層。此時輸出層和普通的全連線層唯一的區別是,啟用函式是softmax函式。這裡需要定義的CNN模型引數是:
1)全連線層的啟用函式
2)全連線層各層神經元的個數
CNN前向傳播演算法小結
現在總結下CNN的前向傳播演算法。
演算法流程
輸入:1個圖片樣本,CNN模型的層數L和所有隱藏層的型別,對於卷積層,要定義卷積核的大小K,卷積核子矩陣的維度F,填充大小P,步幅S。對於池化層,要定義池化區域大小k和池化標準(MAX或Average),對於全連線層,要定義全連線層的啟用函式(輸出層除外)和各層的神經元個數。
輸出:CNN模型的輸出a^L
1) 根據輸入層的填充大小P,填充原始圖片的邊緣,得到輸入張量a^1。
2)初始化所有隱藏層的引數W,b
3)for l=2 to L−1:
a) 如果第l層是卷積層,則輸出為
b) 如果第l層是池化層,則輸出為al=pool(al−1), 這裡的pool指按照池化區域大小k和池化標準將輸入張量縮小的過程。
c) 如果第l層是全連線層,則輸出為
4) 對於輸出層第L層:
以上就是CNN前向傳播演算法的過程總結。有了CNN前向傳播演算法的基礎,後面再來理解CNN的反向傳播演算法就簡單多了。
歡迎分享給他人讓更多的人受益
參考:
-
周志華《機器學習》
-
Neural Networks and Deep Learning by By Michael Nielsen
-
部落格園
http://www.cnblogs.com/pinard/p/6489633.html
-
李航《統計學習方法》
-
Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville
-
UFLDL Tutorial
-
CS231n Convolutional Neural Networks for Visual Recognition, Stanford
加我微信:guodongwe1991,備註姓名-單位-研究方向(加入微信機器學習交流1群)
招募 志願者
廣告、商業合作
請加QQ:[email protected]
喜歡,別忘關注~
幫助你在AI領域更好的發展,期待與你相遇!