1.写在前面
相信诸位老铁,点开我这篇博客,都是想看看卷积层的反向传播和池化层的反向传播是怎么求导的,但是点开其他博客都是一大段的公式,望而止步,我之前也是介个样子。
在本次博客,我先带大家感觉一下求导的过程,严格来说,本次的CNN并非正宗的CNN,但是却可以帮助我们了解求导的过程!大家一定要看懂这一步,再看下一步,必要的时候拿出纸和笔好好算算!!
笔者在前向传播的时候,会顺便将一些导数求出,以备之后使用。
2.卷积过程
注:
-
A
m
×
n
A_{m\times n}
Am×n矩阵与
B
x
×
y
B_{x\times y}
Bx×y矩阵(做步长
s
t
r
i
d
e
=
1
的
stride=1的
stride=1的)
v
a
l
i
d
valid
valid卷积操作(
m
≥
x
且
n
≥
y
m\ge x且n\ge y
m≥x且n≥y)
所得元素维度为 ( m − x + 1 ) × ( n − y + 1 ) (m-x+1)\times (n-y+1) (m−x+1)×(n−y+1) - 当卷积操作的步长为 s t r i d e stride stride时,卷积的输出矩阵为 ( m − x s t r i d e x + 1 ) × ( n − y s t r i d e y + 1 ) (\frac{m-x}{stride_x}+1)\times (\frac{n-y}{stride_y}+1) (stridexm−x+1)×(strideyn−y+1),当其中不能整除时,说明该步长不适合卷积操作
- 如果我们还有 z e r o P a d d i n g zeroPadding zeroPadding,则需要加上 P a d d i n g Padding Padding数字,一般来说输出矩阵为 ( m − x + 2 p x s t r i d e x + 1 ) × ( n − y + 2 p y s t r i d e y + 1 ) (\frac{m-x+2p_x}{stride_x}+1)\times (\frac{n-y+2p_y}{stride_y}+1) (stridexm−x+2px+1)×(strideyn−y+2py+1)
- 严格的来说,是 ( [ m − x + 2 p x s t r i d e x ] + 1 ) × ( [ n − y + 2 p y s t r i d e y ] + 1 ) ([\frac{m-x+2p_x}{stride_x}]+1)\times ([\frac{n-y+2p_y}{stride_y}]+1) ([stridexm−x+2px]+1)×([strideyn−y+2py]+1)
- 同时卷积核也叫做感受野( r e c e p t i v e f i e l d receptive field receptivefield)
相信这个操作,大家都熟悉的一批,我不赘述了(为了不用别人的图,这么个小破gif花了好久哈哈)
卷积核
A
A
A对
X
X
X进行卷积操作,得到矩阵
Y
Y
Y:
在这里我们先让
Y
11
Y_{11}
Y11、
Y
12
Y_{12}
Y12、
Y
13
Y_{13}
Y13和
Y
14
Y_{14}
Y14分别对
A
A
A矩阵中的
a
11
a_{11}
a11和
a
12
a_{12}
a12元素求偏导,得到以下结果:
其实,
Y
11
Y_{11}
Y11、
Y
12
Y_{12}
Y12、
Y
13
Y_{13}
Y13和
Y
14
Y_{14}
Y14对矩阵
A
A
A中的其他元素求偏导,也会得到类似的结果,老铁们先不要急,一会告诉大家规律。
3.池化操作( P o o l i n g Pooling Pooling或 d o w n s a m p l e downsample downsample降采样)
再得到矩阵
Y
Y
Y后,我们对其进行池化(Pooling)操作,不失一般性,可以看做
B
B
B矩阵对矩阵
Y
Y
Y做卷积操作,得到矩阵
Z
Z
Z,可以将其视为单元素矩阵
Z
Z
Z,也可以将其视为一个数
Z
Z
Z,不过这里不影响:
实际上,池化操作,可以视为没有参数
令
Z
Z
Z分别对矩阵
Y
Y
Y元素
Y
11
Y_{11}
Y11、
Y
12
Y_{12}
Y12、
Y
13
Y_{13}
Y13和
Y
14
Y_{14}
Y14求偏导,有图右下角式子:
4.求出误差
我们得出了预测值
Z
Z
Z,原有真实值为
R
R
R,采用均方误差
E
=
1
2
(
Z
−
R
)
2
E=\frac{1}{2}(Z-R)^2
E=21(Z−R)2
令误差
E
E
E对
Z
Z
Z求导数:
∂
E
∂
Z
=
Z
−
R
\frac{\partial E}{\partial Z}=Z-R
∂Z∂E=Z−R
有:
∂
E
∂
a
11
=
(
Z
−
R
)
∂
Z
∂
a
11
\frac{\partial E}{\partial a_{11}}=(Z-R)\frac{\partial Z}{\partial a_{11}}
∂a11∂E=(Z−R)∂a11∂Z
5.反向传播求偏导
此时,我们令
Z
Z
Z对矩阵
A
A
A中元素
a
11
a_{11}
a11和
a
12
a_{12}
a12求导,同时带入我们之前求的偏导数:
Z
Z
Z对
A
A
A中其他元素求偏导结果类似(大家最好动手算一算,这波不亏的):
可以看出,不论是
Z
Z
Z对
A
A
A中哪一项元素求偏导,都会有
b
11
、
b
12
、
b
21
和
b
22
b_{11}、b_{12}、b_{21}和b_{22}
b11、b12、b21和b22,那我们现在关心一下,偏导中矩阵
X
X
X的元素:
你现在可以大胆的猜测一下,
∂
Z
∂
a
13
\frac{\partial Z}{\partial a_{13}}
∂a13∂Z等于什么?
没错,就是矩阵 X X X右上角的4个元素和矩阵 B B B的四个元素相乘再相加。
不妨再大胆的猜一下,矩阵 Z Z Z对矩阵 A A A求偏导等于什么?
等于,矩阵 X X X与矩阵 B B B做 v a l i d valid valid卷积操作,刚好是 3 × 3 = 9 3\times 3=9 3×3=9个元素
即: ∂ Z ∂ A = X ∗ B \frac{\partial Z}{\partial A}=X*B ∂A∂Z=X∗B
所以: ∂ E ∂ A = ( Z − R ) × X ∗ B \frac{\partial E}{\partial A}=(Z-R)\times X*B ∂A∂E=(Z−R)×X∗B
OK! 咱们求导工作到此结束!是不是感觉很清楚呢??😝
注:严格来说,本次博客所有的
卷
积
操
作
卷积操作
卷积操作,都应该叫做
相
关
操
作
相关操作
相关操作!
若之后有时间,我再写写二者的区别和联系