卷积神经网络的反向传播

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卷积神经网络的反向传播相关的知识,希望对你有一定的参考价值。

参考技术A 首先回顾深度神经网络(DNN)的反向传播

forward:

Loss Function:

backward:

w的梯度:

b的梯度:

令:

已知 ,推导上一层 :

( 1) 单通道(极简情况)

为了简单起见,设输入X为3* 3,单通道,卷积核K为2*2,输出Y为2*2,单通道。 ,即:

在计算时会转化为:

所以,卷积运算最终转化为矩阵运算。即X、K、Y变形在之后对应矩阵变为XC、KC、YC,则

Y和K只要reshape一下就可以了,但X需要特别处理,这个处理过程叫im2col(image to column),就是把卷积窗口中的数拉成一行,每行 列,共(X.w-k+1)(X.h-k+1)行。

(2)多通道(实际情况)

下面是一张被广泛引用的说明图,图中显示的输入是3通道(3层,比如R、G、B共3个channel),输出是2通道(channel),于是总共有3*2=6个卷积核,每个核有4个元素,3*4=12,所以6个卷积核排成一个12*2的核矩阵,即为权重矩阵,把这6个KC的组合(权重矩阵)记为WC。

图中最底下一行表示两个矩阵乘积运算,就是卷积层的前向传播算法。实际编码时还会加上偏置,而且还要考虑Batchs。

如图中所示,如果输入的维度为 ,那么

上图中显示的乘法维度是:

最后将 即可

池化(Pooling):也称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:

Max Pooling:最大池化

Average Pooling:平均池化

池化层的反向传播比较容易理解,我们以最大池化举例,上图中,池化后的数字6对应于池化前的红色区域,实际上只有红色区域中最大值数字6对池化后的结果有影响,权重为1,而其它的数字对池化后的结果影响都为0。假设池化后数字6的位置误差为 误差反向传播回去时,红色区域中最大值对应的位置误差即等于 ,而其它3个位置对应的 误差为0。因此,在卷积神经网络最大池化前向传播时,不仅要记录区域的最大值,同时也要记录下来区域最大值的位置,方便误差的反向传播。

而平均池化就更简单了,由于平均池化时,区域中每个值对池化后结果贡献的权重都为区域大小的倒数,所以误差反向传播回来时,在区域每个位置的误差都为池化后误差 除以区域的大小。

由前面的前向传播可知卷积核的计算为:

记:

在反向传播中, 是从后面一层(一般是激活函数层或池化层)传过来的,是一个已知量,在此基础上求

1.求

只需要reshape一下就可以得到

2.求

根据反向传播公式,

但是从 还原到 并非易事,im2col的逆映射计算复杂度高得不能接受,要计算 还得另寻它途。

下面是新的计算方式的推导:

根据前向传播:

可以计算每个 的导数:

所以:

3.求

我们的 是一个列向量,它给卷积结果的每一个通道都加上同一个标量。因此,在反向传播时,它的导数等于卷积结果的 误差在每一个通道上将所有 误差进行求和的结果,即:

由于有些公式支持的不好,所以有些地方我用了截图,如果有读不懂的,可以在评论区回复邮箱,我把word版发给你们。另外,如果大家发现我有地方写得不对或者有疑问的,麻烦评论, 我会回复并改正

卷积神经网络(CNN)反向传播算法公式详细推导

相关文章:经典反向传播算法公式详细推导

                 卷积神经网络(CNN)讲解及代码

       1.http://blog.csdn.net/lu597203933/article/details/46575871

       2.http://www.cnblogs.com/tornadomeet/p/3468450.html

       3.http://blog.csdn.net/zouxy09/article/details/9993371

       4.Notes on Convolutional Neural Networks, Jake Bouvrie

以上是关于卷积神经网络的反向传播的主要内容,如果未能解决你的问题,请参考以下文章

:卷积神经网络

SIGAI深度学习第七集 卷积神经网络1

007-卷积神经网络-前向传播-反向传播

编写C语言版本的卷积神经网络CNN之三:CNN的误差反向传播过程

如何通过反向传播训练卷积神经网络中的过滤器?

ND 卷积反向传播