<深度学习基础> Batch Normalization

Batch Normalization批归一化

BN优点

  1. 减少了人为选择参数。在某些情况下可以取消dropout和L2正则项参数,或者采取更小的L2正则项约束参数;
  2. 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;
  3. 破坏原来的数据分布,一定程度上缓解过拟合;
  4. 减少梯度消失,加快收敛速度,提高训练精度。

步骤

下面给出BN 算法在训练时的过程
输入:上一层输出结果 X = x 1 , x 2 , . . . , x m X={x_1,x_2,...,x_m} X=x1,x2,...,xm,学习参数 γ , β gamma,beta γ,β
算法流程:
(1)计算上一层输出数据的均值
μ β = 1 m ∑ i = 1 m x i mu_{beta}=frac{1}{m} sum_{i=1}^m x_i μβ=m1i=1mxi
其中, m m m 是此次训练样本batch的大小。
(2)计算上一层输出数据的标准差
σ β 2 = 1 m ∑ i = 1 m ( x i − μ β ) 2 sigma_{beta}^2=frac{1}{m} sum_{i=1}^m (x_i-mu_{beta})^2 σβ2=m1i=1m(xiμβ)2
(3)归一化处理,得到
x ˆ i = x i + μ β σ β 2 + ϵ ^x_i=frac{x_i+mu_{beta}}{sqrt{sigma_{beta}^2}+epsilon} xˆi=σβ2 +ϵxi+μβ
其中 ϵ epsilon ϵ是为了避免分母为0 而加进去的接近于0 的很小值;
(4)重构,对经过上面归一化处理得到的数据进行重构,得到
y i = γ x ˆ i + β y_i=gamma ^x_i + beta yi=γxˆi+β
其中, γ , β gamma,beta γ,β为可学习参数。

注:上述是BN训练时的过程,但是当在推理时,往往只是输入一个样本,没有所谓的均值 μ β mu_{beta} μβ和标准差 σ β 2 sigma_{beta}^2 σβ2。此时,均值 μ β mu_{beta} μβ是计算所有batch的 μ β mu_{beta} μβ值的平均值得到,标准差 σ β 2 sigma_{beta}^2 σβ2采用每个batch的 σ β 2 sigma_{beta}^2 σβ2的无偏估计得到。