图解——深度学习中数据归一化(BN,LN,IN,SN)

目录

    • 简介
    • 计算流程
    • 为什么要对数据归一化
    • Batch Normalization
    • Layer Normalizaiton
    • Instance Normalization
    • Group Normalization
    • Switchable Normalization

简介

  1. BN(Batch Normalization)于2015年由 Google 提出,开创了Normalization 先河;2016年出了LN(layer normalization)和IN(Instance Normalization);2018年提出了GN(Group normalization)和SN(Switchable Normalization)。
  2. 独立同分布(i.i.d)
    机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布这样才能保证通过训练数据获得的模型,能够在测试集获得好的效果。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。(独立同分布的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力,这已经是一个共识。)
  3. Internal Covariate Shift–内部协变量转移
    如果ML系统实例集合中的输入值X的分布老是变,这不符合IID假设,网络模型很难稳定地学规律,这不得引入迁移学习才能搞定吗,我们的ML系统还得去学习怎么迎合这种分布变化啊。对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”。Internal指的是深层网络的隐层,是发生在网络内部的事情,而不是covariate shift问题只发生在输入层。这也是我们要解决的问题。
    每个神经元的输入数据不再是“独立同分布”的后果:
    1. 各层参数需要不断适应新的输入数据分布,降低学习速度。(学习率不能大,训练速度缓慢)
    2. 深层输入的变化可能趋向于变大或者变小,导致浅层落入饱和区,使得学习过早停止。(容易梯度饱和、消失。)
    3. 每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能谨慎地选择。(调参困难)

计算流程

BN、LN、IN和GN这四个归一化的计算流程几乎是一样的,可以分为四步:

  1. 计算出均值
  2. 计算出方差
  3. 归一化处理到均值为0,方差为1
  4. 变化重构(缩放和平移变量),恢复出这一层网络所要学到的分布
    其中e是一个很小的正值,比如10的负8次方。加入缩放和平移变量的原因是:保证每一次数据经过归一化后还保 留原有学习来的特征,同时又能完成归一化操作,加速训练。
    这两个参数是用来学习的参数。因此要经行参数初始化nn.init.constant_(m.weight,0.0)
    图解——深度学习中数据归一化(BN,LN,IN,SN)_第1张图片

为什么要对数据归一化

激活输入值定义:就是relu层之前的那个输入值。也就是说数据经过归一化后,才能给relu,如下图(每个激活层前都要经过BN归一化
图解——深度学习中数据归一化(BN,LN,IN,SN)_第2张图片

  1. 随着网络深度加深或者在训练过程中,激活输入值的分布逐渐发生偏移或者变动,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,在极大或极小的值处函数的导数接近0),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因。而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个激活输入值的分布强行拉回到均值为0方差为1的标准正态分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域(例如sigmoid函数的中间的部分),这样输入的小变化就会导致损失函数较大的变化。
    图解——深度学习中数据归一化(BN,LN,IN,SN)_第3张图片

Batch Normalization

  1. 均值方差的计算
    图解——深度学习中数据归一化(BN,LN,IN,SN)_第4张图片

  2. Inference阶段均值方差的求取
    对于train阶段,一个min_batch=32, 32张图片用来求均值方差,但是Inference阶段一次查询一张图片的话便没有了min_batch。可以用从所有train实例中获得的统计量的平均值来代替inference阶段的均值和方差统计量
    在这里插入图片描述

  3. BatchNorm的优势与局限
    优点

    • 极大提升了训练速度,收敛过程大大加快;
    • 还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;
    • 另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等;

    缺点

    • 由于BN与mini-batch的数据分布紧密相关,故而mini-batch的数据分布需要与总体的数据分布近似相等。因此BN适用于batch size较大且各mini-batch分布相近似的场景下(训练前需进行充分的shuffle)。BN计算过程需要保存某一层神经网络batch的均值和方差等统计信息,适合定长网络结构DNN CNN,不适用动态网络结构RNN。

Layer Normalizaiton

BN特别依赖batch Size,所以接下来提出Layer Normalizaiton,一张图片计算一组均值和方差,使得LN不受batch size的影响。同时,LN可以很好地用到序列型网络RNN中。
图解——深度学习中数据归一化(BN,LN,IN,SN)_第5张图片

Instance Normalization

图解——深度学习中数据归一化(BN,LN,IN,SN)_第6张图片
图像风格化中,生成结果主要依赖于某个图像的实例。所以适合对每个feature map特征图(HW)做归一化操作,保证各图像实例间的独立。IN成功完成样式转换和类似任务的原因是,这些任务试图在保留内容的同时改变图像外观,并且IN允许从内容中过滤出特定于实例的对比信息。

Group Normalization

BN所遇到的问题(batch size太大的话会out of memory)。GN对系统的优化程度完全不依赖Batch size有多大。Group Normalization的error不受batchsize影响,但是对于网络优化性能的提升是否好过batch norm,自己还没用过。
图解——深度学习中数据归一化(BN,LN,IN,SN)_第7张图片

图解——深度学习中数据归一化(BN,LN,IN,SN)_第8张图片

Switchable Normalization

SN自适配归一化方法,将 BN、LN、IN 结合,赋予不同权重,让网络自己去学习归一化层应该使用什么方法
图解——深度学习中数据归一化(BN,LN,IN,SN)_第9张图片

References
https://blog.csdn.net/u013289254/article/details/99690730
https://www.cnblogs.com/guoyaohua/p/8724433.html
https://blog.csdn.net/ft_sunshine/article/details/99203548
https://blog.csdn.net/qq_24153697/article/details/79880202

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