卷积神经网络中的反向传播算法学习
在常规神经网络的基础上,CNN的正向传播原理比较容易理解,而反向传播算法的学习比较难以掌握,根据网上的一些教学,以批量梯度下降法为例来描述反向传播算法。对算法的主要公式和解释整理如下:
输入:m个图片样本.
CNN模型的层数L和所有隐藏层的类型,对于卷积层,要定义卷积核的大小K,卷积核子矩阵的维度F,填充大小P,步幅S。对于池化层,要定义池化区域大小k和池化标准(MAX或Average),对于全连接层,要定义全连接层的激活函数(输出层除外)和各层的神经元个数。梯度迭代参数迭代步长α,最大迭代次数MAX与停止迭代阈值ϵ.
输出:CNN模型各隐藏层与输出层的
W
,
b
W,b
W,b.
1) 初始化各隐藏层与输出层的各
W
,
b
W,b
W,b的值为一个随机值;
2)for iter to 1 to MAX:
2_1) for i =1 to m:
a) 将CNN输入a1设置为xi对应的张量
b) for l=2 to L-1,根据下面3种情况进行前向传播算法计算:
b_1) 如果当前是全连接层,则有
a
i
,
l
=
σ
(
z
i
,
l
)
=
σ
(
W
l
a
i
,
l
−
1
+
b
l
)
a^{i,l} = \sigma(z^{i,l}) = \sigma(W^la^{i,l-1} + b^{l})
ai,l=σ(zi,l)=σ(Wlai,l−1+bl)
b_2) 如果当前是卷积层,则有
a
i
,
l
=
σ
(
z
i
,
l
)
=
σ
(
W
l
∗
a
i
,
l
−
1
+
b
l
)
a^{i,l} = \sigma(z^{i,l}) = \sigma(W^l*a^{i,l-1} + b^{l})
ai,l=σ(zi,l)=σ(Wl∗ai,l−1+bl)
b_3) 如果当前是池化层,则有
a
i
,
l
=
p
o
o
l
(
a
i
,
l
−
1
)
a^{i,l}= pool(a^{i,l-1})
ai,l=pool(ai,l−1),
这里的pool指按照池化区域大小k和池化标准将输入张量缩小的过程。
c) 对于输出层第L层:
a
i
,
L
=
s
o
f
t
m
a
x
(
z
i
,
L
)
=
s
o
f
t
m
a
x
(
W
L
a
i
,
L
−
1
+
b
L
)
a^{i,L}= softmax(z^{i,L}) = softmax(W^{L}a^{i,L-1} +b^{L})
ai,L=softmax(zi,L)=softmax(WLai,L−1+bL)
c_1) 通过损失函数计算输出层的:
δ
i
,
L
\delta^{i,L}
δi,L
d) for l= L-1 to 2, 根据下面3种情况进行进行反向传播算法计算:
d_1) 如果当前是全连接层:
δ
i
,
l
=
(
W
l
+
1
)
T
δ
i
,
l
+
1
⊙
σ
′
(
z
i
,
l
)
\delta^{i,l} = (W^{l+1})^T\delta^{i,l+1}\odot \sigma^{'}(z^{i,l})
δi,l=(Wl+1)Tδi,l+1⊙σ′(zi,l)
d_2) 如果当前是卷积层:
δ
i
,
l
=
δ
i
,
l
+
1
∗
r
o
t
180
(
W
l
+
1
)
⊙
σ
′
(
z
i
,
l
)
\delta^{i,l} = \delta^{i,l+1}*rot180(W^{l+1}) \odot \sigma^{'}(z^{i,l})
δi,l=δi,l+1∗rot180(Wl+1)⊙σ′(zi,l)
d_3) 如果当前是池化层:
δ
i
,
l
=
u
p
s
a
m
p
l
e
(
δ
i
,
l
+
1
)
⊙
σ
′
(
z
i
,
l
)
\delta^{i,l} = upsample(\delta^{i,l+1}) \odot \sigma^{'}(z^{i,l})
δi,l=upsample(δi,l+1)⊙σ′(zi,l)
2_2) for l = 2 to L,根据下面2种情况更新第l层的
W
l
,
b
l
W^l,b^l
Wl,bl:
2_2-1) 如果当前是全连接层:
W
l
=
W
l
−
α
∑
i
=
1
m
δ
i
,
l
(
a
i
,
l
−
1
)
T
W^l = W^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}(a^{i, l-1})^T
Wl=Wl−αi=1∑mδi,l(ai,l−1)T,
b
l
=
b
l
−
α
∑
i
=
1
m
δ
i
,
l
b^l = b^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}
bl=bl−αi=1∑mδi,l
2_2-2) 如果当前是卷积层,对于每一个卷积核有:
W
l
=
W
l
−
α
∑
i
=
1
m
δ
i
,
l
∗
a
i
,
l
−
1
W^l = W^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}*a^{i, l-1}
Wl=Wl−αi=1∑mδi,l∗ai,l−1,
b
l
=
b
l
−
α
∑
i
=
1
m
∑
u
,
v
(
δ
i
,
l
)
u
,
v
b^l = b^l -\alpha \sum\limits_{i=1}^m \sum\limits_{u,v}(\delta^{i,l})_{u,v}
bl=bl−αi=1∑mu,v∑(δi,l)u,v
2_3) 如果所有W,b的变化值都小于停止迭代阈值ϵ,则跳出迭代循环到步骤3。
3) 输出各隐藏层与输出层的线性关系系数矩阵W和偏倚向量b。
参考资源:
1.刘建平Pinard
2.Neural Networks and Deep Learning by By Michael Nielsen
3.CS231n Convolutional Neural Networks for Visual Recognition, Stanford