numpy实现神经网络系列
工程地址:https://github.com/yizt/numpy_neuron_network
基础知识
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练习
CNN练习
本文目录
本文下载地址:0_2_3-卷积层的反向传播-多通道、无padding、步长不为1
依赖知识
a) 熟悉全连接层、损失函数的反向传播
b) 熟悉卷积层的反向传播-单通道、无padding、步长1
c) 熟悉卷积层的反向传播-多通道、无padding、步长1
d) 熟悉以上三点的依赖知识
约定说明
a) l l 代表网络的第 层, zl z l 代表第 l l 层卷积, 代表第 l l 层卷积第 通道 (i,j) ( i , j ) 位置的值; zl z l 的通道数为 Cl C l , 高度和宽度分别为 Hl,W^l H l , W ^ l ( 避免与权重相同 避 免 与 权 重 相 同 )
b) Wl−1,bl−1 W l − 1 , b l − 1 代表连接第 l−1 l − 1 层和第 l l 层的卷积核权重和偏置; 卷积核的维度为 ; 卷积核的步长为 (sl−11,sl−12) ( s 1 l − 1 , s 2 l − 1 ) 。
c) 记损失函数L关于第 l l 层卷积的输出 的偏导为 δl=∂L∂zl (3) δ l = ∂ L ∂ z l ( 3 )
前向传播
根据以上约定,卷积核权重
Wl−1∈Rkl−11×kl−12×Cl−1×Cl
W
l
−
1
∈
R
k
1
l
−
1
×
k
2
l
−
1
×
C
l
−
1
×
C
l
,偏置
bl−1∈RCl
b
l
−
1
∈
R
C
l
,每个输出通道一个偏置。 则有第
l
l
层卷积层,第个通道输出为:
其中: Hl=(Hl−1−kl−11)/sl−11+1; W^l=(W^l−1−kl−12)/sl−12+1 H l = ( H l − 1 − k 1 l − 1 ) / s 1 l − 1 + 1 ; W ^ l = ( W ^ l − 1 − k 2 l − 1 ) / s 2 l − 1 + 1 ;
反向传播
权重梯度
a) 首先来看损失函数
L
L
关于第层权重
Wl−1
W
l
−
1
和偏置
bl−1
b
l
−
1
的梯度:
对比公式(5)和单通道中公式(4),可以发现,损失函数 L L 关于第层权重 Wl−1:,:c,d W : , : c , d l − 1 梯度就是以 δlpadding δ l p a d d i n g (后面会说明它的含义) 为卷积核在 zl−1c z c l − 1 上做卷积的结果(这里没有偏置项),单通道对单通道的卷积。
b) 损失函数
L
L
关于第层偏置
bl−1
b
l
−
1
的梯度同
l-1层梯度
直接从公式推导损失函数关于第 l−1 l − 1 层输出的偏导比较难,我们参考转置卷积论文A guide to convolution arithmetic for deep learning 知识,我们以另外一种方式证明; 对于如下的图,上一层为输入的卷积层( 5×5 5 × 5 ) ,用( 3×3 3 × 3 ) 的卷积核以步长为2,做卷积得到下一层卷积大小为 2×2 2 × 2 (图中蓝色的点)。如果我们将输出卷积的每行和每列之间填充步长减一的行列,行列的元素全为0。记卷积层 zl z l 使用这种零填充后的卷积层为 zlpadding z l p a d d i n g 。那么前向过程其实就相当于卷积核,在输入卷积上以不为1的步长卷积后的结果就是 zlpadding z l p a d d i n g 。
那么反向过程也是一样,相当于翻转后的卷积在相同零填充的
δl
δ
l
上左卷积的结果,设
δlpadding
δ
l
p
a
d
d
i
n
g
为
δl
δ
l
的行列分别填充
(sl−11−1,sl−12−1)
(
s
1
l
−
1
−
1
,
s
2
l
−
1
−
1
)
行列零元素后的梯度矩阵。则根据多通道 中的公式(8) 有
其中 pδlpaddingd,i,j p δ d , i , j l p a d d i n g 是 δl δ l 在行列直接插入 (sl−11−1,sl−12−1) ( s 1 l − 1 − 1 , s 2 l − 1 − 1 ) 行列零元素后(即 δlpadding δ l p a d d i n g ),再在元素外围填充高度和宽度为 (kl−11−1,kl−12−1) ( k 1 l − 1 − 1 , k 2 l − 1 − 1 ) 的零元素后的梯度矩阵。