微信公众号
关键字全网搜索最新排名
【机器学习算法】:排名第一
【机器学习】:排名第一
【Python】:排名第三
【算法】:排名第四
前言
在卷积神经网络(CNN)前向传播算法(干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解)中对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,下面就对CNN的反向传播算法做一个总结。在阅读本文前,建议先研究DNN的反向传播算法:深度神经网络(DNN)反向传播算法(BP)(深度学习之DNN与反向传播算法)
DNN反向传播
首先回顾DNN的反向传播算法。在DNN中,首先计算出输出层的δL:
![](https://img-blog.csdnimg.cn/img_convert/c3d0636f2aead591a9abc4be23978cc8.png;wxfrom=5&wx_lazy=1)
利用数学归纳法,用δl+1的值一步步的向前求出第l层的δl,表达式为:
![](https://img-blog.csdnimg.cn/img_convert/8dc23da8ea3250a2d49b2d387cb0d0cf.png;wxfrom=5&wx_lazy=1)
有了δl的表达式,从而求出W,b的梯度表达式:
![](https://img-blog.csdnimg.cn/img_convert/7ffbd4c0b283a67c408779498a0d2483.png;wxfrom=5&wx_lazy=1)
有了W,b梯度表达式,就可以用梯度下降法来优化W,b,求出最终的所有W,b的值。现在想把同样的思想用到CNN中,很明显,CNN有些不同的地方,不能直接去套用DNN的反向传播算法的公式。
CNN反向传播思想
要套用DNN的反向传播算法到CNN,有几个问题需要解决:
1)池化层没有激活函数,这个问题倒比较好解决,我们可以令池化层的激活函数为σ(z)=z,即激活后就是自己本身。这样池化层激活函数的导数为1.
2)池化层在前向传播的时候,对输入进行了压缩,那么我们现在需要向前反向推导δl−1,这个推导方法和DNN完全不同。
3) 卷积层是通过张量卷积,或者说若干个矩阵卷积求和而得的当前层的输出,这和DNN很不相同,DNN的全连接层是直接进行矩阵乘法得到当前层的输出。这样在卷积层反向传播的时候,上一层的δl−1递推计算方法肯定有所不