本系列将由浅入深的介绍卷积神经网络的前向传播与后向传播,池化层的前向传播与后向传播,并分别介绍在不同步长与不同填充的情况下卷积层和池化层的前向传播与后向传播又有哪些不同。最后给出完整的Python实现代码。
完整目录如下:
一、CNN ⇒ \Rightarrow ⇒步长为1,无填充的卷积神经网络
二、CNN ⇒ \Rightarrow ⇒步长为1,有填充的卷积神经网络
三、CNN ⇒ \Rightarrow ⇒步长不为1,无填充的卷积神经网络
四、CNN ⇒ \Rightarrow ⇒步长不为1,有填充的卷积神经网络
CNN卷积神经网络的原理【附Python实现】
上一篇文章已经介绍了无填充,步长为1的卷积神经网络,本文将继续由浅入深的介绍有填充,步长为1的卷积神经网络的前向传播与后向传播,有填充的池化层的前向传播与后向传播。
1.CNN的前向传播(有填充,步长strides=1)
1.1 何为填充
在上一节无填充,步长为1的卷积神经网络中我们介绍了卷积和池化的原理,这里不再赘述,让我们看看什么是填充。首先回顾一下上一节介绍的卷积层的正向传播。
可以看到输入5x5的矩阵A,输出的是3x3的矩阵Z,因为步长为1,且没有填充,所以导致Z的大小比A小,有些时候我们并不想让输出的维度减小或者是减小太多(比如深层次神经网络里,如果一直减小下去到最后维度会非常非常小),那怎么办呢,这时候我们就可以使用填充(padding)。
填充,顾名思义,就是在输入矩阵A的外面填充1层或多层,这个由自己决定。卷积后的维度由 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计算,其中 n H p r e v n_{Hprev} nHprev为卷积前输入图像的高度,f为卷积核的大小,strides为卷积的步长,pad为填充值, n H n_{H} nH为卷积后输出图像的高度,要使卷积前后输入输出大小不变,我们需要设定填充值为 p a d = s t r i d e s × ( n H − 1 ) − n H p r e v + f 2 pad=\frac{strides\times(n_{H}-1)-n_{Hprev}+f}{2} pad=2strides×(nH−1)−nHprev+f.
接下来我们看看有填充的卷积层和池化层的正向传播。
1.2 有填充的卷积层
对于输入3x3的矩阵A,给定3x3的卷积核,要想使输出的矩阵Z的大小和A相同,我们对A做填充,填充的大小为 p a d = 1 × ( 3 − 1 ) − 3 + 3 2 = 1 pad=\frac{1\times(3-1)-3+3}{2}=1 pad=21×(3−1)−3+3=1,所以我们对A上下左右分别作1行(列)的填充。卷积示意图如下(本文中默认卷积步长都为1)。
1.3 有填充的池化层
对于输入4x4的矩阵 A i n A_{in} Ain,给定2x2的池化核,步长为2,要想使输出矩阵 A o u t A_{out} Aout的大小和 A i n A_{in} Ain相同,我们需要对 A i n A_{in} Ain做填充,填充的大小为 p a d = 2 × ( 4 − 1 ) − 4 + 2 2 = 2 pad=\frac{2\times(4-1)-4+2}{2}=2 pad=22×(4−1)−4+2=2,所以我们需要对 A i n A_{in} Ain上下左右分别做两行(列)填充。池化示意图如下。
2.CNN的反向传播(有填充,步长strides=1)
2.1 池化层的反向传播
对于池化层的反向传播,我们依然是分为最大池化和均值池化两种情况来分别讲述。首先看看最大池化的反向传播。
2.1.1 最大池化的反向传播
对于有填充,步长为2的最大池化,我们假设下图彩色方框框出的值为一个池化区域内最大的值。
我们可得
A11 = 0 , A12 = 0 , A13 = 0 , A14 = 0
A21 = 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 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
A34 = 0
A41 = 0 , A42 = 0 , A43 = 0 , A44 = 0
有填充的最大池化反向传播见下图。
即 d A i n 1 = d e l e t e