CNN卷积神经网络反向传播总结及细节
2018-03-25 17:11
561 查看
CNN卷积神经网络在当下图像分类领域是很常用的一种神经网络,它的权值共享特性使得它在图像处理中训练的参数要比普通的神经网络训练参数少的多。
这几天自己用java实现了一下CNN的正向计算与误差反向传播,正向计算很好理解,也比较容易实现,但反向传播由于与普通的神经网络不同,实现会稍微复杂一些,看了很多博主的文章,感觉对卷积层的误差后向传递及卷积层自身weight和bias的计算有些细节没有说清楚,这里再总结一下。
(注意此处误差的定义中有‘-’号),则更新权值时有
为单元n的输出(
)
为
通过sigmoid后的输出,本文中设
从池化层推导上层误差
池化层如果是取max,则把池化层的
的值放在之前做前向传播算法得到最大值的位置。例:
假设前层最大值位置分别为左上,右下,右上,左下,则
池化层如果取平均值,则将误差平均即
目标:已知k单元所在的层(即本层卷积层)的误差项,求前一层j单元的误差项
现在考虑
如何计算,用最简单的例子(这里设前向传播时只是简单的和卷积核weight的乘法而不是卷积):
则有
对于
只有
的值与其相关联,则
而对于
有
和
与其关联,则
其他的同理求得。
此时发现这个这些误差项和卷积核weight的乘积可以用卷积来表示:将卷积层误差项补0,和卷积核做卷积
那在程序实现的时候补多少0呢,补0的目标是在卷积回去时与原输入的矩阵大小一致,如:上层矩阵大小为l,卷积核大小为k,步长为1,则卷积层矩阵大小为l-k+1,此时卷积层误差项矩阵大小肯定也为l-k+1,将此矩阵填充到l+k-1大小即可。
<
9359
/p>这里与上面的推导有些像
有
对于
有
其余的同理可以推出
此时发现对于误差项与上一层对本层输入的乘积可以表示为上层输入与本层误差项的乘
特别说明:如果前向传播为对应的乘,这里就是乘操作;如果前向传播为卷积,这里才是卷积。(这点在有些博客中可能没有说清楚,如果混淆了,可以自己按照上面的方法推导一下)
对于偏置bias:大多博客没有给出证明,所以我在这里证明下,在本例中
即将本层的误差项求和
文中数学用语可能不太标准,推导方面的问题欢迎指正交流
参考:
Machine Learing (美)Mitchell,T.M.
这几天自己用java实现了一下CNN的正向计算与误差反向传播,正向计算很好理解,也比较容易实现,但反向传播由于与普通的神经网络不同,实现会稍微复杂一些,看了很多博主的文章,感觉对卷积层的误差后向传递及卷积层自身weight和bias的计算有些细节没有说清楚,这里再总结一下。
定义误差
全连接层与一般的神经网络bp算法相同,此处将与单元n相关的误差项定义为(注意此处误差的定义中有‘-’号),则更新权值时有
为单元n的输出(
)
为
通过sigmoid后的输出,本文中设
从池化层推导上层误差
池化层如果是取max,则把池化层的
的值放在之前做前向传播算法得到最大值的位置。例:
假设前层最大值位置分别为左上,右下,右上,左下,则
池化层如果取平均值,则将误差平均即
从卷积层推导上层误差
对下一层来说误差可以用下面的公式推导(注:DownStream表示下层输入中包含单元j的输出的所有下层单元)目标:已知k单元所在的层(即本层卷积层)的误差项,求前一层j单元的误差项
现在考虑
如何计算,用最简单的例子(这里设前向传播时只是简单的和卷积核weight的乘法而不是卷积):
则有
对于
只有
的值与其相关联,则
而对于
有
和
与其关联,则
其他的同理求得。
此时发现这个这些误差项和卷积核weight的乘积可以用卷积来表示:将卷积层误差项补0,和卷积核做卷积
那在程序实现的时候补多少0呢,补0的目标是在卷积回去时与原输入的矩阵大小一致,如:上层矩阵大小为l,卷积核大小为k,步长为1,则卷积层矩阵大小为l-k+1,此时卷积层误差项矩阵大小肯定也为l-k+1,将此矩阵填充到l+k-1大小即可。
从卷积层误差项推导卷积核weight的梯度
这里先说明下:梯度本身是一个向量,表示函数沿这个方向上升最快,所以在更新weight时需用-1乘weight的梯度<
9359
/p>这里与上面的推导有些像
有
对于
有
其余的同理可以推出
此时发现对于误差项与上一层对本层输入的乘积可以表示为上层输入与本层误差项的乘
特别说明:如果前向传播为对应的乘,这里就是乘操作;如果前向传播为卷积,这里才是卷积。(这点在有些博客中可能没有说清楚,如果混淆了,可以自己按照上面的方法推导一下)
对于偏置bias:大多博客没有给出证明,所以我在这里证明下,在本例中
即将本层的误差项求和
文中数学用语可能不太标准,推导方面的问题欢迎指正交流
参考:
Machine Learing (美)Mitchell,T.M.
相关文章推荐
- CNN卷积神经网络--反向传播(2,前向传播)
- 总结2: Batch Normalization反向传播公式推导及其向量化
- CNN卷积神经网络反向传播机制的理解
- CNN卷积神经网络--反向传播(4,代码理解)
- RNN/LSTM反向传播计算细节
- CNN卷积神经网络---反向传播(1,全链接bp算法)
- 深度学习——概述及反向传播BP算法
- HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)
- 神经网络反向传播方法
- CS231n课程笔记翻译(九):反向传播笔记
- 神经网络反向传播的数学原理
- DNN反向传播推导过程
- TensorFlow实战系列3--实现反向传播
- 反向传播BP算法
- 神经网络反向传播(相关公式)
- J2EE持久层持久化上下文传播总结(续)
- android夯实总结(设计、细节及思想)
- LSTM详解 反向传播公式推导
- JavaScript学习总结-技巧、实用函数、简洁方法、编程细节
- 深度学习与计算机视觉[CS231N] 学习笔记(4.1):反向传播(Backpropagation)