美文网首页
Batch Normalization 总结

Batch Normalization 总结

作者: Max_7 | 来源:发表于2018-12-17 09:45 被阅读0次

    Batch Normalization 是近两年兴起的深度学习中的一种处理技巧。使用BN可以使模型收敛更快,加速训练。同时降低了网络对于参数的敏感程度,减少了梯度消失的情况发生。
    关于BN的学习主要来源于论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》

    概述

    当前神经网络的训练有一个问题,就是训练过程很慢,需要花费大量的时间收敛。这个现象通常由两个原因造成,一个是因为初始的learning rate比较低,另一个是网络对于参数的初始化非常敏感。
    论文中作者引入了一个BN层,对于每一个mini-batch,将其放入BN层后再进入激活函数。实验证明,这个BN层可以加速模型训练,同时训练效果非常好。

    Internal Covariate Shift

    在机器学习理论中,存在一个独立同分布的假设。假设训练数据与测试数据是满足相同分布的。但是在实际中,可能会出现两者并不服从完全相同的分布。这种现象就是covariate shift。Internal Covariate shift 可以理解为神经网络中隐层中存在的分布不相同情况。
    这种现象会导致不少问题。
    一,因为每层的分布都不同,所以每层的参数需要适应新的输入分布,会造成训练速度下降。
    二,输入的变化可能会趋于变大或者变小,从而使输入落入激活函数的饱和区,使得学习停止。
    在深度学习模型中,
    BN的作用就是通过BN处理之后的隐层的输入,能够服从相同的分布。从而降低了模型的 internal covariate shift。

    Batch Normalization

    BN的处理思路是 对于每一个进入激活函数的输入,在其进入激活函数前,先进行BN处理。算法如下图所示。对于每一个作为输入的mini-batch,分别计算其均值与方差。normalize之后,再通过两个参数进行调整。


    从算法中可以看出,数据进行了两次的平移和缩放。第一次平移和缩放得到了normalize的值,均值为0,方差为1。第二次的平移和缩放用了
    因为

    分析上图,初始输入的分布服从均匀分布,可以看出在接收输入时,无BN的模型的输入刚好满足这个分布,但是有BN的模型已经将均匀分布的数据做了标准化处理。可以看出在没有BN的情况下,数据很快就到了激活函数(sigmoid)的饱和区域。但是经过BN处理后,数据中很大一部分处在里激活函数的非饱和区域。
    很明显,经过BN处理后的网络收敛的更快。下图显示了两者的loss的变化。


    具体的代码链接

    参考文献

    [1]《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》
    [2]《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》阅读笔记与实现
    [3]Batch Normalization 批标准化
    [4]Batch Normalization导读
    [5]深度学习中的Normalization模型
    [6]详解深度学习中的Normalization,BN/LN/WN

    相关文章

      网友评论

          本文标题:Batch Normalization 总结

          本文链接:https://www.haomeiwen.com/subject/vvjicqtx.html