0_2_3-卷积层的反向传播-多通道、无padding、步长不为1

numpy实现神经网络系列

工程地址:https://github.com/yizt/numpy_neuron_network

基础知识

0_1-全连接层、损失函数的反向传播

0_2_1-卷积层的反向传播-单通道、无padding、步长1

0_2_2-卷积层的反向传播-多通道、无padding、步长1

0_2_3-卷积层的反向传播-多通道、无padding、步长不为1

0_2_4-卷积层的反向传播-多通道、有padding、步长不为1

0_2_5-池化层的反向传播-MaxPooling、AveragePooling、GlobalAveragePooling、GlobalMaxPooling

0_3-**函数的反向传播-ReLU、LeakyReLU、PReLU、ELU、SELU

0_4-优化方法-SGD、AdaGrad、RMSProp、Adadelta、Adam

DNN练习

1_1_1-全连接神经网络做线性回归

1_1_2-全连接神经网络做mnist手写数字识别

CNN练习

2_1-numpy卷积层实现

2_2-numpy池化层实现

2_3-numpy-cnn-mnist手写数字识别

本文目录

本文下载地址:0_2_3-卷积层的反向传播-多通道、无padding、步长不为1

依赖知识

a) 熟悉全连接层、损失函数的反向传播

b) 熟悉卷积层的反向传播-单通道、无padding、步长1

c) 熟悉卷积层的反向传播-多通道、无padding、步长1

d) 熟悉以上三点的依赖知识

约定说明

a) l 代表网络的第l 层, zl 代表第l 层卷积,zd,i,jl 代表第l 层卷积第d 通道(i,j) 位置的值; zl 的通道数为Cl, 高度和宽度分别为Hl,W^l ()

b) Wl1,bl1 代表连接第l1 层和第l 层的卷积核权重和偏置; 卷积核的维度为(k1l1,k2l1) ; 卷积核的步长为(s1l1,s2l1)

c) 记损失函数L关于第l 层卷积的输出zl 的偏导为δl=Lzl   (3)

前向传播

​ 根据以上约定,卷积核权重Wl1Rk1l1×k2l1×Cl1×Cl ,偏置bl1RCl ,每个输出通道一个偏置。 则有第l 层卷积层,第d个通道输出为:

(4)zd,i,jl=c=1Cl1m=0k1l11n=0k2l11Wm,n,c,dl1zc,is1l1+m,js2l1+nl1+bdl1i[0,Hl1],j[0,W^l1]

​ 其中:Hl=(Hl1k1l1)/s1l1+1;     W^l=(W^l1k2l1)/s2l1+1 ;

反向传播

权重梯度

a) 首先来看损失函数L关于第l1层权重Wl1和偏置bl1的梯度:

(1)LWm,n,c,dl1=ijLzd,i,jlzd,i,jlWm,n,c,dl1//ldWm,n,c,dl1(2)=ijδd,i,jl(c=1Cl1m=0k1l11n=0k2l11Wm,n,c,dl1zc,is1l1+m,js2l1+nl1+bdl1)Wm,n,c,dl1(5)=ijδd,i,jlzc,is1l1+m,js2l1+nl1

​ 对比公式(5)和单通道中公式(4),可以发现,损失函数L关于第l1层权重W:,:c,dl1梯度就是以δlpadding (后面会说明它的含义) 为卷积核在zcl1上做卷积的结果(这里没有偏置项),单通道对单通道的卷积。

b) 损失函数L关于第l1层偏置bl1的梯度同

(6)Lbdl1=ijδd,i,jl

l-1层梯度

​ 直接从公式推导损失函数关于第l1层输出的偏导比较难,我们参考转置卷积论文A guide to convolution arithmetic for deep learning 知识,我们以另外一种方式证明; 对于如下的图,上一层为输入的卷积层(5×5) ,用(3×3) 的卷积核以步长为2,做卷积得到下一层卷积大小为2×2 (图中蓝色的点)。如果我们将输出卷积的每行和每列之间填充步长减一的行列,行列的元素全为0。记卷积层zl 使用这种零填充后的卷积层为 zlpadding 。那么前向过程其实就相当于卷积核,在输入卷积上以不为1的步长卷积后的结果就是zlpadding

0_2_3-卷积层的反向传播-多通道、无padding、步长不为1

​ 那么反向过程也是一样,相当于翻转后的卷积在相同零填充的δl 上左卷积的结果,设δlpaddingδl 的行列分别填充(s1l11,s2l11) 行列零元素后的梯度矩阵。则根据多通道 中的公式(8) 有

(8)δc,i,jl1=d=1Clm=0k1l11n=0k2l11rot180Wm,n,c,dl1pδd,i+m,j+nlpadding

​ 其中pδd,i,jlpaddingδl 在行列直接插入(s1l11,s2l11) 行列零元素后(即δlpadding),再在元素外围填充高度和宽度为 (k1l11,k2l11) 的零元素后的梯度矩阵。

参考

a) A guide to convolution arithmetic for deep learning