魏老师学生——Cecil:学习卷积神经网络CNN之旅

  • 池化层(存在于连续的卷积层中间)
  • 压缩减少特征数量的两种策略
  • 全连接层
  • BN层
  • BN训练步骤
  • BN层优缺点
  • 实例化
  • 总结


池化层(存在于连续的卷积层中间)

  1. 主要功能:通过逐步减小表征的空间尺寸来减小参数量和网络中的计算,提取重要特征,删除冗余的噪音特征信息。
  2. 池化层在每个特征图上独立操作。
  3. 作用:压缩数据和参数量,减小过拟合。

压缩减少特征数量的两种策略

Max Pooling:最大池化,较普遍。

Average Pooling:平均池化。

什么是FNN神经网络 神经网络fc层_方差

全连接层

  1. FC层中的神经元连接之前层次的所有激活输出。
  2. 两层之间所有神经元都有权重连接。
  3. CNN中,FC层只出现在尾部。
  4. CNN结构:
    ——INPUT
    ——[[CONV - > RELU] * N - > POOL? ] * M
    ——[FC - > RELU] * K
    ——FC(Full Connection Layer)

BN层

  1. 训练神经网络时,一般将输入样本的特征进行标准化处理,将数据变为均值为0、标准差为1的高斯分布,或者范围在0附近的分布。
  2. 若数据不进行预处理,样本特征分布过于分散,导致学习速度慢或者不能学习。
  3. 较好的数据分布利于加快神经网络训练速度,得到更好效果。
  4. 由于训练模型时模型参数更新,除了输入层外的每一层输入都在不断变化。所以在训练中间层时,称数据分布的改变为Internal Covariate Shift。为解决训练过程中间层数据改变的状况,提出BN层。
  5. BN层期望输出结果服从高斯分布,所以修正了神经元的输出。文章中建议放在卷积层 / FC层后、激励层 / 池化层前,实际应用一般放激励层后。

BN训练步骤

  1. 求解每个训练批次数据的均值。
  2. 求解每个训练批次数据的方差。
  3. 使用求得均值和方差对该批次数据做标准化处理,获得0-1分布。
  4. 尺度变换和偏移:使用标准化之后的x乘γ(尺度因子)调整数值,再加β(平移因子)增加偏移从而得到输出值y。
    引入尺度因子和平移因子解决标准化后x基本被限制在正态分布下,导致网络表达能力下降问题。
  5. 训练时采用一个批次中的样本的均值和标准差进行BN操作。但使用训练阶段所有批次记录的均值和方差的期望值作为预测阶段的BN均值和方差。
  6. 实际应用中,采用类似momentum动量法中使用的滑动平均进行计算测试时的均值和方差。

BN层优缺点

优点:

  1. 梯度传递计算更顺畅,较少出现神经元饱和。
  2. 设置较大的学习率加快训练速度。
  3. 对模型参数的初始化方式和取值不敏感,稳固网络学习,提高模型训练精度。
  4. 具有一定正则效果。

缺点:

  1. 在网络层次深的模型中会减缓训练速度。
  2. 训练批次建议16以上。

实例化

什么是FNN神经网络 神经网络fc层_池化_02


第一个神经元 均值 1.65 ,方差 0.44 ,ε 1e-8。

什么是FNN神经网络 神经网络fc层_方差_03


第一层的输入 每个特征的分布 均值0、标准差1.

总结

  1. CNN特征对应到一个feature map特征图上。所以,CNN中做BN不是以神经元为单位,以feature map特征图为单位。
  2. 针对一个批次中的一个channel的所有feature map计算一对参数γ、β,从而减小模型的参数数目。
  3. 已知:batch_size=8,feature map大小=32×32,feature map数量=10,得到:传统BN参数量20480,CNN中BN参数量20.