Batch Normalization 总结

2018-12-17  本文已影响0人  Max_7

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

上一篇下一篇

猜你喜欢

热点阅读