李宏毅:Batch Normalization
1、feature scaling
(1)经过feature scaling,会让你的training容易的多。
(2)对每一维的i计算均值和标准差,利用公式得到scaling后的feature,这样会让你的training收敛地更快。
2、对每一个layer前的input进行feature scaling,但此时会出现一个问题:第一个layer前的feature 是不会变的,但是其它layer的input会随着training而改变。于是就想出了一个:Batch normalization
3、Batch Normalization
(1)batch
下图所示:x1,x2,x3是一个batch,它们是并行运算的。
(2)batch normalization
下图所示的是先做batch normalization,再做activation function。μ是z的mean,再算σ(标准差),需要注意的是:你的batch不能很小,不然你得到的μ和σ不能代表整个data。
每一个layer都会做batch normalization。在进入activation function之前都会去做normalization。
你在train batch normalization的时候它是会考虑data的,在做backpropogation的时候,它也是会影响μ和σ的
有时候你不想要用mean和标准差,你可以改动Zi,再加上γ和β(γ,β就当做是参数),把现在的distribution做一下改动,再放入activation function。
在testing的时候,我们没有batch,无法得到μ和σ,其中一个方法是:在training的时候计算每一个batch的μ和σ,给靠近training结束时的μ一个大的weight,离得远的给一个小的weight,再取平均。
(3)batch normalization benifit
它对training的benifit>testing
1)对参数的影响比较小
2)可以设置大一些的learning rate,更快收敛
3)较少出现梯度消失或梯度爆炸
4)能够一定程度上抑制overfitting