卷积神经网络CNN(反向传播具体算法)
来源:互联网 发布:淘宝卖家怎么处理退货 编辑:程序博客网 时间:2024/05/16 05:01
卷积神经网络(CNN)反向传播算法
在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结。在阅读本文前,建议先研究DNN的反向传播算法:深度神经网络(DNN)反向传播算法(BP)
1. 回顾DNN的反向传播算法
我们首先回顾DNN的反向传播算法。在DNN中,我们是首先计算出输出层的
利用数学归纳法,用
有了
有了
现在我们想把同样的思想用到CNN中,很明显,CNN有些不同的地方,不能直接去套用DNN的反向传播算法的公式。
2. CNN的反向传播算法思想
要套用DNN的反向传播算法到CNN,有几个问题需要解决:
1)池化层没有激活函数,这个问题倒比较好解决,我们可以令池化层的激活函数为
2)池化层在前向传播的时候,对输入进行了压缩,那么我们现在需要向前反向推导
3) 卷积层是通过张量卷积,或者说若干个矩阵卷积求和而得的当前层的输出,这和DNN很不相同,DNN的全连接层是直接进行矩阵乘法得到当前层的输出。这样在卷积层反向传播的时候,上一层的
4)对于卷积层,由于
从上面可以看出,问题1比较好解决,但是问题2,3,4就需要好好的动一番脑筋了,而问题2,3,4也是解决CNN反向传播算法的关键所在。另外大家要注意到的是,DNN中的
下面我们就针对问题2,3,4来一步步研究CNN的反向传播算法。
在研究过程中,需要注意的是,由于卷积层可以有多个卷积核,各个卷积核的处理方法是完全相同且独立的,为了简化算法公式的复杂度,我们下面提到卷积核都是卷积层中若干卷积核中的一个。
3. 已知池化层的 ,推导上一隐藏层的
我们首先解决上面的问题2,如果已知池化层的
在前向传播算法时,池化层一般我们会用MAX或者Average对输入进行池化,池化的区域大小已知。现在我们反过来,要从缩小后的误差
在反向传播时,我们首先会把
用一个例子可以很方便的表示:假设我们的池化区域大小是2x2。
由于池化区域为2x2,我们先讲
如果是MAX,假设我们之前在前向传播时记录的最大值位置分别是左上,右下,右上,左下,则转换后的矩阵为:
如果是Average,则进行平均:转换后的矩阵为:
这样我们就得到了上一层
其中,upsample函数完成了池化误差矩阵放大与误差重新分配的逻辑。
我们概括下,对于张量
4. 已知卷积层的 ,推导上一隐藏层的
对于卷积层的反向传播,我们首先回忆下卷积层的前向传播公式:
其中
在DNN中,我们知道
因此要推导出
注意到
因此我们有:
这里的式子其实和DNN的类似,区别在于对于含有卷积的式子求导时,卷积核被旋转了180度。即式子中的
假设我们
我们列出
利用卷积的定义,很容易得出:
接着我们模拟反向求导:
从上式可以看出,对于
比如对于
对于
同样的道理我们得到:
这上面9个式子其实可以用一个矩阵卷积的形式表示,即:
为了符合梯度计算,我们在误差矩阵周围填充了一圈0,此时我们将卷积核翻转后和反向传播的梯度误差进行卷积,就得到了前一次的梯度误差。这个例子直观的介绍了为什么对含有卷积的式子求导时,卷积核要翻转180度的原因。
以上就是卷积层的误差反向传播过程。
5. 已知卷积层的 ,推导该层的 的梯度
好了,我们现在已经可以递推出每一层的梯度误差
注意到卷积层
因此我们有:
由于我们有上一节的基础,大家应该清楚为什么这里求导后要旋转180度了。
而对于b,则稍微有些特殊,因为
6. CNN反向传播算法总结
现在我们总结下CNN的反向传播算法,以最基本的批量梯度下降法为例来描述反向传播算法。
输入:m个图片样本,CNN模型的层数L和所有隐藏层的类型,对于卷积层,要定义卷积核的大小K,卷积核子矩阵的维度F,填充大小P,步幅S。对于池化层,要定义池化区域大小k和池化标准(MAX或Average),对于全连接层,要定义全连接层的激活函数(输出层除外)和各层的神经元个数。梯度迭代参数迭代步长
输出:CNN模型各隐藏层与输出层的
1) 初始化各隐藏层与输出层的各
2)for iter to 1 to MAX:
2-1) for i =1 to m:
a) 将CNN输入
b) for
b-1) 如果当前是全连接层:则有
b-2) 如果当前是卷积层:则有
b-3) 如果当前是池化层:则有
c) 对于输出层第L层:
c) 通过损失函数计算输出层的
d) for
d-1) 如果当前是全连接层:
d-2) 如果当前是卷积层:
d-3) 如果当前是池化层:
2-2) for
2-2-1) 如果当前是全连接层:
2-2-2) 如果当前是卷积层,对于每一个卷积核有:
2-3) 如果所有
3) 输出各隐藏层与输出层的线性关系系数矩阵
(欢迎转载,转载请注明出处。欢迎沟通交流: pinard.liu@ericsson.com)
参考资料:
1) Neural Networks and Deep Learning by By Michael Nielsen
2) Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville
3) UFLDL Tutorial
4)CS231n Convolutional Neural Networks for Visual Recognition, Stanford
- 卷积神经网络CNN(反向传播具体算法)
- 卷积神经网络(CNN)反向传播算法
- 卷积神经网络(CNN)反向传播算法
- 卷积神经网络(CNN)反向传播算法
- 卷积神经网络(CNN)反向传播算法
- 卷积神经网络(CNN)反向传播算法
- 卷积神经网络(CNN)反向传播算法
- 卷积神经网络(CNN)反向传播算法
- 卷积神经网络(CNN)反向传播算法公式详细推导
- 卷积神经网络(CNN)反向传播算法公式详细推导
- 卷积神经网络(CNN)反向传播理论推导
- CNN卷积神经网络和反向传播
- 卷积神经网络CNN(重点:反向传播)
- 卷积神经网络反向传播算法
- CNN卷积神经网络--反向传播(3,初识卷积反向算法)
- CNN卷积神经网络--反向传播(2,前向传播)
- 卷积神经网络(CNN)前向传播算法
- 卷积神经网络(CNN)前向传播算法
- ubuntu nginx php网站环境搭建
- leetcode小岛问题2道 (DFS的递归法和迭代法应用)
- 相同URL
- 11.24-11.25 省选训练总结1 线段树相关/CDQ/整体二分
- MPAndroidChart绘制折线图
- 卷积神经网络CNN(反向传播具体算法)
- 经典词句
- 【我的Java笔记】IO流_输出流中给文本文件追加数据的方法
- Java学习-包含私聊的多人聊天室
- poll() 的用法
- jsp从session中取空值的问题
- ubuntu下查看gpu情况
- MPAndroidChart的折线图的使用及封装
- vsftpd配置文件详解