由相当浅入深玩转CNN(1)——超超超超超简单推导CNN反向传播
1.写在前面
相信诸位老铁,点开我这篇博客,都是想看看卷积层的反向传播和池化层的反向传播是怎么求导的,但是点开其他博客都是一大段的公式,望而止步,我之前也是介个样子。
在本次博客,我先带大家感觉一下求导的过程,严格来说,本次的CNN并非正宗的CNN,但是却可以帮助我们了解求导的过程!大家一定要看懂这一步,再看下一步,必要的时候拿出纸和笔好好算算!!
笔者在前向传播的时候,会顺便将一些导数求出,以备之后使用。
2.卷积过程
相信这个操作,大家都熟悉的一批,我不赘述了(为了不用别人的图,这么个小破gif花了好久哈哈)
卷积核对进行卷积操作,得到矩阵:
在这里我们先让、、和分别对矩阵中的和元素求偏导,得到以下结果:
其实,、、和对矩阵中的其他元素求偏导,也会得到类似的结果,老铁们先不要急,一会告诉大家规律。
3.池化操作
再得到矩阵后,我们对其进行池化(Pooling)操作,不失一般性,可以看做矩阵对矩阵做卷积操作,得到矩阵,可以将其视为单元素矩阵,也可以将其视为一个数,不过这里不影响:
令分别对矩阵元素、、和求偏导,有图右下角式子:
4.求出误差
我们得出了预测值,原有真实值为,采用均方误差
令误差对求导数:
有:
5.反向传播求偏导
此时,我们令对矩阵中元素和求导,同时带入我们之前求的偏导数:
对中其他元素求偏导结果类似(大家最好动手算一算,这波不亏的):
可以看出,不论是对中哪一项元素求偏导,都会有,那我们现在关心一下,偏导中矩阵的元素:
你现在可以大胆的猜测一下,等于什么?
没错,就是矩阵右上角的4个元素和矩阵的四个元素相乘再相加。
不妨再大胆的猜一下,矩阵对矩阵求偏导等于什么?
等于,矩阵与矩阵做卷积操作,刚好是个元素
即:
所以:
OK! 咱们求导工作到此结束!是不是感觉很清楚呢??????
注:严格来说,本次博客所有的,都应该叫做!
若之后有时间,我再写写二者的区别和联系