由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播

1.写在前面

相信诸位老铁,点开我这篇博客,都是想看看卷积层的反向传播池化层的反向传播是怎么求导的,但是点开其他博客都是一大段的公式,望而止步,我之前也是介个样子。

在本次博客,我先带大家感觉一下求导的过程,严格来说,本次的CNN并非正宗的CNN,但是却可以帮助我们了解求导的过程!大家一定要看懂这一步,再看下一步,必要的时候拿出纸和笔好好算算!!

笔者在前向传播的时候,会顺便将一些导数求出,以备之后使用。

2.卷积过程

相信这个操作,大家都熟悉的一批,我不赘述了(为了不用别人的图,这么个小破gif花了好久哈哈)
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
卷积核AAXX进行卷积操作,得到矩阵YY
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
在这里我们先让Y11Y_{11}Y12Y_{12}Y13Y_{13}Y14Y_{14}分别对AA矩阵中的a11a_{11}a12a_{12}元素求偏导,得到以下结果:
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
其实,Y11Y_{11}Y12Y_{12}Y13Y_{13}Y14Y_{14}对矩阵AA中的其他元素求偏导,也会得到类似的结果,老铁们先不要急,一会告诉大家规律。

3.池化操作

再得到矩阵YY后,我们对其进行池化(Pooling)操作,不失一般性,可以看做BB矩阵对矩阵YY卷积操作,得到矩阵ZZ,可以将其视为单元素矩阵ZZ,也可以将其视为一个数ZZ,不过这里不影响:
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
ZZ分别对矩阵YY元素Y11Y_{11}Y12Y_{12}Y13Y_{13}Y14Y_{14}求偏导,有图右下角式子:

由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播

4.求出误差

我们得出了预测值ZZ,原有真实值为RR,采用均方误差E=12(ZR)2E=\frac{1}{2}(Z-R)^2
令误差EEZZ求导数:
EZ=ZR \frac{\partial E}{\partial Z}=Z-R
有:
Ea11=(ZR)Za11 \frac{\partial E}{\partial a_{11}}=(Z-R)\frac{\partial Z}{\partial a_{11}}

5.反向传播求偏导

此时,我们令ZZ对矩阵AA中元素a11a_{11}a12a_{12}求导,同时带入我们之前求的偏导数:
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
ZZAA中其他元素求偏导结果类似(大家最好动手算一算,这波不亏的):
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
可以看出,不论是ZZAA中哪一项元素求偏导,都会有b11b12b21b22b_{11}、b_{12}、b_{21}和b_{22},那我们现在关心一下,偏导中矩阵XX的元素:
由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
你现在可以大胆的猜测一下,Za13\frac{\partial Z}{\partial a_{13}}等于什么?

没错,就是矩阵XX右上角的4个元素和矩阵BB的四个元素相乘再相加。

不妨再大胆的猜一下,矩阵ZZ对矩阵AA求偏导等于什么?

于,矩阵XX与矩阵BBvalidvalid卷积操作,刚好是3×3=93\times 3=9个元素

即:ZA=XB\frac{\partial Z}{\partial A}=X*B

所以:EA=(ZR)×XB\frac{\partial E}{\partial A}=(Z-R)\times X*B

OK! 咱们求导工作到此结束!是不是感觉很清楚呢??????


注:严格来说,本次博客所有的卷积操作,都应该叫做相关操作
若之后有时间,我再写写二者的区别和联系