3.4 归一化网络的激活函数( Normalizing activations in a network)

在神经网络中,第ll层隐藏层的输入就是第l1l-1层隐藏层的输出A[l1]A^{[l-1]}。对A[l1]A^{[l-1]}进行标准化处理,从原理上来说可以提高W[l]W^{[l]}b[l]b^{[l]}的训练速度和准确度。这种对各隐藏层的标准化处理就是Batch Normalization。一般是对Z[l1]Z^{[l-1]}进行标准化处理而不是A[l1]A^{[l-1]}

Batch Normalization对第ll层隐藏层的输入Z[l1]Z^{[l-1]}做如下标准化处理,忽略上标[l1][l-1]

μ=1miz(i)\mu=\frac1m\sum_iz^{(i)}
σ2=1mi(ziμ)2\sigma^2=\frac1m\sum_i(z_i-\mu)^2
znorm(i)=z(i)μσ2+εz^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\varepsilon}}

m是单个mini-batch包含样本个数,ε是为了防止分母为零,可取值10810^{-8}。使得该隐藏层的所有输入z(i)z^{(i)}均值为0,方差为1

大部分情况下并不希望所有的z(i)z^{(i)}均值都为0,方差都为1,也不太合理。通常需要对z(i)z^{(i)}进行进一步处理:

z~(i)=γznorm(i)+β\tilde z^{(i)}=\gamma\cdot z^{(i)}_{norm}+\beta

γ\gammaβ\beta是learnable parameters,可以通过梯度下降等算法求得。γ\gammaβ\beta是让z~(i)\tilde z^{(i)}的均值和方差为任意值,只需调整其值。如:

γ=σ2+ε,  β=u\gamma=\sqrt{\sigma^2+\varepsilon},\ \ \beta=u

z~(i)=z(i)\tilde z^{(i)}=z^{(i)},即identity function。设置γ\gammaβ\beta为不同的值,可以得到任意的均值和方差

通过Batch Normalization,对隐藏层的各个z[l](i)z^{[l](i)}进行标准化处理,得到z~[l](i)\tilde z^{[l](i)},替代z[l](i)z^{[l](i)}

输入的标准化处理Normalizing inputs和隐藏层的标准化处理Batch Normalization是有区别的。Normalizing inputs使所有输入的均值为0,方差为1。而Batch Normalization可使各隐藏层输入的均值和方差为任意值。从激活函数的角度来说,如果各隐藏层的输入均值在靠近0的区域即处于激活函数的线性区域,这样不利于训练好的非线性神经网络,得到的模型效果也不会太好

Last updated