本系列将由浅入深的介绍卷积神经网络的前向传播与后向传播,池化层的前向传播与后向传播,并分别介绍在不同步长与不同填充的情况下卷积层和池化层的前向传播与后向传播又有哪些不同。最后给出完整的Python实现代码。
完整目录如下:
一、CNN ⇒ \Rightarrow ⇒步长为1,无填充的卷积神经网络
二、CNN ⇒ \Rightarrow ⇒步长为1,有填充的卷积神经网络
三、CNN ⇒ \Rightarrow ⇒步长不为1,无填充的卷积神经网络
四、CNN ⇒ \Rightarrow ⇒步长不为1,有填充的卷积神经网络
CNN卷积神经网络的原理【附Python实现】
上一篇文章已经介绍了 无填充,步长不为1的卷积神经网络,本文将继续由浅入深的介绍有填充,步长不为1的卷积神经网络的前向传播与后向传播,有填充的池化层的前向传播与后向传播。
1. CNN的前向传播(有填充,步长strides不为1)
1.1 卷积层的前向传播
给定输入4x4的矩阵A,2x2的卷积核W,要使A和W做步长为2的卷积后的输出矩阵Z的大小和A一样,我们需要对A做填充,由 n H = ⌊ n H p r e v − f + 2 × p a d s t r i d e s ⌋ + 1 n_{H}=\lfloor{\frac{n_{Hprev}-f+2\times pad}{strides}}\rfloor+1 nH=⌊stridesnHprev−f+2×pad⌋+1我们可得需要填充的大小为 p a d = s t r i d e s × ( n H − 1 ) − n H p r e v + f 2 = 2 × ( 4 − 1 ) − 4 + 2 2 = 2 pad=\frac{strides\times(n_{H}-1)-n_{Hprev}+f}{2}=\frac{2\times (4-1)-4+2}{2}=2 pad=2strides×(nH−1)−nHprev+f=22×(4−1)−4+2=2,A被填充为8x8的A_paded,示意图如下。
1.2 池化层的前向传播
给定输入4x4的矩阵Ain,2x2的池化核,对Ain做步长为2的池化,要使池化前后大小不变,需要对Ain做填充,填充大小与卷积时计算相同, p a d = s t r i d e s × ( n H − 1 ) − n H p r e v + f 2 = 2 × ( 4 − 1 ) − 4 + 2 2 = 2 pad=\frac{strides\times(n_{H}-1)-n_{Hprev}+f}{2}=\frac{2\times (4-1)-4+2}{2}=2 pad=2strides×(nH−1)−nHprev+f=22×(4−1)−4+2=2,池化示意图如下。
2. CNN的反向传播(无填充,步长strides不为1)
对于上述前向传播,我们将损失定义为loss,我们的目标是去minimize loss,记loss对某个参数x的偏导数为dx,先来看看池化层的反向传播。
2.1 池化层的反向传播
loss对池化层输入 A 1 A^{1} A1的偏导数为 d A i n 1 dA^{1}_{in} dAin1,池化层的反向传播的数学表达式可写为 d A i n 1 = d A o u t 1 × d A o u t 1 d A i n 1 dA^{1}_{in}=dA^{1}_{out}\times \frac{dA^{1}_{out}}{dA^{1}_{in}} dAin1=dAout1×dAin1dAout1,其中最关键的一步是搞清楚 d A o u t 1 d A i n 1 \frac{dA^{1}_{out}}{dA^{1}_{in}} dAin1dAout1怎么求。我们由之前的介绍可知,池化层分为最大池化和均值池化,我们来分别探讨这两种情况。
2.1.1 最大池化的反向传播
假定给定2x2的池化核,设定步长为2,部分池化核区域内的最大值由彩色方框框出。则对填充后的Ain进行最大池化后的示意图如下。
则我们可知
A 11 = 0 A11=0 A11=0, A 12 = 0 A12=0 A12=0, A 13 = 0 A13=0 A13=0, A 14 = 0 A14=0 A14=0
A 12 = 0 A12=0 A12=0
A 22 = 0 × a 11 + 1 × a 12 + 0 × a 21 + 0 × a 22 A22=0\times a11+1\times a12+0\times a21+0\times a22 A22=0×a11+1×a12+0×a21+0×a22
A 23 = 0 × a 13 + 0 × a 14 + 0 × a 23 + 1 × a 24 A23=0\times a13+0\times a14+0\times a23+1\times a24 A23=0×a13+0×a14+0×a23+1×a24
A 24 = 0 A24=0 A24=0
A 31 = 0 A31=0 A31=0
A 32 = 0 × a 31 + 0 × a 32 + 0 × a 41 + 1 × a 42 A32=0\times a31+0\times a32+0\times a41+1\times a42 A32=0×a31+0×a32+0×a41+1×a42
A 33 = 1 × a 33 + 0 × a 34 + 0 × a 43 + 0 × a 44 A33=1\times a33+0\times a34+0\times a43+0\times a44 A33=1×a33+0×a34+0×a43+0×a44
A 34 = 0 A34=0 A34=0
A 41 = 0 A41=0 A41=0, A 42 = 0 A42=0 A42=0, A 43 = 0 A43=0 A43=0, A 44 =