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_1-卷积层的反向传播-单通道、无padding、步长1
依赖知识
a) 了解神经网络的基础知识,熟悉卷积网络
b) 熟悉导数的链式法则及常见函数的导数
c) 熟悉常见的优化方法,梯度下降,随机梯度下降等
d) 熟悉矩阵和向量的乘加运算
e) 熟悉全连接层、损失函数的反向传播
卷积定义
对于输入图像
I
, 使用维度为
k1×k2
的滤波器
K
,卷积的定义如下:
(I∗K)ij=∑m=0k1−1∑n=0k2−1I(i+m,j+n)K(m,n)(1)
注意:这里的卷积跟数学中定义的卷积不是完全一致的,数学中这叫协相关; 卷积和协相关的区别详见deep learning 第九章282页。神经网络中一般都把公式(1)的定义当做卷积。
CNN卷积网络
卷积网络包含一系列的卷积层,每层由输入特征图
I
,一堆滤波器
K
和偏置
b
. 假设输入的高度、宽度、通道数分别为
H,W,C
; 则
I∈RH×W×C
, 输出
D
个通道的卷积层,则有卷积核
K∈Rk1×k2×C×D
,偏置
b∈RD
,每个输出通道一个偏置。则其中一个输出通道的可以如下表示:
(I∗K)ij=∑m=0k1−1∑n=0k2−1∑c=1CKm,n,c⋅Ii+m,j+n,c+b(2)
有心读者肯定会疑惑公式(2),没有体现padding和卷积核的步长。由于卷积相对复杂,没有办法一次性说明的非常清楚,计划分几次来逐步说明;本文接下来将推导最简单的卷积反向传播公式。假定输入输出通道都为1,即
C=D=1
, 且卷积核的padding=0,步长为1。
约定说明
a)
l
代表网络的第
l
层,
zl
代表第
l
层卷积,
zli,j
代表第
l
层卷积的
(i,j)
位置的值;
zl
的高度和宽度分别为
Hl,W^l
(
避免与权重相同
)
b)
Wl−1,bl−1
代表连接第
l−1
层和第
l
层的卷积核权重和偏置; 卷积核的维度为
(kl−11,kl−12)
。
c) 记损失函数L关于第
l
层卷积的输出
zl
的偏导为
δl=∂L∂zl (3)
根据以上约定第
l
层卷积输出为:
zli,j=∑m=0kl−11−1∑n=0kl−12−1Wl−1m,nzl−1i+m,j+n+bl−1i∈[0,Hl−1],j∈[0,W^l−1](4)
其中:
Hl=Hl−1−kl−11+1; W^l=W^l−1−kl−12+1
误差反向传播
权重梯度
a) 首先来看损失函数
L
关于第
l−1
层权重
Wl−1
和偏置
bl−1
的梯度
∂L∂Wl−1m,n=∑i∑j∂L∂zli,j∗∂zli,j∂Wl−1m,n=∑i∑jδli,j∗∂(∑kl−11m=0∑kl−12n=0Wl−1m,nzl−1i+m,j+n+bl−1)∂Wl−1m,n=∑i∑jδli,j∗zl−1i+m,j+n//l层的每个神经元都有梯度传给权重Wl−1m,n(1)(2)(5)
对比公式(5)和公式(4),可以发现,损失函数
L
关于第
l−1
层权重
Wl−1
的梯度就是以
δl
为卷积核在
zl−1
上做卷积的结果(这里没有偏置项)。多么简介对称呀!!!。
b) 同理可得
∂L∂bl−1=∑i∑jδli,j(6)
l-1层梯度
然后再来看看损失函数关于第
l−1
层输出的梯度
δl−1i′,j′=∂L∂zl−1i′,j′=∑i∑j∂L∂zli,j∗∂zli,j∂zl−1i′,j′=∑i∑jδli,j∗∂(∑kl−11m=0∑kl−12n=0Wl−1m,nzl−1i+m,j+n+bl−1)∂zl−1i′,j′=∑i∑jδli,jWl−1m,n=∑m∑nδli′−m,j′−nWl−1m,n (7)=∑i∑jδli,jWl−1i′−i,j′−j (8)//当i=i′−m,j=j′−n时有梯度Wl−1m,n//此时m=i′−i,n=j′−j//此时i=i′−m∈[0,Hl−1],j=j′−n∈[0,W^l−1]//需要满足i′−i∈[0,kl−11−1],j′−j∈[0,kl−12−1](3)(4)(5)(6)(7)
约束条件:
i′−i∈[0,kl−11−1],j′−j∈[0,kl−12−1]
变换一下就是:
i∈[i′+1−kl−11,i′],j∈[j′+1−kl−12,j′](9)
同时
i,j
需要满足公式(4)的约束条件:
i∈[0,Hl−1],j∈[0,W^l−1](10)
因此有
{i∈[max(0,i′+1−kl−11),min(Hl−1,i′)]j∈[max(0,j′+1−kl−12),min(W^l−1,j′)](11)
下面来看一个例子,对于l-1层
5×5
的卷积层,卷积核
3×3
, 则输出的l层卷积大小为5-3-1=3,也就是
3×3
, 此时有:
{i∈[max(0,i′−2),min(2,i′)]j∈[max(0,j′−2,min(2,j′)]
根据公式(7)及其约束条件有:
δl−10,0=δl0,0Wl−10,0δl−10,1=δl0,1Wl−10,0+δl0,0Wl−10,1δl−10,2=δl0,2Wl−10,0+δl0,1Wl−10,1+δl0,0Wl−10,2δl−11,0=δl1,0Wl−10,0+δl0,0Wl−11,0δl−11,1=δl1,1Wl−10,0+δl0,1Wl−11,0+δl1,0Wl−10,1+δl0,0Wl−11,1δl−11,2=∑i∑jδli,jWl−1i′−i,j′−j......δl−12,2=∑i∑jδli,jWl−1i′−i,j′−ji∈[0,0],j∈[0,0]i∈[0,0],j∈[0,1]i∈[0,0],j∈[0,2]i∈[0,1],j∈[0,0]i∈[0,1],j∈[0,1]i∈[0,1],j∈[0,2]i∈[0,2],j∈[0,2](8)(9)(10)(11)(12)(13)(14)(15)
等价于以下的卷积
δl−1=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,δl0,0,δl1,0,δl2,0,0,0,0,0,δl0,1,δl1,1,δl2,1,0,0,0,0,δl0,2,δl1,2,δl2,2,0,0,0,0,0,0,0,0,0,0000000(16)(17)(18)(19)(20)(21)(22)⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟∗⎛⎝⎜⎜⎜Wl−12,2,Wl−11,2,Wl−10,2,Wl−12,1,Wl−111,Wl−101,Wl−12,0Wl−11,0Wl−10,0⎞⎠⎟⎟⎟
即以
Wl−1
翻转
180∘
的矩阵为卷积核在
δl
加上padding=2的矩阵上做卷积的结果。
a) 设
rot180∘Wl−1
为以
Wl−1
翻转
180∘
的矩阵后的矩阵
b) 设
pδl
为
δl
加上padding高宽为卷积核高宽减1即
(kl−11−1,kl−12−1)
后的梯度矩阵,可知其高度为
Hl+2kl−11−2=Hl−1+kl−11−1
;相应的宽度为
W^l−1+kl−12−1
c) 卷积核
rot180∘Wl−1
的大小为
(kl−11,kl−11)
,在上做完卷积后的长宽刚好与
δl−1
的高度和宽度一样,即
(Hl−1,W^l−1)
。
d)
pδl
和
δl
的关系如下:
pδli,j={δli−kl−11+1,j−kl−12+10i∈[kl−11−1,Hl+kl−11−2]且j∈[kl−12−1,W^l+kl−12−2]i,j其它情况(12)
接下来将证明这个卷积就是
δl−1
根据公式(4) 卷积后的
(i,j)
位置的值为:
∑m=0kl−11−1∑n=0kl−12−1rot180∘Wl−1m,npδli+m,j+n=∑m=0kl−11−1∑n=0kl−12−1Wkl−11−1−m,kl−12−1−n pδli+m,j+n //将翻转180∘改回来=∑m′=0kl−11−1∑n′=0kl−12−1Wm′,n′ pδli+kl−11−1−m′,j+kl−12−1−n′ //m′+m=kl−11−1,n′+n=kl−12−1=∑m=0kl−11−1∑n=0kl−12−1Wm,n pδli+kl−11−1−m,j+kl−12−1−n //将下标改回来=∑m=0kl−11−1∑n=0kl−12−1Wm,n {δli−m,j−n0//i−m∈[0,Hl−1]且j−n∈[0,W^l−1]//i−m∉[0,Hl−1]或j−n∉[0,W^l−1](23)(24)(25)(26)(15)
可以看出公式(15)与公式(7)完全一致。
结论
a) 卷积前向计算公式如下:
zli,j=∑m=0kl−11−1∑n=0kl−12−1Wl−1m,nzl−1i+m,j+n+bl−1i∈[0,Hl−1],j∈[0,W^l−1](4)
b) 损失函数
L
关于第
l−1
层权重
Wl−1
的梯度,是以损失函数
L
关于第
l
层梯度
δl
为卷积核在
zl−1
上做卷积的结果
∂L∂Wl−1m,n=∑i∑jδli,j∗zl−1i+m,j+n(5)
c) 损失函数
L
关于第
l−1
层偏置
bl−1
的梯度,是
δl
元素之和
∂L∂bl−1=∑i∑jδli,j(6)
d) 以损失函数
L
关于第
l−1
层梯度
δl−1
, 是以第
l−1
层权重的翻转
rot180∘Wl−1
为卷积核在
δl
加上padding高宽 为
(kl−11−1,kl−12−1)
后的梯度矩阵
pδl
上卷积
δl−1=∑m=0kl−11−1∑n=0kl−12−1rot180∘Wl−1m,npδli+m,j+n(16)
参考
- backpropagation-in-convolutional-neural-networks
- 矩阵乘法