深度学习 - 2019年2月18日

批量归一化

笔记

批量归一化

【深度学习】深入理解Batch Normalization批标准化)
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 2015

让每层的输入转换为单位高斯分布(正态分布),从而消除权重相乘带来的尺度变换,可以让网络在更广泛的学习率和不同初始值下进行训练。

除了在不同维度上计算均值和方差外,还有两个参数γ和β是学习到的,用于对尺度的缩放、平移,只有在极端情况下才会学到恒等变换。

BN就是解决”Internal Covariate Shift”问题的。

在机器学习中,数据都是服从IID(Independent and Identically Distributed)假设,即独立同分布假设的。

  • “covariate shift”就是协方差偏移,意味着网络输入值X的分布老是变化的,这就不符合IID假设了,从而导致网络模型很难稳定。

  • “internal”意味着这些事情都发生在隐藏层。

BN的启发:可以理解为对深层神经网络每个隐层神经元的激活值做简化版本的白化操作。

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

BN将大部分激活值落入非线性函数的线性区内,其对应的导数远离饱和区,从而加速收敛过程。

但是如果都落入线性区,多层的线性函数相当于一层线性网络,这么做是没有意义的。这意味着网络的表达能力下降了,为了保证非线性的获得,从而需要两个参数来进行缩放平移操作。

核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢。

另外,在实际工程中,对每个mini-batch做均值、方差的计算是很浪费存储空间的,所以这里使用到由单个batch求数学期望得到的整体的均值和方差。