对CNN各层的深入理解以及BP中的权重变化

本文深入探讨了CNN的卷积层、池化层和全连接层的作用,以及在反向传播过程中权重如何更新。卷积层通过滤波器提取特征,池化层通过最大值或平均值提升空间不变性,全连接层将特征映射到分类空间。在反向传播中,卷积层的梯度计算涉及到滤波器的旋转,而池化层则关注未丢弃元素的梯度计算。
摘要由CSDN通过智能技术生成

继续温故,CNN篇。这次重新思考的是CNN中每层的作用,以及之前没有思考过的BP中梯度更新的过程。


CNN的结构

最典型的CNN的结构是由如若干个卷积层+池化层,再接若干个(一般一到两个)全连接层组成。

总的来说,这个最典型的CNN结构,终究是起到一个分类器的作用。

卷积层做不同特征提取,采样层负责选择相应的特征,全连接层负责分类。

卷积层

卷积运算这里就不讲了,这里讲一下filter。filter对应的神经网络的概念其实是权重,filter矩阵和图像的单通道像素值进行点成,最后将多个通道的结果求sum,作为一个filter的卷积结果,这就是为什么filter的depth,可以理解为下一层中的通道数。

有几个点注意:

  1. 为什么要将不同通道的结果最后相加呢? 这里可以理解为filter对不同的颜色通道做卷积得到的是一个特征的分量,最后将所有特征分量相加才是一个完整的feature map。
  2. 如果识别一张人脸,肯定是眼睛下面是鼻子,下面是嘴巴,倒过来也是嘴巴下面是鼻子,鼻子字面是眼睛。图像是存在空间位置关系的,所以滑动窗口是从左往右,从上往下。stride会是遗失部分信息,如果保证在一个合理小的范围内,但是这个并不影响结果
  3. 为什么要padding?padding可以让我们获取图像边缘更多的信息,另外控制卷积后的feature map的size
池化层

池化层的的运作方式可以这样理解: 一个2*2的卷积核,这个卷积核不是做卷积运算,而是取最大值(平均值)。

Pooling层说到底还是一个特征选择,信息过滤的过程,也就是说我们损失了一部分信息,这是一个和计算性能的一个妥协,随着运算速度的不断提高,我这个按道理说会妥协会越来越小。现在有些网络就开始少用或者不用pooling了。

池化的常见方法分为max pooling,average pooling。

采用max pooling,最主要的作用是**提高空间不变性。**因为一个像素不管最大值上在池化框内的哪个位置,都可以取到最大值。

average pooling,就是将池化框内的值求平均,这样做的好处可以减少池化框大小带来的误差,更多的保留背景信息
而max pooling是减少卷积层权值参数的误差,更多的保留纹理信息。

全连接层(FC)

以两层全连接层为例,主要有三个问题。

  1. 最后一个池化层的结果怎么连接上FC的?
    这个问题,在Keras中的代码结构是加了一个Flatten操作(展平),比如把一个(n * w * h)的变成一个(1 * 1 * nwh)的向量结构(可以理解为3D -> 2D),(nwh)是神经元个数。

    这里也可以换种理解方式,比如说最后一层卷积可得输出为77512,FC层含4096个神经元。感觉到不对啊,77512(这个数值是编的,应该是25644)是怎么展都展平不了到4096啊。

    pooling层到FC层中间做了一个卷积,如下图所示。

    因为有4096个神经元,实际就是用一个3x3x5x4096的卷积层去卷积激活函数的输出。这些filter是训练过程中更新的。

  2. 第一个FC层的作用是什么?
    pooling到FC层,中间做的这个flatten(卷积),其实是把前面卷积提取到的抽象特征(“分布式特征表示”Distributed Feature Representation,论文里是这么说的,什么鬼其实我也不太懂),映射到标记好的样本空间的一个过渡。因为我们标记的是分类结果,而pooling输出的feature map,这中间必然有个映射关系。

  3. 第二个FC层有什么用?
    其实到这一步就可以理解为神经网络(MLP)的结构的后两层了。特征都是标记样本空间的特征,最后做一个softmax的分类就OK。

因为FC层参数特别多,占到整个CNN中参数的80%左右,所以一些网络(ResNet和GoogLeNet等)取消了全连接层。全卷积神经网络(FCN)将最后的FC层都换成用1*1的卷积核做的卷积,最后分类。


向后传播过程中的权值变化

CNN梯度下降中的求导公式太多,具体我推荐两个博客:
https://www.cnblogs.com/pinard/p/6494810.html (非常详细,一下公式就是在这篇博客里面摘出来的)
https://www.jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/ (外国小哥的推导,图文并茂)

我这里写卷积层和池化层的向前推导,因为以前没太弄明白是怎么回事,全连接层的反向求导和mlp中的一样。

卷积层的向前求导

这里是一个卷积核的求导过程

假设我们输入a是4x4的矩阵,卷积核W是3x3的矩阵,输出z是2x2的矩阵,那么反向传播的z的梯度误差δ也是2x2的矩阵。卷积过程实际上是以下的式子:
  ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) ∗ ( w 11 w 12 w 21 w 22 ) = ( z 11 z 12 z 21 z 22 ) \left( \begin{array}{ccc} a_{11}&amp;a_{12}&amp;a_{13} \\ a_{21}&amp;a_{22}&amp;a_{23}\\ a_{31}&amp;a_{32}&amp;a_{33} \end{array} \right) * \left( \begin{array}{ccc} w_{11}&amp;w_{12}\\ w_{21}&amp;w_{22} \end{array} \right) = \left( \begin{array}{ccc} z_{11}&amp;z_{12}\\ z_{21}&amp;z_{22} \end{array} \right) a11a21a31a12a22a32a13a23a33(w11w21w12w22)=(z11z21</

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值