特征归一化(BN、LN、IN 、GN)详解

目录

      • 特征归一化
      • 一、批量归一化(Batch Normalization,BN)
      • 二、层归一化(Layer Normalization,LN)
      • 三、实例归一化(Instance Normalization,IN)
      • 四、组归一化(Group Normalization, GN)

特征归一化

  1. 为什么需要特征归一化?
    1. 数据预处理的方式通常会对最终结果产生巨大影响。
    2. 对于典型的MLP或CNN,训练时,中间层中的变量可能具有更广的变化范围,很容易导致梯度爆炸。
    3. 更深的网络很复杂,容易过拟合。
  2. 特征归一化的优势?
    • 改良数据分布,减少梯度弥散。
    • 标准化输入数据可以使神经网络模型收敛的速度更快,并且解决梯度爆炸问题。
  3. 特征归一化的公式:
    在这里插入图片描述
  • 其中:
    • X i ^ \hat{X_i} Xi^:特征归一化的一般公式(特征-均值)/标准差
    • λ 、 β \lambda、\beta λβ:可主观学习的拉伸参数(scale parameter)与偏移参数(shift parameter)。
      特征归一化(BN、LN、IN 、GN)详解_第1张图片
  • 其中:
    • x i x_i xi:输入特征,为4D张量(N, C, H, W)
    • μ i \mu_i μi:均值
    • σ i \sigma_i σi:标准差

特征归一化(BN、LN、IN 、GN)详解_第2张图片

  • 其中:
    • ϵ \epsilon ϵ:较小的常量(>0),确保标准差做分母时,不为0。
    • S i S_i Si:计算均值和标准差的像素集。(不同的特征归一化方法的主要区别
    • m m m:像素集的大小。
  1. 根据像素集 S i S_i Si的不同,常见的特征归一化技术有以下四种
    特征归一化(BN、LN、IN 、GN)详解_第3张图片

一、批量归一化(Batch Normalization,BN)

  1. 像素集 S i S_i Si的表达式为:
    S i = { k   ∣   k C = i C } S_i = \{k\ |\ k_C = i_C\} Si={k  kC=iC}
  • 其中:
    • k c 、 i c k_c、i_c kcic:i和k沿C轴的子索引,即共享相同通道索引的像素被一起归一化
    • 即,对于每个通道©,BN沿(N,H,W)轴计算 μ \mu μ(均值)和 σ \sigma σ(标准差)。
  1. BN
    • 常用于卷积层之后,(特别是)激活函数之前,(目的是,对输入激活函数之前的数据做“修剪”,减少梯度弥散。)
    • BN通过(小)批次内计算的均值和方差对特征进行归一化。
    • 即,取不同样本的同一个通道的特征做归一化, 逐个特征做归一化
  2. BN的特点
    • 可以简化优化并使非常深的网络能够收敛,减少梯度爆炸,提升模型的整体精度。
    • 批量统计的随机不确定性也可以作为有利于泛化的正则化优化器。
  3. BN的缺点
    • BN特别依赖Batch Size(最严重的缺点):减少batch_size的大小,会对估计的批量统计数据产生巨大影响。
      • 对于目标检测,语义分割,视频场景、超分辨率等,输入图像的分辨率或尺寸比较大,而限于GPU显卡的显存限制,导致无法设置较大的 Batch Size,因此使用BN的效果非常不理想。
    • BN不太适用于处理序列化数据的网络模型:如RNN、LSTM等,当序列样本的长度不同时。
    • BN不适用于训练集与测试集较大的数据分布差异
      • BN只在训练时候用,BN处理训练集的时候,采用的是整个训练集的计算出来的均值和方差;
      • 模型推理的时候,并不会用到训练集计算出来的均值和方差,因为推理的时候,输入并不是和训练一样的批量输入。
      • 所以测试和训练的数据分布如果存在差异,那么就会导致训练和测试之间存在不一致现象。
        特征归一化(BN、LN、IN 、GN)详解_第4张图片

二、层归一化(Layer Normalization,LN)

  1. 像素集 S i S_i Si的表达式为:
    S i = { k   ∣   k N = i N } S_i = \{k\ | \ k_N = i_N \} Si={k  kN=iN}
  2. LN
    • LN计算每个样本沿(C,H,W)轴的 μ \mu μ σ \sigma σ
    • 即取同一个样本的所有通道做归一化,逐个样本做归一化
  3. LN的特点:
    • LN不受batch_size的影响
    • 常用于序列模型,如RNN、LSTM等,当序列样本的长度不同时。
    • LN在训练和推理的过程中都可以用,因为LN是对每个样本做归一化
  4. Weight Normalization:
    • WN和LN有着同样的特点。
    • WN是在训练过程中,对网络参数进行标准化。这也是一个很神奇的操作。
    • 效果表现上,是被LN完虐,还不足以成为主流的标准化方法。
    • LN也主要是跟WN进行对比,而没有与BN直接比较。
    • LN的效果虽然没有BN的好(CNN),但是LN的应用范围更广泛(RNN、LSTM),不受batch_size的限制。

三、实例归一化(Instance Normalization,IN)

  1. 像素集 S i S_i Si的表达式为:
    S i = { k   ∣   k N = i N , k C = i c } S_i = \{k\ | \ k_N = i_N, k_C = ic\} Si={k  kN=iN,kC=ic}
  2. IN
    • 意味着IN计算每个样本和每个通道沿(H,W)轴的 μ \mu μ σ \sigma σ
    • 即对每个像素点做归一化,一共要执行N×C次
  3. IN的特点
    • IN与BN类似,但近针对每个样本的每个特征。
    • IN适合用于针对像素点操作的生成模型,如图片风格迁移。
  4. IN的缺点
    • 不适合对整个batch进行归一化操作的任务,且计算量较大。

四、组归一化(Group Normalization, GN)

  1. 像素集 S i S_i Si的表达式为:
    S i = { k   ∣   k N = i N , ⌊ k C C / G ⌋ = ⌊ i C C / G ⌋ } S_i = \{k \ |\ k_N = i_N, \lfloor\frac{k_C}{C/G}\rfloor = \lfloor \frac{i_C}{C/G} \rfloor\} Si={k  kN=iN,C/GkC=C/GiC⌋}
  • 其中:
    • G:组的数量,是一个预定义的超参数(默认G=32)
    • C/G:每组的通道数
  1. GN
    • 意味着GN沿(H,W)轴和一组C/G通道数,来计算 μ \mu μ σ \sigma σ
    • 同一组中的像素通过相同的均值和标准差一起归一化
  • 特殊地:
    • G=1时,每组含有所有的通道数,GN <==> LN
      • LN假设层中的所有通道都做出“相似的贡献”这对于卷积可能不太有效
    • G=C时,每组的通道数为1,GN <==>IN
      • IN只能依靠空间维度来计算均值和方差,错过了利用通道依赖性的机会
  1. GN的优点:
    • 使得网络模型的精度不完全由较大的batch_size,较高的算力支撑,(深度学习也不一定是有钱人的游戏但是时间就是金钱,还是算力越高越好
    • 首先解决了BN对于batch_size较小的劣势。
    • GN的计算不依赖batch_size因此对于高精度图片小BatchSize的情况也是非常稳定的。

你可能感兴趣的:(深度学习Trick,深度学习,学习,卷积神经网络)