• 深度学习中的normalization总结(BN、LN、WN、IN、GN)


    独立同分布(iit)的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力,因此,在把数据喂给机器学习模型之前,“白化(whitening)”是一个重要的数据预处理步骤。白化一般包含两个目的:
    (1)去除特征之间的相关性 —— 独立;
    (2)使得所有特征具有相同的均值和方差 —— 同分布。
    白化最典型的方法就是PCA。
    对于神经网络的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同(但条件概率相同),而且差异会随着网络深度增大而增大,但是label不变,这就是ICS(Internal Covariate Shift),ICS会导致收敛速度下降。

    所有归一化都按照如下范式达成:
    在这里插入图片描述

    一、Batch Normalization

    在这里插入图片描述
    (1)BN的公式
    在这里插入图片描述
    批量归一化实质是在mini-batch上做normalization,且针对的是单个维度。在上图所示的公式中——

    m是mini-batch的大小,一般情况下,m的规模越大,归一化的效果越好;

    eps默认1e-5,目的是避免方差为0;

    γβ是可学习的参数,分别表示缩放和平移,输入的x则是均值为0,方差为1的标准分布,经过缩放、平移后(均值为β,方差为γ2),能够允许BN层做identity transformation(论文中的表达,实际上输入和输出不会完全一样),保证网络模型的学习能力。

    (2)在训练和推理时的区别
    在这里插入图片描述
    从上述算法可以看到,训练的时候每次迭代都要计算新的均值方差,但是推理的时候我们可能没那么多数据,这时BN用的均值和方差是固定的常量(这个常量是在模型训练时每次迭代通过移动平均法更新的全局量)。

    moving_mean = moving_mean * momentum + mean * (1 - momentum);
    moving_var = moving_var * momentum + var * (1 - momentum);
    
    • 1
    • 2

    paper采用无偏估计来表示Var[x]。见无偏估计的推导

    (3)在batch上做normalization的作用
    训练的时候为了模型稳定,需要在当前batch中维持隐藏层激活值的稳定,因此不用考虑别的数据,而且不同mini-batch间的均值和方差可能有一点差别,这个差别实际上能够增加模型鲁棒性,一定程度上减少过拟合。

    然而当mini-batch间分布差别较大时,模型的训练难度就会提升,这也就是为什么m越大越好的原因。

    针对时序模型,如RNN,BN的表现不太好。

    二、Layer Normalization

    在这里插入图片描述
    针对上述的BN的不足之处,LN提出了考虑隐藏层整层的所有维度输入。

    (1)LN针对单个训练样本进行,不依赖于其他数据,同一层的hidden units共享相同的均值和方差,因此可以避免BN中受mini-batch间数据分布差异的影响,这样LN就与batch size无关了;

    (2)在小的batch size上效果可能会比BN好,但是大的batch size的话还是BN效果好;

    (3)可以用于RNN中;
    在这里插入图片描述

    (4)LN对于一整层的训练得到同一个转换——所有的输入都在同一个区间范围内。如果不同输入特征不属于相似的类别(比如颜色和大小),那么LN的处理可能会降低模型的表达能力。

    三、Weight Normalization

    BN、LN、IN、GN都是对输入数据X的规范化,而WN提出对权重进行规范化。

    举个例子,对Alg. 2最后得到y,之后需要进行的线性变换 f ( y ) = w ∗ y f(y)=w*y f(y)=wy,其中w就是需要规范化的权重,其实本质上都是对数据的规范化。

    在这里插入图片描述

    四、Instance Normalization

    在这里插入图片描述

    BN注重对mini-batch归一化,但是在图像风格化任务中,生成的风格结果主要依赖于某个图像实例,所以对整个batch数据进行归一化是不合适的,因而提出了只对HW维度进行归一化。(GAN中表现很好)

    IN和LN非常相似,但有一些细微的差异。IN应用于某个如RGB图像的每个通道数据,但LN通常应用于整个样本,且一般应用于NLP任务。此外,LayerNorm会进行affine变换(γ、β),而IN通常不进行该变换。

    五、Group Normalization

    在这里插入图片描述
    GN先对通道进行分组,每个组内的所有C、W、H维度求均值和方差进行规范化,与batch size无关。

    不能简单的将GN应用到之前使用BN的模型中。(许多SOTA的模型和BN联系紧密,需要重新设计模型或寻找更适合的超参数)

    六、参考

    https://zhuanlan.zhihu.com/p/115949091
    https://zhuanlan.zhihu.com/p/33173246
    https://arxiv.org/pdf/1502.03167.pdf
    https://arxiv.org/pdf/1607.06450v1.pdf
    https://arxiv.org/pdf/1803.08494.pdf

  • 相关阅读:
    vulnhub——narak
    加密市场进入寒冬,是“天灾”还是“人祸”?
    大咖说*计算讲谈社|如何提出关键问题?
    安装gstreamer开发依赖库到项目sysroot目录
    基于java web的学生考勤带请假管理系统——计算机毕业设计
    【C语言】进阶——程序编译
    关于虚数与复数
    论文阅读笔记:DepGraph: Towards Any Structural Pruning
    Oracle安全基线检查
    Python 深度学习入门之CNN
  • 原文地址:https://blog.csdn.net/qq_43680965/article/details/126486426