zoukankan      html  css  js  c++  java
  • Batch Normalization:批量归一化

    1. 批量归一化(Batch Normalization):为了让数据在训练过程中保持同一分布,在每一个隐藏层进行批量归一化。对于每一个batch,计算该batch的均值与方差,在将线性计算结果送入激活函数之前,先对计算结果进行批量归一化处理,即减均值、除标准差,保证计算结果符合均值为0,方差为1的标准正态分布,然后再将计算结果作为激活函数的输入值进行计算。

    批量归一化的本质:对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的标准正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题

    公式:

    均值与方差:是指在训练过程中,每一个批次(batch)的对应位置的均值和方差。训练过程中要分批次训练,划分batch和batch_size。

    在训练过程中,计算一个批次中所有图片的每一个位置的元素的均值与方差,一张图片有多少个元素,就有多少个均值与方差。最后得到的均值和方差是用向量的形式表现的

    例:一个batch有3个输入,每个输入是一个长度为4的向量

    2. 批量归一化的运行:(训练过程中)

    对于CNN,一般运算过程是:卷积 - 池化 - 批量归一化 - 激活函数

    ①输入:经过线性运算得到的数据,对于全连接层一般是W_i * x_i + b_i;对于卷积层一般是卷积+池化操作

    ②计算:减去该批次的均值除以该批次的标准差,学习两个调节参数:scale(缩放)、shift(平移)

    ③输出:将计算结果放入激活函数中进行计算

    BN一般放在全连接或卷积池化之后,激活函数之前:

    计算该批次的均值、方差,批量归一化,学习scale、shift,必要时可进行缩放和平移

     

    3. 为什么要进行批量归一化

    ①基于IID(独立同分布)假设,训练数据与测试数据满足同一分布。训练数据和测试数据满足同一分布,那么基于训练数据学习到的模型才可以更好的适用于测试数据,而批量归一化可以使得神经网络训练过程中的每一次输入服从同一分布

    (1)covariate shift(网络协变量平移):对于输入层,如果输入值X的分布总是变化,不服从同一分布,就不符合IID假设,那么网络模型很难稳定地学规律

    (2)Internal Covariate Shift:对于隐藏层,在训练过程中,隐藏层的输入分布总是变化,不服从同一分布,每一个隐藏层都面临着covariate shift的问题。对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,很难保证每一层的输入都服从同一分布,所以每个隐藏层都会面临covariate shift的问题

    (3)Whiten(白化):对输入数据分布变换到0均值,单位方差的正态分布

    (4)为了避免Internal Covariate Shift问题,让每个隐层节点的激活输入满足同一分布,引入了批量归一化。批量归一化的思想来源于Whiten(白化),之前的研究表明如果在图像处理中对输入图像进行白化(Whiten)操作的话,神经网络的收敛速度就会变快。图像是深度神经网络的输入层,做白化能加快收敛,那么其实对于深度网络来说,其中某个隐层的神经元是下一层的输入,意思是其实深度神经网络的每一个隐层都是输入层,不过是相对下一层来说而已,那么能不能对每个隐层都做白化呢?这就是启发BN产生的原初想法,而BN也确实就是这么做的,可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作

    批量归一化使得将激活函数的输入值满足标准正态分布,使得激活函数输入值落在激活函数的敏感区域,避免梯度消失

    (1)神经网络的激活输入值(Wx+b)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动。整体分布逐渐往非线性函数的取值区间的上下限两端靠近时,训练收敛就会变慢,这导致反向传播时低层神经网络的梯度消失,这就是训练深层神经网络收敛越来越慢的本质原因。而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域。对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的标准正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。

    4. 测试和训练中的均值、方差的计算方法不一样

    ①训练过程:训练一般的分批次训练,每一批次依次计算该bitch的均值和方差

    ②测试数据:测试过程的BN均值是训练过程的所有批次的均值的算数平均值;测试过程的BN标准差是每个batch的标准差的无偏估计量

    5. 批量归一化的好处

    参考:https://www.cnblogs.com/guoyaohua/p/8724433.html    (写的特别好^)

  • 相关阅读:
    JavaScript的封装
    JavaScript接口
    JavaScript继承与聚合
    JavaScript原型模式(prototype)
    Maven学习总结(三)——使用Maven构建项目
    Maven学习总结(二)——Maven项目构建过程练习
    MyEclipse使用总结——MyEclipse10安装SVN插件
    Maven学习总结(一)——Maven入门
    使用Maven搭建Struts2框架的开发环境
    使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
  • 原文地址:https://www.cnblogs.com/shiliuxinya/p/12246162.html
Copyright © 2011-2022 走看看