目录
一、怎么变成好的error face
二、Feature Normalization
三、在深度学习中再使用Feature Normalization
四、batch normolization
一、怎么变成好的error face
从左上图来看,在w1方向上loss斜率很小但是在w2方向上loss斜率很大,当你在这个实验里使用固定的LR时你就不会有较好的结果。你需要用比较好的比如Adam一些opt方法才能得到较好的结果,现在我们从另一方面想,要不我们之间改变这个error surface呢?
1.首先为什么会出现左上图的情况?
从下面式子可以看出,当你输入很小时你有可能就对w影响较小,当你输入很大时有可能对w影响就会较大。所以说我们下想要的是same range的输入,这样就会有好的error surface就会比较好train
二、Feature Normalization
首先取每一个dimension的值求平均得到m,然后再算出标准差σ。这样通过下面公式就可以计算出Feature Normalization的值。这个值在0上下,方差为1.
三、在深度学习中再使用Feature Normalization
后面得到的有可能还是难train所以说我们需要对处理的结果再normalization
如上图现在我们算出来的z1改变会影响后面的所有,它不像是最初始的x输入是独立的。现在network可以看作是拿x进来再用这个x算出一堆东西然后产生一堆outpt。但是现在data很多你不可能一次性把所有data丢进去,所以你要考虑用batch。对一个batch做normolization这就是batch normolization。我们希望batch size比较大,这样 一个batch就足以表示整个corpus的分布本来要对整个corpus做feature normolization这个事情改成对一个batch 做feature normolization
四、batch normolization
把最后的值再加上γ和β,这样就不是让数据不在0上下了吗?
我们通常初始把γ设为1,β设为0.在比较难train的时候我们让它尽可能保持在0上下。当走到好地方时我们可以适当改变这两个参数这样往往对你的训练是有帮助的
在testing时我们有可能不能拿到一整个batch的数据,所以我们现在需要用train计算的参数进行normolization计算。
上图为各种表现,其中黑色虚线就是没有加batch normolization的,x5 x30表示不同的学习率 。