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_1-卷积层的反向传播-单通道、无padding、步长1
依赖知识
a) 了解神经网络的基础知识,熟悉卷积网络
b) 熟悉导数的链式法则及常见函数的导数
c) 熟悉常见的优化方法,梯度下降,随机梯度下降等
d) 熟悉矩阵和向量的乘加运算
e) 熟悉全连接层、损失函数的反向传播
卷积定义
对于输入图像 I I , 使用维度为 的滤波器 K K ,卷积的定义如下:
注意:这里的卷积跟数学中定义的卷积不是完全一致的,数学中这叫协相关; 卷积和协相关的区别详见deep learning 第九章282页。神经网络中一般都把公式(1)的定义当做卷积。
CNN卷积网络
卷积网络包含一系列的卷积层,每层由输入特征图
I
I
,一堆滤波器 和偏置
b
b
. 假设输入的高度、宽度、通道数分别为; 则
I∈RH×W×C
I
∈
R
H
×
W
×
C
, 输出
D
D
个通道的卷积层,则有卷积核 ,偏置
b∈RD
b
∈
R
D
,每个输出通道一个偏置。则其中一个输出通道的可以如下表示:
有心读者肯定会疑惑公式(2),没有体现padding和卷积核的步长。由于卷积相对复杂,没有办法一次性说明的非常清楚,计划分几次来逐步说明;本文接下来将推导最简单的卷积反向传播公式。假定输入输出通道都为1,即 C=D=1 C = D = 1 , 且卷积核的padding=0,步长为1。
约定说明
a) l l 代表网络的第 层, zl z l 代表第 l l 层卷积, 代表第 l l 层卷积的 位置的值; zl z 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 层的卷积核权重和偏置; 卷积核的维度为 。
c) 记损失函数L关于第 l l 层卷积的输出 的偏导为 δl=∂L∂zl (3) δ l = ∂ L ∂ z l ( 3 )
根据以上约定第
l
l
层卷积输出为:
其中: Hl=Hl−1−kl−11+1; W^l=W^l−1−kl−12+1 H l = H l − 1 − k 1 l − 1 + 1 ; W ^ l = W ^ l − 1 − k 2 l − 1 + 1
误差反向传播
权重梯度
a) 首先来看损失函数
L
L
关于第层权重
Wl−1
W
l
−
1
和偏置
bl−1
b
l
−
1
的梯度
对比公式(5)和公式(4),可以发现,损失函数 L L 关于第层权重 Wl−1 W l − 1 的梯度就是以 δl δ l 为卷积核在 zl−1 z l − 1 上做卷积的结果(这里没有偏置项)。多么简介对称呀!!!。
b) 同理可得
l-1层梯度
然后再来看看损失函数关于第
l−1
l
−
1
层输出的梯度
约束条件: i′−i∈[0,kl−11−1],j′−j∈[0,kl−12−1] i ′ − i ∈ [ 0 , k 1 l − 1 − 1 ] , j ′ − j ∈ [ 0 , k 2 l − 1 − 1 ]
变换一下就是: i∈[i′+1−kl−11,i′],j∈[j′+1−kl−12,j′](9) (9) i ∈ [ i ′ + 1 − k 1 l − 1 , i ′ ] , j ∈ [ j ′ + 1 − k 2 l − 1 , j ′ ]
同时
i,j
i
,
j
需要满足公式(4)的约束条件:
因此有
下面来看一个例子,对于l-1层 5×5 5 × 5 的卷积层,卷积核 3×3 3 × 3 , 则输出的l层卷积大小为5-3-1=3,也就是 3×3 3 × 3 , 此时有:
根据公式(7)及其约束条件有:
等价于以下的卷积
即以 Wl−1 W l − 1 翻转 180∘ 180 ∘ 的矩阵为卷积核在 δl δ l 加上padding=2的矩阵上做卷积的结果。
a) 设 rot180∘Wl−1 r o t 180 ∘ W l − 1 为以 Wl−1 W l − 1 翻转 180∘ 180 ∘ 的矩阵后的矩阵
b) 设 pδl p δ l 为 δl δ l 加上padding高宽为卷积核高宽减1即 (kl−11−1,kl−12−1) ( k 1 l − 1 − 1 , k 2 l − 1 − 1 ) 后的梯度矩阵,可知其高度为 Hl+2kl−11−2=Hl−1+kl−11−1 H l + 2 k 1 l − 1 − 2 = H l − 1 + k 1 l − 1 − 1 ;相应的宽度为 W^l−1+kl−12−1 W ^ l − 1 + k 2 l − 1 − 1
c) 卷积核 rot180∘Wl−1 r o t 180 ∘ W l − 1 的大小为 (kl−11,kl−11) ( k 1 l − 1 , k 1 l − 1 ) ,在上做完卷积后的长宽刚好与 δl−1 δ l − 1 的高度和宽度一样,即 (Hl−1,W^l−1) ( H l − 1 , W ^ l − 1 ) 。
d)
pδl
p
δ
l
和
δl
δ
l
的关系如下:
接下来将证明这个卷积就是 δl−1 δ l − 1
根据公式(4) 卷积后的
(i,j)
(
i
,
j
)
位置的值为:
可以看出公式(15)与公式(7)完全一致。
结论
a) 卷积前向计算公式如下:
b) 损失函数 L L 关于第层权重 Wl−1 W l − 1 的梯度,是以损失函数 L L 关于第层梯度 δl δ l 为卷积核在 zl−1 z l − 1 上做卷积的结果
c) 损失函数 L L 关于第层偏置 bl−1 b l − 1 的梯度,是 δl δ l 元素之和
d) 以损失函数
L
L
关于第层梯度
δl−1
δ
l
−
1
, 是以第
l−1
l
−
1
层权重的翻转
rot180∘Wl−1
r
o
t
180
∘
W
l
−
1
为卷积核在
δl
δ
l
加上padding高宽 为
(kl−11−1,kl−12−1)
(
k
1
l
−
1
−
1
,
k
2
l
−
1
−
1
)
后的梯度矩阵
pδl
p
δ
l
上卷积