前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Task 4 CNN back-propagation 反向传播算法

Task 4 CNN back-propagation 反向传播算法

作者头像
平凡的学生族
发布2019-05-25 10:00:42
9100
发布2019-05-25 10:00:42
举报
文章被收录于专栏:后端技术后端技术

1. 如何理解后向传播

参考CNN卷积神经网络学习笔记3:权值更新公式推导 后向传播的过程就是梯度向回传递,在CNN中,梯度的计算主要涉及三种情形

  1. 卷积层
  2. 池化层
  3. 全连接层

其中,卷积层涉及3种操作下的梯度计算

  1. 卷积操作
  2. 偏置
  3. 激活操作

池化层则有两种情形:

  1. 平均池化
  2. 最大池化

而全连接层的后向传播与全连接神经网络的后向传播原理一致。涉及:

  1. 权重的相乘与偏置
  2. 激活操作

本文先讨论全连接层的后向传播,再讨论卷积层、池化层的梯度传递。

2. 全连接层的梯度计算

知乎的如何理解神经网络里面的反向传播算法讲的很好。 主要是输出层与隐藏层的梯度传递

2.1 输出层的梯度传递

输出层示意图

链式法则

各项求解

梯度下降公式

灵敏度: 关于节点的梯度

这个就是关于节点的梯度的计算(相对于权重的梯度的计算。因为我们是要用梯度下降改变权值,所以要求权重的梯度,但在过程中总是要得到关于每一层的节点的梯度),又称灵敏度,表示了对最终误差造成的影响。正因为它的这个意义,关于一个权重的梯度可以由该权重的上的输出乘以节点的灵敏度得到,也就是

这个公式同样适用于隐藏层。

2.2 隐藏层的梯度传递

隐藏层示意图

链式法则

E_total / out_h1

另外两项

得到隐藏层权重的梯度

灵敏度

这里同样印证了上文的公式:权重的梯度=输出节点的灵敏度 * 权重上的值

3. 卷积层

3.1 卷积操作

3.1.1 卷积操作的各个梯度

参考 Forward And Backpropagation in Convolutional Neural Network. 假如有特征图与卷积核如下:

且输出与这两个矩阵的关系如下:

那么,关于卷积核F的每一项F_ij的梯度计算公式如下:

也就等于:

当我们仔细观察上图这几个式子的规律,可以发现,卷积核的梯度可以这样得来:

然后卷积核各项都可以根据此梯度进行调整。但是,我们还要把梯度传递给上一层,就需要计算关于输入的梯度。通过与计算卷积核的梯度同样的方法,我们可以得到关于各个X_ij的梯度:

仔细观察上图这几个式子的规律,可以发现,输入的梯度可以化为全卷积操作

全卷积的具体操作如下:

3.1.2 关于输入的梯度的用途

本来我感觉奇怪,如果关于卷积核的梯度是用于调整卷积核各项的值的话,那关于输入的梯度是用来做什么的呢?我看到了文章评论区有人刚好问了这个问题:

原来,它是用于计算上一层的梯度用的。其实,这一层对输入的梯度

就等于上一层对输出的梯度

这篇文章Back Propagation in Convolutional Neural Networks — Intuition and Code也提到了它的用处:

It is important to understand that ?x (or ?h for previous layer) would be the input for the backward pass of the previous layer. This is the core principle behind the success of back propagation.

3.1.3 概括

也就是说,卷积操作主要是求出两个:关于卷积核的梯度以及关于输入的梯度。其中。关于卷积核的梯度是用于调整卷积核各项的值的,关于输入的梯度则是用于给更上一层作为输出梯度的。

3.2 偏置与激活

梯度的传递在经过偏置操作与激活操作时的变化都在2. 全连接层的梯度计算里讲解了,卷积层的处理与全连接层在此方向的处理是一致的。

4. 池化层

4.1 average-pooling

平均池化的操作可以转化为卷积操作。比如,2 * 2的平均池化可以转化为卷积核为2 * 2,每项为1/4 的卷积操作。

4.2 max-pooling

知乎的 卷积神经网络(CNN)中卷积层与池化层如何进行BP残差传递与参数更新?中提到的 Backpropagation in Convolutional Neural Network 解释了平均池化与最大池化的梯度传递

假如某个矩阵被圈中的部分是最大项:

它们对应的梯度就是:

当该项被选取为最大项时,它的对应梯度为1,否则为0.

此文同样表达了这一点 Backpropagation in Pooling Layer (Subsamplig layer) in CNN

加入矩阵M有4个元素 a b c d 而且maxpool(M)返回d. 那么,maxpool函数就只依赖于d了. 那么,关于d的导数为1,关于a,b,c的导数为0. 所以,在计算关于d的梯度时,就是乘上1, 对其它的梯度乘上0.

参考

  1. CNN卷积神经网络学习笔记3:权值更新公式推导
  2. BP神经网络后向传播算法
  3. Only Numpy: Understanding Back Propagation for Max Pooling Layer in Multi Layer CNN with Example and Interactive Code. (With and Without Activation Layer)
  4. 卷积神经网络(CNN)中卷积层与池化层如何进行BP残差传递与参数更新?
  5. Backpropagation in Convolutional Neural Network
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 如何理解后向传播
  • 2. 全连接层的梯度计算
    • 2.1 输出层的梯度传递
      • 2.2 隐藏层的梯度传递
      • 3. 卷积层
        • 3.1 卷积操作
          • 3.1.1 卷积操作的各个梯度
          • 3.1.2 关于输入的梯度的用途
          • 3.1.3 概括
        • 3.2 偏置与激活
        • 4. 池化层
          • 4.1 average-pooling
            • 4.2 max-pooling
            • 参考
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档