Hello,David!

There is geometry in the humming of the strings, there is music in the spacing of the spheres.

0%

Batch Normalization

Batch Norm

1.Batch Normalization是什么

Batch Normalization是为了解决深度学习网络中Internal Covariate Shift问题而提出的对一个batch的数据进行Normalization的方法,优点是可以使用更大的学习率、更快的的训练速度、更不依赖于模型的初始化、对模型进行正则化(类似dropout的一部分效果)。

有研究表明对数据进行白化(whiten)操作可以加速模型的收敛,白化是将输入数据分布转换到均值为0、方差为1的正态分布。对于深度网络,每一层的输出都是下一层的输入。所以如果对每一层的输出进行白化操作可以加速收敛,并且每一层的输入的分布稳定。

2.什么是Internal Covariate Shift

Internal Covariate Shift:深度神经网络有多层结构,每一层的输出是下一层的输入,所以每一层网络学习的是上一层输出的分布。而每一层参数的更新又会影响该层输出的分布,导致下一层的输入分布变化,使得学习难度加大。并且随着模型深度的增加,学习的难度也会增加。

3.Batch Normalization流程

首先,Batch norm位于X=WU+B激活值获得之后,非线性函数变换之前

如果batch size为m,则在前向传播时每个节点都有m个输出,对每个节点的m个输出进行归一化。实现可以分为两步:

1.Standardization:对m个$x$进行标准化得到zero mean unit variance的 $\hat{x}$
2.scale and shift:对$\hat{x}$进行缩放和平移,得到最终的分布$y$,具有新的均值$\beta$和方差$\gamma$

Input:Values of x over a mini-batch:$\mathcal{B}=\left{x_{1 \ldots m}\right}$;
Parameters to be learned: $\gamma, \beta$

Output:$\left{yi=\mathrm{BN}{\gamma, \beta}\left(x_i\right)\right}$

mini-batch mean:
$\mu{\mathcal{B}} \leftarrow \frac{1}{m} \sum{i=1}^m x_i$

mini-batch variance:
$\sigma{\mathcal{B}}^2 \leftarrow \frac{1}{m} \sum{i=1}^m\left(xi-\mu{\mathcal{B}}\right)^2$

normalize:
$\hat{x}i \leftarrow \frac{x_i-\mu{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^2+\epsilon}}$

scale and shift:
$yi \leftarrow \gamma \hat{x}_i+\beta \equiv \mathrm{BN}{\gamma, \beta}\left(x_i\right)$

Batch Normalizing Transform:

总体可以写为如下公式,所以,无论$x_i$原本的均值和方差是多少,通过Batch Norm后其均值和方差分别变为待学习的$\beta$和$\gamma$。
$y_i^{(b)}=B N\left(x_i\right)^{(b)}=\gamma \cdot\left(\frac{x_i^{(b)}-\mu\left(x_i\right)}{\sqrt{\sigma\left(x_i\right)^2+\epsilon}}\right)+\beta$

BN在训练和测试的使用

这里没细看,感觉暂时不重要

4.Batch Normalization的作用

可以使用更大的学习率,训练过程更加稳定,极大提高了训练速度。
可以将bias置为0,因为Batch Normalization的Standardization过程会移除直流分量,所以不再需要bias。
对权重初始化不再敏感,通常权重采样自0均值某方差的高斯分布,以往对高斯分布的方差设置十分重要,有了Batch Normalization后,对与同一个输出节点相连的权重进行放缩,其标准差$\sigma$也会放缩同样的倍数,相除抵消。
对权重的尺度不再敏感,理由同上,尺度统一由$\gamma$参数控制,在训练中决定。
深层网络可以使用sigmoid和tanh了,理由同上,BN抑制了梯度消失。
Batch Normalization具有某种正则作用,不需要太依赖dropout,减少过拟合。

Reference
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift