Batch normalization(批量标准化)


[TOC]
简要概括:对每层的激活函数都进行标准化。可以对 z[l] z [ l ] 或者 a[l] a [ l ] 进行标准化,其中前者更常见。

1. Batch normalization原理

对于神经网络中的某些中间值 z[l](i),i=1,2,,m z [ l ] ( i ) , i = 1 , 2 , ⋯ , m (下面省略 l l ),进行下列的一系列运算:

μσ2z(i)normz~(i)=1mz(i)=1mz(i)μ)2=z(i)μσ2+ϵ=γz(i)norm+β(1-1) (1-1) μ = 1 m ∑ z ( i ) σ 2 = 1 m ∑ ( z ( i ) − μ ) 2 z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ z ~ ( i ) = γ z n o r m ( i ) + β

其中 γ γ β β 可以通过学习得到。

2. 在多层神经网络中的具体操作

实际操作时,对每个mini-batch进行batch-normalization。 b[l] b [ l ] 可以设置为零,因为不论它为多少,在batch-normalization时都会被减去。

z[l]z[l]normz~[l]=w[l]a[l1]=z[l]μσ2+ϵ=γz[l]norm+β[l](2-1) (2-1) z [ l ] = w [ l ] a [ l − 1 ] z n o r m [ l ] = z [ l ] − μ σ 2 + ϵ z ~ [ l ] = γ z n o r m [ l ] + β [ l ]

**
for t=1…numMiniBatches
  compute forward prop on X{t} X { t }
    in each hidden layer, use BN to replace z[l] z [ l ] with z~[l] z ~ [ l ]
  use backprop to compute dw[l],db[l],dβ[l],dγ[l] d w [ l ] , d b [ l ] , d β [ l ] , d γ [ l ]
  update parameters(梯度下降方法及其各种改进)
**

3. Batch normalization有效的原因

  1. 类似于对输入层进行标准化的作用,可以加速学习过程。
  2. 使得后面的网络层更具有鲁棒性,当前面的网络层变化时,后面的网络层的均值和方差不变。换句话讲,减少了前面层参数和后面层参数之间的耦合
  3. 有轻微的正则化效果,因为采用了mini-batch的方法,均值和方差是在mini-batch上计算的而不是整个训练集,所以均值和方差中具有噪声,导致 z~ z ~ 具有噪声。这个dropout有异曲同工之妙。

4. 测试时的处理手段

训练时,均值和方差是针对一个mini-batch来求的,但是测试的时候往往是一个一个样本进行的。
解决方法,利用指数加权平均的方法,对训练集上的各个mini-batch进行指数加权平均,用来估计测试样本的隐藏层的均值和方差

你可能感兴趣的:(理论学习,学习笔记)