卷积神经网络推导

  • 更新时间: 2018-06-01
  • 来源: 原创或网络
  • 浏览数: 21次
  • 字数: 8605
  • 发表评论

1 卷积神经网络的前向传播

首先我们来看一个最简单的卷积神经网络卷积神经网络推导,by 5lulu.com

1.输入层---->卷积层

以上一节的例子为例,输入是一个4*4 的image,经过两个2*2的卷积核进行卷积运算后,变成两个3*3的feature_map

卷积神经网络推导,by 5lulu.com

卷积核filter1为例(stride = 1 ):

卷积神经网络推导,by 5lulu.com

计算第一个卷积层神经元o11的输入:

卷积神经网络推导,by 5lulu.com

神经元o11的输出:(此处使用Relu激活函数)

卷积神经网络推导,by 5lulu.com

其他神经元计算方式相同

2.卷积层---->池化层


卷积神经网络推导,by 5lulu.com

计算池化层m11 的输入(取窗口为 2 * 2),池化层没有激活函数

卷积神经网络推导,by 5lulu.com

3.池化层---->全连接层

池化层的输出到flatten层把所有元素“拍平”,然后到全连接层。

4.全连接层---->输出层

全连接层到输出层就是正常的神经元与神经元之间的邻接相连,通过softmax函数计算后输出到output,得到不同类别的概率值,输出概率值最大的即为该图片的类别。


2 卷积神经网络的反向传播

传统的神经网络是全连接形式的,如果进行反向传播,只需要由下一层对前一层不断的求偏导,即求链式偏导就可以求出每一层的误差敏感项,然后求出权重和偏置项的梯度,即可更新权重。而卷积神经网络有两个特殊的层:卷积层池化层池化层输出时不需要经过激活函数,是一个滑动窗口最大值,一个常数,那么它的偏导是1。池化层相当于对上层图片做了一个压缩,这个反向求误差敏感项时与传统的反向传播方式不同。从卷积后的feature_map反向传播到前一层时,由于前向传播时是通过卷积核卷积运算得到的feature_map,所以反向传播与传统的也不一样,需要更新卷积核的参数。下面我们介绍一下池化层卷积层是如何做反向传播的。

在介绍之前,首先回顾一下传统的反向传播方法:

1.通过前向传播计算每一层的输入值 (如卷积后的feature_map的第一个神经元的输入: 卷积神经网络推导,by 5lulu.com )


2.反向传播计算每个神经元的误差项卷积神经网络推导,by 5lulu.com ,其中E为损失函数计算得到的总体误差,可以用平方差,交叉熵等表示。

3.计算每个神经元权重 的梯度, 卷积神经网络推导,by 5lulu.com

4.更新权重 卷积神经网络推导,by 5lulu.com (其中λ为学习率)

卷积层的反向传播

由前向传播可得:

卷积神经网络推导,by 5lulu.com

注:原来这里写的是计算输入层的误差项是不准确的,这里的 卷积神经网络推导,by 5lulu.com 表示的是卷积层的上一层即可。

先计算 卷积神经网络推导,by 5lulu.com

此处我们并不清楚 卷积神经网络推导,by 5lulu.com 怎么算,那可以先把input层通过卷积核做完卷积运算后的输出feature_map写出来:


卷积神经网络推导,by 5lulu.com

卷积神经网络推导,by 5lulu.com

卷积神经网络推导,by 5lulu.com


卷积神经网络推导,by 5lulu.com

此时我们的误差敏感矩阵就求完了,得到误差敏感矩阵后,即可求权重的梯度。

卷积神经网络推导,by 5lulu.com

可以看出,偏置项的偏导等于这一层所有误差敏感项之和。得到了权重和偏置项的梯度后,就可以根据梯度下降法更新权重和梯度了。

3 池化层的反向传播

池化层的反向传播就比较好求了,看着下面的图,左边是上一层的输出,也就是卷积层的输出feature_map,右边是池化层的输入,还是先根据前向传播,把式子都写出来,方便计算:


卷积神经网络推导,by 5lulu.com


卷积神经网络推导,by 5lulu.com

这样就求出了池化层的误差敏感项矩阵。同理可以求出每个神经元的梯度并更新权重。


标签: 卷积 池化层

我来评分 :6
0

转载注明:转自5lulu技术库

本站遵循:署名-非商业性使用-禁止演绎 3.0 共享协议