什麼是卷積神經網絡
首先,我們先擷取一個感性認識,下圖是一個卷積神經網絡的示意圖:
網絡架構
如圖所示,一個卷積神經網絡由若幹卷積層、Pooling層、全連接配接層組成。你可以建構各種不同的卷積神經網絡,它的常用架構模式為:
INPUT -> [[CONV]*N -> [POOL]]*M -> [FC]*K
也就是 N N N個卷積層疊加,然後(可選)疊加一個Pooling層,重複這個結構 M M M次,最後疊加 K K K個全連接配接層。
對于上圖展示的卷積神經網絡:
INPUT -> CONV -> POOL -> CONV -> POOL -> FC-> FC
按照上述模式可以表示為:
INPUT -> [[CONV]*1 -> POOL]*2 -> [FC]*2
也就是:
N = 1 , M = 2 , K = 2 N=1, M=2,K=2 N=1,M=2,K=2
三維的層結構
從圖中我們可以發現卷積神經網絡的層結構和全連接配接神經網絡的層結構有很大不同。全連接配接神經網絡每層的神經元是按照一維排列的,也就是排成一條線的樣子;而卷積神經網絡每層的神經元是按照三維排列的,也就是排成一個長方體的樣子,有寬度、高度和深度。
對于圖中展示的神經網絡,我們看到輸入層的寬度和高度對應于輸入圖像的寬度和高度,而它的深度為1。接着,第一個卷積層對這幅圖像進行了卷積操作(後面我們會講如何計算卷積),得到了三個Feature Map。這裡的"3"可能是讓很多初學者迷惑的地方,實際上,就是這個卷積層包含三個Filter,也就是三套參數,每個Filter都可以把原始輸入圖像卷積得到一個Feature Map,三個Filter就可以得到三個Feature Map。至于一個卷積層可以有多少個Filter,那是可以自由設定的。也就是說,卷積層的Filter個數也是一個超參數。我們可以把Feature Map可以看做是通過卷積變換提取到的圖像特征,三個Filter就對原始圖像提取出三組不同的特征,也就是得到了三個Feature Map,也稱做三個通道(channel)。
繼續觀察圖中,在第一個卷積層之後,Pooling層對三個Feature Map做了下采樣(後面我們會講如何計算下采樣),得到了三個更小的Feature Map。接着,是第二個卷積層,它有5個Filter。每個Fitler都把前面下采樣之後的3個Feature Map卷積在一起,得到一個新的Feature Map。這樣,5個Filter就得到了5個Feature Map。接着,是第二個Pooling,繼續對5個Feature Map進行下采樣,得到了5個更小的Feature Map。
圖中所示網絡的最後兩層是全連接配接層。第一個全連接配接層的每個神經元,和上一層5個Feature Map中的每個神經元相連,第二個全連接配接層(也就是輸出層)的每個神經元,則和第一個全連接配接層的每個神經元相連,這樣得到了整個網絡的輸出。
至此,我們對卷積神經網絡有了最基本的感性認識。接下來,我們将介紹卷積神經網絡中各種層的計算和訓練。
卷積神經網絡輸出值的計算
卷積層輸出值的計算
我們用一個簡單的例子來講述如何計算卷積,然後,我們抽象出卷積層的一些重要概念和計算方法。
假設有一個 5 × 5 5\times 5 5×5的圖像,使用一個 3 × 3 3\times3 3×3的filter進行卷積,想得到一個 3 × 3 3\times3 3×3的Feature Map,如下所示:
為了清楚的描述卷積計算過程,我們首先對圖像的每個像素進行編号,用 x i , j x_{i,j} xi,j表示圖像的第 i i i行第 j j j列元素;對filter的每個權重進行編号,用 w m , n w_{m,n} wm,n表示第 m m m行第 n n n列權重,用 w b w_b wb表示filter的偏置項;對Feature Map的每個元素進行編号,用 a i , j a_{i,j} ai,j表示Feature Map的第 i i i行第 j j j列元素;用 f f f表示激活函數(這個例子選擇relu函數作為激活函數)。然後,使用下列公式計算卷積:
a i , j = f ( ∑ m = 0 2 ∑ n = 0 2 w m , n x i + m , j + n + w b ) ( 式 1 ) a_{i,j}=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{i+m,j+n}+w_b)\qquad(式1) ai,j=f(m=0∑2n=0∑2wm,nxi+m,j+n+wb)(式1)
例如,對于Feature Map左上角元素 a 0 , 0 a_{0,0} a0,0來說,其卷積計算方法為:
a 0 , 0 = f ( ∑ m = 0 2 ∑ n = 0 2 w m , n x m + 0 , n + 0 + w b ) = r e l u ( w 0 , 0 x 0 , 0 + w 0 , 1 x 0 , 1 + w 0 , 2 x 0 , 2 + w 1 , 0 x 1 , 0 + w 1 , 1 x 1 , 1 + w 1 , 2 x 1 , 2 + w 2 , 0 x 2 , 0 + w 2 , 1 x 2 , 1 + w 2 , 2 x 2 , 2 + w b ) = r e l u ( 1 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 1 + 0 ) = r e l u ( 4 ) = 4 a_{0,0}=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{m+0,n+0}+w_b)=relu(w_{0,0}x_{0,0}+w_{0,1}x_{0,1}+w_{0,2}x_{0,2}+w_{1,0}x_{1,0}+w_{1,1}x_{1,1}+w_{1,2}x_{1,2}+w_{2,0}x_{2,0}+w_{2,1}x_{2,1}+w_{2,2}x_{2,2}+w_b)=relu(1+0+1+0+1+0+0+0+1+0)=relu(4)=4 a0,0=f(m=0∑2n=0∑2wm,nxm+0,n+0+wb)=relu(w0,0x0,0+w0,1x0,1+w0,2x0,2+w1,0x1,0+w1,1x1,1+w1,2x1,2+w2,0x2,0+w2,1x2,1+w2,2x2,2+wb)=relu(1+0+1+0+1+0+0+0+1+0)=relu(4)=4
計算結果如下圖所示:
接下來,Feature Map的元素 a 0 , 1 a_{0,1} a0,1的卷積計算方法為:
a 0 , 1 = f ( ∑ m = 0 2 ∑ n = 0 2 w m , n x m + 0 , n + 1 + w b ) = r e l u ( w 0 , 0 x 0 , 1 + w 0 , 1 x 0 , 2 + w 0 , 2 x 0 , 3 + w 1 , 0 x 1 , 1 + w 1 , 1 x 1 , 2 + w 1 , 2 x 1 , 3 + w 2 , 0 x 2 , 1 + w 2 , 1 x 2 , 3 + w 2 , 2 x 2 , 3 + w b ) = r e l u ( 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 ) = r e l u ( 3 ) = 3 a_{0,1}=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{m+0,n+1}+w_b)=relu(w_{0,0}x_{0,1}+w_{0,1}x_{0,2}+w_{0,2}x_{0,3}+w_{1,0}x_{1,1}+w_{1,1}x_{1,2}+w_{1,2}x_{1,3}+w_{2,0}x_{2,1}+w_{2,1}x_{2,3}+w_{2,2}x_{2,3}+w_b)=relu(1+0+0+0+1+0+0+0+1+0)=relu(3)=3 a0,1=f(m=0∑2n=0∑2wm,nxm+0,n+1+wb)=relu(w0,0x0,1+w0,1x0,2+w0,2x0,3+w1,0x1,1+w1,1x1,2+w1,2x1,3+w2,0x2,1+w2,1x2,3+w2,2x2,3+wb)=relu(1+0+0+0+1+0+0+0+1+0)=relu(3)=3
計算結果如下圖所示:
可以依次計算出Feature Map中所有元素的值。下面的動畫顯示了整個Feature Map的計算過程:
上面的計算過程中,步幅(stride)為1。步幅可以設為大于1的數。例如,當步幅為2時,Feature Map計算如下:
我們注意到,當步幅設定為2的時候,Feature Map就變成2*2了。這說明圖像大小、步幅和卷積後的Feature Map大小是有關系的。事實上,它們滿足下面的關系:
W 2 = ( W 1 − F + 2 P ) / S + 1 ( 式 2 ) H 2 = ( H 1 − F + 2 P ) / S + 1 ( 式 3 ) W_2 = (W_1 - F + 2P)/S + 1\qquad(式2)\\ H_2 = (H_1 - F + 2P)/S + 1\qquad(式3) W2=(W1−F+2P)/S+1(式2)H2=(H1−F+2P)/S+1(式3)
在上面兩個公式中, W 2 W_2 W2是卷積後Feature Map的寬度; W 1 W_1 W1是卷積前圖像的寬度; F F F是filter的寬度; P P P是Zero Padding數量,Zero Padding是指在原始圖像周圍補幾圈0,如果 P P P的值是1,那麼就補1圈0; S S S是步幅; H 2 H_2 H2是卷積後Feature Map的高度; H 1 H_1 H1是卷積前圖像的寬度。(式2)和(式3)本質上是一樣的。
前面我們已經講了深度為1的卷積層的計算方法,如果深度大于1怎麼計算呢?其實也是類似的。如果卷積前的圖像深度為 D D D,那麼相應的filter的深度也必須為 D D D。我們擴充一下(式1),得到了深度大于1的卷積計算公式:
a i , j = f ( ∑ d = 0 D − 1 ∑ m = 0 F − 1 ∑ n = 0 F − 1 w d , m , n x d , i + m , j + n + w b ) ( 式 4 ) a_{i,j}=f(\sum_{d=0}^{D-1}\sum_{m=0}^{F-1}\sum_{n=0}^{F-1}w_{d,m,n}x_{d,i+m,j+n}+w_b)\qquad(式4) ai,j=f(d=0∑D−1m=0∑F−1n=0∑F−1wd,m,nxd,i+m,j+n+wb)(式4)
在(式4)中, D D D是深度; F F F是filter的大小(寬度或高度,兩者相同); w d , m , n w_{d,m,n} wd,m,n表示filter的第 d d d層第 m m m行第 n n n列權重; a d , i , j a_{d,i,j} ad,i,j表示圖像的第 d d d層第 i i i行第 j j j列像素;其它的符号含義和(式1)是相同的,不再贅述。
我們前面還曾提到,每個卷積層可以有多個filter。每個filter和原始圖像進行卷積後,都可以得到一個Feature Map。是以,卷積後Feature Map的深度(個數)和卷積層的filter個數是相同的。
下面的動畫顯示了包含兩個filter的卷積層的計算。我們可以看到 7 × 7 × 3 7\times7\times3 7×7×3輸入,經過兩個 3 × 3 × 3 3\times3\times3 3×3×3filter的卷積(步幅為2),得到了 3 × 3 × 2 3\times3\times2 3×3×2的輸出。另外我們也會看到下圖的Zero padding是1,也就是在輸入元素的周圍補了一圈0。Zero padding對于圖像邊緣部分的特征提取是很有幫助的。
以上就是卷積層的計算方法。這裡面展現了局部連接配接和權值共享:每層神經元隻和上一層部分神經元相連(卷積計算規則),且filter的權值對于上一層所有神經元都是一樣的。對于包含兩個 3 × 3 × 3 3\times3\times3 3×3×3的fitler的卷積層來說,其參數數量僅有 ( 3 × 3 × 3 + 1 ) × 2 = 56 (3\times3\times3+1)\times2=56 (3×3×3+1)×2=56個,且參數數量與上一層神經元個數無關。與全連接配接神經網絡相比,其參數數量大大減少了。
用卷積公式來表達卷積層計算
(式4)的表達很是繁冗,最好能簡化一下。就像利用矩陣可以簡化表達全連接配接神經網絡的計算一樣,我們利用卷積公式可以簡化卷積神經網絡的表達。
下面我們介紹二維卷積公式。
設矩陣 A , B A,B A,B, 其行、列數分别為 m a m_a ma、 n a n_a na、 m b m_b mb、 n b n_b nb、則二維卷積公式如下:
C s , t = ∑ 0 m a − 1 ∑ 0 n a − 1 A m , n B s − m , t − n C_{s,t}=\sum_0^{m_a-1}\sum_0^{n_a-1} A_{m,n}B_{s-m,t-n} Cs,t=0∑ma−10∑na−1Am,nBs−m,t−n
且 s , t s,t s,t滿足條件 0 ≤ s < m a + m b − 1 , 0 ≤ t < n a + n b − 1 0\le{s}\lt{m_a+m_b-1}, 0\le{t}\lt{n_a+n_b-1} 0≤s<ma+mb−1,0≤t<na+nb−1。
我們可以把上式寫成
C = A × B ( 式 5 ) C = A \times B\qquad(式5) C=A×B(式5)
如果我們按照(式5)來計算卷積,我們可以發現矩陣 A A A實際上是filter,而矩陣 B B B是待卷積的輸入,位置關系也有所不同:
從上圖可以看到, A A A左上角的值 a 0 , 0 a_{0,0} a0,0與 B B B對應區塊中右下角的值 b 1 , 1 b_{1,1} b1,1相乘,而不是與左上角的 b 0 , 0 b_{0,0} b0,0相乘。是以,數學中的卷積和卷積神經網絡中的『卷積』還是有差別的,為了避免混淆,我們把卷積神經網絡中的『卷積』操作叫做互相關(cross-correlation)操作。
卷積和互相關操作是可以轉化的。首先,我們把矩陣A翻轉180度,然後再交換A和B的位置(即把B放在左邊而把A放在右邊。卷積滿足交換率,這個操作不會導緻結果變化),那麼卷積就變成了互相關。
如果我們不去考慮兩者這麼一點點的差別,我們可以把(式5)代入到(式4):
A = f ( ∑ d = 0 D − 1 X d × W d + w b ) ( 式 6 ) A=f(\sum_{d=0}^{D-1}X_d\times W_d+w_b)\qquad(式6) A=f(d=0∑D−1Xd×Wd+wb)(式6)
其中, A A A是卷積層輸出的feature map。同(式4)相比,(式6)就簡單多了。然而,這種簡潔寫法隻适合步長為1的情況。
Pooling層輸出值的計算
Pooling層主要的作用是下采樣,通過去掉Feature Map中不重要的樣本,進一步減少參數數量。Pooling的方法很多,最常用的是Max Pooling。Max Pooling實際上就是在nn的樣本中取最大值,作為采樣後的樣本值。下圖是22 max pooling:
除了Max Pooing之外,常用的還有Mean Pooling——取各樣本的平均值。
對于深度為D的Feature Map,各層獨立做Pooling,是以Pooling後的深度仍然為D。
全連接配接層
全連接配接層輸出值的計算和神經網絡講過的全連接配接神經網絡是一樣的,這裡就不再贅述了。
卷積神經網絡的訓練
和全連接配接神經網絡相比,卷積神經網絡的訓練要複雜一些。但訓練的原理是一樣的:利用鍊式求導計算損失函數對每個權重的偏導數(梯度),然後根據梯度下降公式更新權重。訓練算法依然是反向傳播算法。
我們先回憶一下反向傳播算法,整個算法分為三個步驟:
- 前向計算每個神經元的輸出值 a j a_j aj( j j j表示網絡的第 j j j個神經元,以下同);
- 反向計算每個神經元的誤差項 δ j \delta_j δj, δ j \delta_j δj在有的文獻中也叫做敏感度(sensitivity)。它實際上是網絡的損失函數 E d E_d Ed對神經元權重輸入 n e t j net_j netj的偏導數,即 δ j = ∂ E d ∂ n e t j \delta_j=\frac{\partial{E_d}}{\partial{net_j}} δj=∂netj∂Ed;
- 計算每個神經元連接配接權重 w j i w_{ji} wji的梯度( w j i w_{ji} wji表示從神經元 i i i連接配接到神經元 j j j的權重),公式為 ∂ E d ∂ w j i = a i δ j \frac{\partial{E_d}}{\partial{w_{ji}}}=a_i\delta_j ∂wji∂Ed=aiδj,其中, a i a_i ai表示神經元 i i i的輸出。
最後,根據梯度下降法則更新每個權重即可。
對于卷積神經網絡,由于涉及到局部連接配接、下采樣的等操作,影響到了第二步誤差項 δ \delta δ的具體計算方法,而權值共享影響了第三步權重 w w w的梯度的計算方法。接下來,我們分别介紹卷積層和Pooling層的訓練算法。
卷積層的訓練
對于卷積層,我們先來看看上面的第二步,即如何将誤差項 δ \delta δ傳遞到上一層;然後再來看看第三步,即如何計算filter每個權值 w w w的梯度。
卷積層誤差項的傳遞
最簡單情況下誤差項的傳遞
我們先來考慮步長為1、輸入的深度為1、filter個數為1的最簡單的情況。
假設輸入的大小為 3 × 3 3\times3 3×3,filter大小為 2 × 2 2\times2 2×2,按步長為1卷積,我們将得到 2 × 2 2\times2 2×2的feature map。如下圖所示:
在上圖中,為了描述友善,我們為每個元素都進行了編号。用 δ i , j l − 1 \delta^{l-1}_{i,j} δi,jl−1表示第 l − 1 l-1 l−1層第 i i i行第 j j j列的誤差項;用 w m , n w_{m,n} wm,n表示filter第 m m m行第 n n n列權重,用 w b w_b wb表示filter的偏置項;用 a i , j l − 1 a^{l-1}_{i,j} ai,jl−1表示第 l − 1 l-1 l−1層第 i i i行第 j j j列神經元的輸出;用 n e t i , j l − 1 net^{l-1}_{i,j} neti,jl−1表示第 l − 1 l-1 l−1行神經元的權重輸入;用 δ i , j l \delta^l_{i,j} δi,jl表示第 l l l層第 i i i行第 j j j列的誤差項;用 f l − 1 f^{l-1} fl−1表示第 l − 1 l-1 l−1層的激活函數。它們之間的關系如下:
n e t l = c o n v ( W l , a l − 1 ) + w b a i , j l − 1 = f l − 1 ( n e t i , j l − 1 ) net^l=conv(W^l, a^{l-1})+w_b\\ a^{l-1}_{i,j}=f^{l-1}(net^{l-1}_{i,j}) netl=conv(Wl,al−1)+wbai,jl−1=fl−1(neti,jl−1)
上式中, n e t l net^l netl、 W l W^l Wl、 a l − 1 a^{l-1} al−1都是數組, W l W^l Wl是由 w m , n w_{m,n} wm,n組成的數組, c o n v conv conv表示卷積操作。
在這裡,我們假設第 l l l中的每個 δ l \delta^l δl值都已經算好,我們要做的是計算第 l − 1 l-1 l−1層每個神經元的誤差項 δ l − 1 \delta^{l-1} δl−1。
根據鍊式求導法則:
δ i , j l − 1 = ∂ E d ∂ n e t i , j l − 1 = ∂ E d ∂ a i , j l − 1 ∂ a i , j l − 1 ∂ n e t i , j l − 1 \delta^{l-1}_{i,j}=\frac{\partial{E_d}}{\partial{net^{l-1}_{i,j}}}=\frac{\partial{E_d}}{\partial{a^{l-1}_{i,j}}}\frac{\partial{a^{l-1}_{i,j}}}{\partial{net^{l-1}_{i,j}}} δi,jl−1=∂neti,jl−1∂Ed=∂ai,jl−1∂Ed∂neti,jl−1∂ai,jl−1
我們先求第一項 ∂ E d ∂ a i , j l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{i,j}}} ∂ai,jl−1∂Ed。我們先來看幾個特例,然後從中總結出一般性的規律。
例1,計算 ∂ E d ∂ a 1 , 1 l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{1,1}}} ∂a1,1l−1∂Ed, a 1 , 1 l − 1 a^{l-1}_{1,1} a1,1l−1僅與 n e t 1 , 1 l net^l_{1,1} net1,1l的計算有關:
n e t 1 , 1 j = w 1 , 1 a 1 , 1 l − 1 + w 1 , 2 a 1 , 2 l − 1 + w 2 , 1 a 2 , 1 l − 1 + w 2 , 2 a 2 , 2 l − 1 + w b net^j_{1,1}=w_{1,1}a^{l-1}_{1,1}+w_{1,2}a^{l-1}_{1,2}+w_{2,1}a^{l-1}_{2,1}+w_{2,2}a^{l-1}_{2,2}+w_b net1,1j=w1,1a1,1l−1+w1,2a1,2l−1+w2,1a2,1l−1+w2,2a2,2l−1+wb
是以:
∂ E d ∂ a 1 , 1 l − 1 = ∂ E d ∂ n e t 1 , 1 l ∂ n e t 1 , 1 l ∂ a 1 , 1 l − 1 = δ 1 , 1 l w 1 , 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{1,1}}}=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{a^{l-1}_{1,1}}}=\delta^l_{1,1}w_{1,1} ∂a1,1l−1∂Ed=∂net1,1l∂Ed∂a1,1l−1∂net1,1l=δ1,1lw1,1
例2,計算 ∂ E d ∂ a 1 , 2 l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{1,2}}} ∂a1,2l−1∂Ed, a 1 , 2 l − 1 a^{l-1}_{1,2} a1,2l−1與 n e t 1 , 1 l net^l_{1,1} net1,1l和 n e t 1 , 2 l net^l_{1,2} net1,2l的計算都有關:
n e t 1 , 1 j = w 1 , 1 a 1 , 1 l − 1 + w 1 , 2 a 1 , 2 l − 1 + w 2 , 1 a 2 , 1 l − 1 + w 2 , 2 a 2 , 2 l − 1 + w b n e t 1 , 2 j = w 1 , 1 a 1 , 2 l − 1 + w 1 , 2 a 1 , 3 l − 1 + w 2 , 1 a 2 , 2 l − 1 + w 2 , 2 a 2 , 3 l − 1 + w b net^j_{1,1}=w_{1,1}a^{l-1}_{1,1}+w_{1,2}a^{l-1}_{1,2}+w_{2,1}a^{l-1}_{2,1}+w_{2,2}a^{l-1}_{2,2}+w_b\\ net^j_{1,2}=w_{1,1}a^{l-1}_{1,2}+w_{1,2}a^{l-1}_{1,3}+w_{2,1}a^{l-1}_{2,2}+w_{2,2}a^{l-1}_{2,3}+w_b\\ net1,1j=w1,1a1,1l−1+w1,2a1,2l−1+w2,1a2,1l−1+w2,2a2,2l−1+wbnet1,2j=w1,1a1,2l−1+w1,2a1,3l−1+w2,1a2,2l−1+w2,2a2,3l−1+wb
是以:
∂ E d ∂ a 1 , 2 l − 1 = ∂ E d ∂ n e t 1 , 1 l ∂ n e t 1 , 1 l ∂ a 1 , 2 l − 1 + ∂ E d ∂ n e t 1 , 2 l ∂ n e t 1 , 2 l ∂ a 1 , 2 l − 1 = δ 1 , 1 l w 1 , 2 + δ 1 , 2 l w 1 , 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{1,2}}}=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{a^{l-1}_{1,2}}}+\frac{\partial{E_d}}{\partial{net^{l}_{1,2}}}\frac{\partial{net^{l}_{1,2}}}{\partial{a^{l-1}_{1,2}}}=\delta^l_{1,1}w_{1,2}+\delta^l_{1,2}w_{1,1} ∂a1,2l−1∂Ed=∂net1,1l∂Ed∂a1,2l−1∂net1,1l+∂net1,2l∂Ed∂a1,2l−1∂net1,2l=δ1,1lw1,2+δ1,2lw1,1
例3,計算 ∂ E d ∂ a 2 , 2 l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{2,2}}} ∂a2,2l−1∂Ed, a 2 , 2 l − 1 a^{l-1}_{2,2} a2,2l−1與 n e t 1 , 1 l net^l_{1,1} net1,1l, n e t 1 , 2 l net^l_{1,2} net1,2l, n e t 2 , 1 l net^l_{2,1} net2,1l和 n e t 2 , 2 l net^l_{2,2} net2,2l的計算都有關:
n e t 1 , 1 j = w 1 , 1 a 1 , 1 l − 1 + w 1 , 2 a 1 , 2 l − 1 + w 2 , 1 a 2 , 1 l − 1 + w 2 , 2 a 2 , 2 l − 1 + w b n e t 1 , 2 j = w 1 , 1 a 1 , 2 l − 1 + w 1 , 2 a 1 , 3 l − 1 + w 2 , 1 a 2 , 2 l − 1 + w 2 , 2 a 2 , 3 l − 1 + w b n e t 2 , 1 j = w 1 , 1 a 2 , 1 l − 1 + w 1 , 2 a 2 , 2 l − 1 + w 2 , 1 a 3 , 1 l − 1 + w 2 , 2 a 3 , 2 l − 1 + w b n e t 2 , 2 j = w 1 , 1 a 2 , 2 l − 1 + w 1 , 2 a 2 , 3 l − 1 + w 2 , 1 a 3 , 2 l − 1 + w 2 , 2 a 3 , 3 l − 1 + w b net^j_{1,1}=w_{1,1}a^{l-1}_{1,1}+w_{1,2}a^{l-1}_{1,2}+w_{2,1}a^{l-1}_{2,1}+w_{2,2}a^{l-1}_{2,2}+w_b\\ net^j_{1,2}=w_{1,1}a^{l-1}_{1,2}+w_{1,2}a^{l-1}_{1,3}+w_{2,1}a^{l-1}_{2,2}+w_{2,2}a^{l-1}_{2,3}+w_b\\ net^j_{2,1}=w_{1,1}a^{l-1}_{2,1}+w_{1,2}a^{l-1}_{2,2}+w_{2,1}a^{l-1}_{3,1}+w_{2,2}a^{l-1}_{3,2}+w_b\\ net^j_{2,2}=w_{1,1}a^{l-1}_{2,2}+w_{1,2}a^{l-1}_{2,3}+w_{2,1}a^{l-1}_{3,2}+w_{2,2}a^{l-1}_{3,3}+w_b net1,1j=w1,1a1,1l−1+w1,2a1,2l−1+w2,1a2,1l−1+w2,2a2,2l−1+wbnet1,2j=w1,1a1,2l−1+w1,2a1,3l−1+w2,1a2,2l−1+w2,2a2,3l−1+wbnet2,1j=w1,1a2,1l−1+w1,2a2,2l−1+w2,1a3,1l−1+w2,2a3,2l−1+wbnet2,2j=w1,1a2,2l−1+w1,2a2,3l−1+w2,1a3,2l−1+w2,2a3,3l−1+wb
是以:
∂ E d ∂ a 2 , 2 l − 1 = ∂ E d ∂ n e t 1 , 1 l ∂ n e t 1 , 1 l ∂ a 2 , 2 l − 1 + ∂ E d ∂ n e t 1 , 2 l ∂ n e t 1 , 2 l ∂ a 2 , 2 l − 1 + ∂ E d ∂ n e t 2 , 1 l ∂ n e t 2 , 1 l ∂ a 2 , 2 l − 1 + ∂ E d ∂ n e t 2 , 2 l ∂ n e t 2 , 2 l ∂ a 2 , 2 l − 1 = δ 1 , 1 l w 2 , 2 + δ 1 , 2 l w 2 , 1 + δ 2 , 1 l w 1 , 2 + δ 2 , 2 l w 1 , 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{2,2}}}=\frac{\partial{E_d}}{\partial{net^{l}_{1,1}}}\frac{\partial{net^{l}_{1,1}}}{\partial{a^{l-1}_{2,2}}}+\frac{\partial{E_d}}{\partial{net^{l}_{1,2}}}\frac{\partial{net^{l}_{1,2}}}{\partial{a^{l-1}_{2,2}}}+\frac{\partial{E_d}}{\partial{net^{l}_{2,1}}}\frac{\partial{net^{l}_{2,1}}}{\partial{a^{l-1}_{2,2}}}+\frac{\partial{E_d}}{\partial{net^{l}_{2,2}}}\frac{\partial{net^{l}_{2,2}}}{\partial{a^{l-1}_{2,2}}}=\delta^l_{1,1}w_{2,2}+\delta^l_{1,2}w_{2,1}+\delta^l_{2,1}w_{1,2}+\delta^l_{2,2}w_{1,1} ∂a2,2l−1∂Ed=∂net1,1l∂Ed∂a2,2l−1∂net1,1l+∂net1,2l∂Ed∂a2,2l−1∂net1,2l+∂net2,1l∂Ed∂a2,2l−1∂net2,1l+∂net2,2l∂Ed∂a2,2l−1∂net2,2l=δ1,1lw2,2+δ1,2lw2,1+δ2,1lw1,2+δ2,2lw1,1
從上面三個例子,我們發揮一下想象力,不難發現,計算 ∂ E d ∂ a l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}}} ∂al−1∂Ed,相當于把第 l l l層的sensitive map周圍補一圈0,在與180度翻轉後的filter進行cross-correlation,就能得到想要結果,如下圖所示:
因為卷積相當于将filter旋轉180度的cross-correlation,是以上圖的計算可以用卷積公式完美的表達: