本文已参与「新人创作礼」活动,一起开启创作之路。
简要概括:对每层的激活函数都进行标准化。可以对z[l]z^{[l]}或者a[l]a^{[l]}进行标准化,测试其中前者更常见。
1. Batch normalization原理
对于神经网络中神经网络的基本原理的某些中间值z[l](i),i=1,2,⋯ ,mz^{[l](i)},i=1,2,cdots,m(下面省略ll),进行下列的一系列运算:
=1m∑z(i)2=1m∑(z(i)−)2znorm(i)=z(i)−2+z~(i)=zno神经网络控制rm(i)+(1-1)begin{aligned} mu&=frac{1}{m}sum z^{(i)}\ sigma ^{2}&=frac{1}{m}s神经网络引擎u神经网络分类m (z^{(i)}-mu)^2\ z_{norm}^{(i)}&am测试工程师p;=frac{z^{(i)测试用例}-mu}{sqrt{sigma^2+epsilon}}\ t测试英文ilde z^{(i)神经网络英文}&=gamma z_{norm}^{(i)}+beta\ tag{1-1} end{aligned}
其中gamm测试你的自卑程度a和beta可以通过学习得到。
2. 在多层神经网络中的具体操作
实际操作时,对每个mini-batch进行batch-normali测试zation。b[l]b^{[l]}可以设置为梯度下降算法的正确步骤零,因为不论它为多少,在batch-normalization时都会被减去。
z[l]=w[l]a[l−1]znorm[l]=z[l]−2+z~[l]=znorm[l]+[l](2-1)begin{aligned} z^{[l]}&=w^{梯度公式[l]}a^{[l-1]}神经网络控制\ z_{norm}^{[l]}&=frac{z^{[l]}-mu}{s梯度下降法例题qrt{sigma^2+epsilon}}\ tilde z^{[l]}&=gamma z_{norm测试工程师}^{[l]}+beta^{[l]}\ tag{2-1} end{ali神经网络英文gned}
for t=1…numMiniBatches
compute forwa神经网络对信息的存储依赖什么rd prop on X{t}X^{{t}}
in each hidden layer, use BN to replace z[l]z^{[l]} with z~[l]tilde梯度下降 z^{[l]}
use backprop to compute dw[l],db[l],d[l],d[l]dw梯度下降法原理^{[l]},db^{[l]},dbeta^{[l]},dga梯度下降法mma^{[l]}
update parameters(梯度下降方法及其各种改进)
3. Batch normalization有效的原因
- 类似于对输入层进行标准化的作用,可以加速学习过程。
- 使得后面的网络层更具有鲁棒性,当前面的网络层变化时,后面的网络层的均值和方差不变。换句话讲,减少了前面层参数和后面层参数之间的耦合
- 有轻微的正则化效果,因为采用了mini-batch的方法,均值和方差是在mini-batch上计算的而不是整个训练集,所以均值和方差中具有噪声,导致z~tilde z具有噪声。这个drop神经网络引擎out有异曲同工之妙。
4. 测试时的处理手段
训练时,均神经网络算法三大类值和方差是针对一个mini-batch来求的,但是神经网络是什么测试的时候神经网络引擎往往是一个一个样本进行的。
解决方法,利用指数加权平均的方法,对训练集上的各个mini-batch进行指数加权平均,用来估计测试样本的隐藏层的均值和方差