識別手寫數(shù)字的網(wǎng)絡結(jié)構(gòu)是這樣的:

每一層網(wǎng)絡都和相鄰層全部連接。但是這樣并沒有考慮到圖片中像素的空間分布,不管兩個像素離的很近還是非常遠都一視同仁,顯然這樣做是不合理的。
所以卷積神經(jīng)網(wǎng)絡就出現(xiàn)了,它考慮到了輸入值的(像素的)空間分布,(再加上一些人工設定的特性 例如共享權(quán)重等)使得它非常容易訓練。也就可以做出更深層的網(wǎng)絡結(jié)構(gòu),擁有更好的識別效果。
卷積神經(jīng)網(wǎng)絡主要概念有:local receptive fields , shared weights , and pooling。下面一個個解釋。
【 local receptive fields 】
輸入是 28x28的像素值:

對于第一個隱藏層,每一個隱藏層神經(jīng)元 與 輸入層中 5x5的神經(jīng)元有連接。

這個5x5的區(qū)域就叫做 感受視野( local receptive field),表示 一個隱藏層神經(jīng)元在輸入層的感受區(qū)域。這5x5=25個連接對應有25個權(quán)重參數(shù)w,還有一個全局共用的基值b。
當 local receptive field 沿著 整個輸入照片向右(向下)滑動時,每一個 local receptive field 在第一個隱藏層都 對應一個隱藏神經(jīng)元。

圖1: 第一個 local receptive field

圖2:第二個 local receptive field (向右滑動一個像素)
不斷的向右(向下)滑動就可以得到第一個隱藏層。
28x28 的輸入照片 (W=28)
5x5的local receptive fields(滑窗,也叫卷積核 ) (K=5)
滑動步長(( stride )為1 (S = 1)
可以得到 24x24的隱藏層神經(jīng)元。
假如現(xiàn)在 W=15,K=5, S=2 對應的隱藏神經(jīng)元是多少?
藍色表示 左上角的5x5感受視野,綠色是其向右滑動 軌跡。


因為 W=15,K=5, S=2
一次向右滑動對應 6個隱藏神經(jīng)元 =>
= 5次滑動 + 1個原始感受視野
= 10個綠色區(qū)域/步長2 + 1個原始感受視野
= (W-K)/S + 1
得到隱藏層對應的計算公式: 隱藏層邊長 = (W-K)/S + 1 。
(不過有時候為了控制輸出的隱藏層空間分布 會在 輸入層外圍做零填充,假設填充 P個像素, 此時:邊長= (W - K + 2P)/S + 1 ,特別的 當S=1時, 設置零填充為

可以保證 輸入層與輸出層有相同 的空間分布 )

零填充示意圖
【Shared weights and biases】
上文提到 每一個隱藏層神經(jīng)元 對應 5x5=25個權(quán)重參數(shù)w和一個基值參數(shù)b,實際上 我們規(guī)定 每一個隱藏層神經(jīng)元的這些25個權(quán)值w 和 b都共享。 也就是說隱藏層神經(jīng)元共享權(quán)值。
大大減少參數(shù)個數(shù):
如此一來 上圖的 隱藏層 只有 5x5+1 = 26 個參數(shù) ,而如果時全部連接則需要 28x28xN (N代表隱藏神經(jīng)元個數(shù)) 將遠遠多于26個參數(shù),共享權(quán)值 就大大減小了參數(shù)個數(shù) 。
用數(shù)學化的語言描述一下(大致了解即可)對于第j,k個隱藏神經(jīng)元 對應的值為

平移不變性:
這種做法有著很直觀的意義: 上圖第一個隱藏層的神經(jīng)元 都在 檢測 同一個特征(或模式)是否出現(xiàn)。(相同的權(quán)值自然就是在檢測同一個特征)。例如 每一個神經(jīng)元都在 檢測是否出現(xiàn) “垂直邊”,無論這個垂直邊在圖片中的那個位置上都可以被卷積核掃描到。 這就是 卷積神經(jīng)網(wǎng)絡的 平移不變特性 ( translation invariance)。