CNN前向、反向传播及常用结构

CNN伟大之处在于通过感受野和权值共享减少了神经网络需要训练的参数的个数

图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。
feature map
特征映射,是输入图像和卷积核卷积后生成的图像特征。每个feature map通过1个卷积核提取输入的1个特征。我们需要多个卷积核来提取输入的多个特征。边长的计算公式是:
output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1

CNN的核心思想:将局部感受野、权值共享以及下采样这3种结构思想结合起来获得了某种程度的位移、尺度、形变不变性

1.结构

  • 若干卷积层(+RELU激活函数)
  • 若干池化层(无激活函数)
  • 全连接层(+sigmoid/tanh激活函数,最后一层是softmax输出层)

2.前向传播算法

在这里插入图片描述

3.反向传播

在这里插入图片描述

4.常用CNN结构

4.1 CNN演化历史图

在这里插入图片描述
卷积层每层的通道数是人工设置,比如64,128,256等。

4.2 LeNet-5(1998)

最早的CNN,用于识别邮编,结构为:
CONV-POOL-CONV-POOL-CONV-FC

  • 卷积层5*5,步长1
  • 池化层(MAX)2*2,步长1

4.3 AlexNet(2012)

突破点:

  • 大数据:李飞飞团队ImageNet;
  • GPU:高度并行
  • 防止梯度消失:ReLU非线性激活函数
  • 降低过拟合:数据增强、Dropout
  • 网络加深:5个卷积层,3个全连接层
    在这里插入图片描述

4.4 VGGNet(2014)

VGG一共有6种不同的网络结构,但是每种结构都有含有5组卷积,每组卷积都使用3x3的卷积核,每组卷积后进行一个2x2最大池化,然后是3个全连接层。主要参数来自全连接层。

  • VGG16包含了16个隐藏层(13个卷积层和3个全连接层),下图D列

  • VGG19包含了19个隐藏层(16个卷积层和3个全连接层),下图E列

VGG16/19相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5),在保证具有相同感知野的条件下,提升了网络的深度,且减少参数数量

  • 连续使用两个3x3的卷积核的感受野相当于5x5,
  • 连续使用三个3x3的卷积核的感受野相当于7x7。

使用多个3x3的卷积核的作用:

  • 使用了多次非线性函数而非1次,增加了函数的判别能力。
  • 减少了参数的数量

使用1x1卷积核的作用:
引入了非线性激活函数,增加决策函数的非线性。

在这里插入图片描述

VGG优点

  • 结构简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2)。
  • 几个小滤波器(3x3)卷积层的组合比一个大滤波器(5x5或7x7)卷积层好:
  • 验证了通过不断加深网络结构可以提升性能。

VGG缺点

耗费更多计算资源,并且使用了更多的参数(来自全连接层),导致更多的内存占用(140M)。

4.5 GoogleNet(2014)

  • 用更多的卷积,更深的层次,得到更好的结构。
  • 采用了模块化的结构,方便增添和修改。
  • 网络最后采用了global average pooling(GAP)来代替全连接层
    (1)全连接层使feature map的维度减少,进而输入到softmax,但是由于参数量大造成计算量大且容易过拟合。
    (2)GAP的思路是将上述两个过程合二为一,剔除了全连接层黑箱子操作的特征,直接赋予了每个channel实际的类别意义。
    (3)GAP的意义是对整个网络从结构上做正则化防止过拟合。但是可能会造成收敛速度减慢。
  • 核心结构: Inception
    (1)既达到稀疏的减少参数的效果(将自然全连接变成稀疏连接)
    (2)又能利用硬件中密集矩阵优化的优势(将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能)
    在这里插入图片描述

4.6 ResNet(2015)

  • 网络层数:50-200层
  • 提出本质:解决层次比较深时无法训练的问题
  • 特殊之处:设计了“bottleneck”,相当于在网络中增加了直连通道,使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x)-x,其中H(X)是某一层原始的期望映射输出,x是输入。
  • 残差模块:在ResNet网络结构中会用到两种残差模块,
    (1)以两个3x3的卷积网络串接在一起作为一个残差模块
    (2)以1x1、3x3、1x1的3个卷积网络串接在一起作为一个残差模块。

猜你喜欢

转载自blog.csdn.net/weixin_38493025/article/details/84230716