深度学习之卷积神经网络(6)梯度传播
在完成手写数字图片识别实战后,我们对卷积神经网络的使用有了初步的了解。现在我们来解决一个关键问题,卷积层通过移动感受野的方式实现离散卷积操作,那么它的梯度传播是怎样进行的呢?
考虑一简单的情形,输入
3
×
3
3×3
3×3的单通道矩阵,与一个
2
×
2
2×2
2×2的卷积核,进行卷积运算,输出结果打平后直接与虚构的标注计算误差,如下图所示。我们来讨论这种情况下的梯度更新方式。
首先推导出张量
O
\boldsymbol O
O的表达形式:
o
00
=
x
00
w
00
+
x
01
w
01
+
x
10
w
10
+
x
11
w
11
+
b
o
01
=
x
01
w
00
+
x
02
w
01
+
x
11
w
10
+
x
12
w
11
+
b
o
10
=
x
10
w
00
+
x
11
w
01
+
x
20
w
10
+
x
21
w
11
+
b
o
11
=
x
11
w
00
+
x
12
w
01
+
x
21
w
10
+
x
22
w
11
+
b
o_{00}=x_{00} w_{00}+x_{01} w_{01}+x_{10} w_{10}+x_{11} w_{11}+b\\ o_{01}=x_{01} w_{00}+x_{02} w_{01}+x_{11} w_{10}+x_{12} w_{11}+b\\ o_{10}=x_{10} w_{00}+x_{11} w_{01}+x_{20} w_{10}+x_{21} w_{11}+b\\ o_{11}=x_{11} w_{00}+x_{12} w_{01}+x_{21} w_{10}+x_{22} w_{11}+b
o00=x00w00+x01w01+x10w10+x11w11+bo01=x01w00+x02w01+x11w10+x12w11+bo10=x10w00+x11w01+x20w10+x21w11+bo11=x11w00+x12w01+x21w10+x22w11+b
以
w
00
w_{00}
w00的梯度计算为例,通过链式法则分解:
∂
L
∂
w
00
=
∑
i
∈
{
00
,
01
,
10
,
11
}
∂
L
∂
o
i
∂
o
i
∂
w
00
\frac{∂\mathcal{L}}{∂w_{00}}=\sum_{i\in\{00,01,10,11\}}{\frac{∂\mathcal{L}}{∂o_i}\frac{∂o_i}{∂w_{00}}}
∂w00∂L=i∈{00,01,10,11}∑∂oi∂L∂w00∂oi
其中
∂
L
∂
o
i
\frac{∂\mathcal{L}}{∂o_i}
∂oi∂L可直接由误差函数推导出来,我们直接来考虑
∂
o
i
∂
w
00
\frac{∂o_i}{∂w_{00}}
∂w00∂oi,例如:
∂
o
00
∂
w
00
=
∂
(
x
00
w
00
+
x
01
w
01
+
x
10
w
10
+
x
11
w
11
+
b
w
00
=
x
00
\begin{aligned}\frac{∂o_{00}}{∂w_{00}}&=\frac{∂(x_{00} w_{00}+x_{01} w_{01}+x_{10} w_{10}+x_{11} w_{11}+b}{w_{00}} \\&=x_{00}\end{aligned}
∂w00∂o00=w00∂(x00w00+x01w01+x10w10+x11w11+b=x00
同理:
∂
o
01
∂
w
00
=
∂
(
x
01
w
00
+
x
02
w
01
+
x
11
w
10
+
x
12
w
11
+
b
w
00
=
x
01
\begin{aligned}\frac{∂o_{01}}{∂w_{00}}&=\frac{∂(x_{01} w_{00}+x_{02} w_{01}+x_{11} w_{10}+x_{12} w_{11}+b}{w_{00}} \\&=x_{01}\end{aligned}
∂w00∂o01=w00∂(x01w00+x02w01+x11w10+x12w11+b=x01
∂
o
10
∂
w
00
=
∂
(
x
10
w
00
+
x
11
w
01
+
x
10
w
10
+
x
21
w
11
+
b
w
00
=
x
10
\begin{aligned}\frac{∂o_{10}}{∂w_{00}}&=\frac{∂(x_{10} w_{00}+x_{11} w_{01}+x_{10} w_{10}+x_{21} w_{11}+b}{w_{00}} \\&=x_{10}\end{aligned}
∂w00∂o10=w00∂(x10w00+x11w01+x10w10+x21w11+b=x10
∂
o
11
∂
w
00
=
∂
(
x
11
w
00
+
x
12
w
01
+
x
21
w
10
+
x
22
w
11
+
b
w
00
=
x
11
\begin{aligned}\frac{∂o_{11}}{∂w_{00}}&=\frac{∂(x_{11} w_{00}+x_{12} w_{01}+x_{21} w_{10}+x_{22} w_{11}+b}{w_{00}} \\&=x_{11}\end{aligned}
∂w00∂o11=w00∂(x11w00+x12w01+x21w10+x22w11+b=x11
可以观察到,通过循环移动感受野的方式并没有改变网络层的可导性,同时梯度的推导也并不复杂,知识当网络层数增大以后,人工梯度推导将变得十分繁琐。不过不需要担心,深度学习框架可以帮我们自动完成所有参数的梯度计算与更新,我们只需要设计好网络结构即可。