深度学习 CNN 数学推导

什么是卷积神经网络

首先,我们先获取一个感性认识,下图是一个卷积神经网络的示意图:
这里写图片描述

网络架构

如图所示,一个卷积神经网络由若干卷积层、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=02n=02wm,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=02n=02wm,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=02n=02wm,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=(W1F+2P)/S+1(2)H2=(H1F+2P)/S+1(3)
在上面两个公式中, W 2 W_2 W2是卷积后Feature Map的宽度; W 1 W_1 W1是卷积前图像的宽度; F F F是filter的宽度; P P PZero 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=0D1m=0F1n=0F1wd,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=0ma10na1Am,nBsm,tn
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} 0s<ma+mb1,0t<na+nb1
我们可以把上式写成
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=0D1Xd×Wd+wb)(6)
其中, A A A是卷积层输出的feature map。同(式4)相比,(式6)就简单多了。然而,这种简洁写法只适合步长为1的情况。

Pooling层输出值的计算

Pooling层主要的作用是下采样,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,最常用的是Max PoolingMax 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=netjEd
  • 计算每个神经元连接权重 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 wjiEd=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,jl1表示第 l − 1 l-1 l1层第 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,jl1表示第 l − 1 l-1 l1层第 i i i行第 j j j列神经元的输出;用 n e t i , j l − 1 net^{l-1}_{i,j} neti,jl1表示第 l − 1 l-1 l1行神经元的加权输入;用 δ i , j l \delta^l_{i,j} δi,jl表示第 l l l层第 i i i行第 j j j列的误差项;用 f l − 1 f^{l-1} fl1表示第 l − 1 l-1 l1层的激活函数。它们之间的关系如下:
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,al1)+wbai,jl1=fl1(neti,jl1)
上式中, n e t l net^l netl W l W^l Wl a l − 1 a^{l-1} al1都是数组, 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 l1层每个神经元的误差项 δ l − 1 \delta^{l-1} δl1

根据链式求导法则:
δ 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,jl1=neti,jl1Ed=ai,jl1Edneti,jl1ai,jl1
我们先求第一项 ∂ E d ∂ a i , j l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{i,j}}} ai,jl1Ed。我们先来看几个特例,然后从中总结出一般性的规律。

例1,计算 ∂ E d ∂ a 1 , 1 l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{1,1}}} a1,1l1Ed a 1 , 1 l − 1 a^{l-1}_{1,1} a1,1l1仅与 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,1l1+w1,2a1,2l1+w2,1a2,1l1+w2,2a2,2l1+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,1l1Ed=net1,1lEda1,1l1net1,1l=δ1,1lw1,1
例2,计算 ∂ E d ∂ a 1 , 2 l − 1 \frac{\partial{E_d}}{\partial{a^{l-1}_{1,2}}} a1,2l1Ed a 1 , 2 l − 1 a^{l-1}_{1,2} a1,2l1 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,1l1+w1,2a1,2l1+w2,1a2,1l1+w2,2a2,2l1+wbnet1,2j=w1,1a1,2l1+w1,2a1,3l1+w2,1a2,2l1+w2,2a2,3l1+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,2l1Ed=net1,1lEda1,2l1net1,1l+net1,2lEda1,2l1net1,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,2l1Ed a 2 , 2 l − 1 a^{l-1}_{2,2} a2,2l1 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,1l1+w1,2a1,2l1+w2,1a2,1l1+w2,2a2,2l1+wbnet1,2j=w1,1a1,2l1+w1,2a1,3l1+w2,1a2,2l1+w2,2a2,3l1+wbnet2,1j=w1,1a2,1l1+w1,2a2,2l1+w2,1a3,1l1+w2,2a3,2l1+wbnet2,2j=w1,1a2,2l1+w1,2a2,3l1+w2,1a3,2l1+w2,2a3,3l1+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,2l1Ed=net1,1lEda2,2l1net1,1l+net1,2lEda2,2l1net1,2l+net2,1lEda2,2l1net2,1l+net2,2lEda2,2l1net2,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}}} al1Ed,相当于把第 l l l层的sensitive map周围补一圈0,在与180度翻转后的filter进行cross-correlation,就能得到想要结果,如下图所示:
这里写图片描述

因为卷积相当于将filter旋转180度的cross-correlation,因此上图的计算可以用卷积公式完美的表达:

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值