批量标准化
批量标准化(batch normalaization)概念由2015年的论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出,后被广泛的应用于深度学习领域。
下面来看一下批量标准化的计算过程。
比如训练数据mini batch的大小为 m m m,某个特征 x x x的取值为 [ x 1 , x 2 , . . . , x m ] [x_1,x_2,...,x_m] [x1,x2,...,xm],需要对特征 x x x做批量标准化,如何计算呢?
我们将 x x x的标准化的输出结果记为 y = [ y 1 , y 2 , . . . , y m ] , y i = B N γ , β ( x i ) , i ∈ [ 1 , m ] y=[y_1,y_2,...,y_m],y_i=BN_{\gamma,\beta}(x_i), i\in[1,m] y=[y1,y2,...,ym],yi=BNγ,β(xi),i∈[1,m],则计算 B N γ , β BN_{\gamma,\beta} BNγ,β的过程如下:
μ
=
1
m
∑
i
=
1
m
x
i
\mu=\frac{1}{m}\sum_{i=1}^mx_i
μ=m1i=1∑mxi
σ
2
=
1
m
∑
i
=
1
m
(
x
i
−
u
)
2
\sigma^2=\frac{1}{m}\sum_{i=1}^m(x_i-u)^2
σ2=m1i=1∑m(xi−u)2
x
^
i
=
x
i
−
u
σ
2
+
ϵ
\widehat x_i=\frac{x_i-u}{\sqrt{\sigma^2+\epsilon}}
x
i=σ2+ϵxi−u
y
i
=
γ
x
i
+
β
y_i=\gamma x_i + \beta
yi=γxi+β
其中 γ , β \gamma,\beta γ,β为待训练的参数, ϵ \epsilon ϵ为超参。
本质思想
批量标准化的思想,来自于这样一个实验观察现象:当网络的输入分布符合标准分布的时候,训练会比较快的收敛。基于这样的现象,有理由可以猜想,如果网络的每一层的输入都符合标准分布,那么训练的过程应该更快。但是如果人为的改变上一层网络输出值的分布,可能会导致信息丢失,降低模型的表达能力,所以在标准化操作之后,引入的两个可学习的参数 γ , β \gamma,\beta γ,β,来学习原始分布与标准化分布间的映射关系。这样即加快的模型的训练,有不会降低模型的表达能力。