为什么要使用BN
-
神经网络的输入在经过层层网络的非线性变换之后,每次学习到的分布都无法预测。并且由于参数的更新,每层输入分布都在发生变化,导致网络很难收敛,为了让网络可以正常训练,就需要
-
学习率不能太高
-
每次参数初始化准确
-
网络层数不能过多
-
-
神经网络研究人员发现,这个现象是由于每层分布的差异过大,并且无法预测导致的,那么如果让每一个batch样本在每一层都服从类似的分布,就可以解决这样的问题
-
标准化并不改变数据的分布,只是将数据在原始空间内进行平移和缩放
训练阶段的BN
我们不希望每层的分布都相同,因此我们增加了一个线性运算γ和β,γ和β是作为参数进行学习的,如果学习得当当伽马等于标准差,β等于期望时,y就是x的恒等映射
测试阶段的BN
测试阶段,我们要统计所有batch的均值和方差,然后均值采用训练集所有batch均值的期望,方差采用所有batch方差的无偏估计就可得出全局统计量
整个训练集的均值和方差是通过指数加权平均计算的,跟动量类似。统计所有批次的均值时,每次更新均值时,1-m乘以过去的均值再加上m乘以当前批次的均值
BN的优点与缺点
-
-
可以尝试更大的学习率,加速神经网络的收敛
-
对参数初始化不敏感
-
缓解了梯度消失问题,让输出远离激活函数的饱和区
-
还有正则化的作用
-
-
缺点
-
仅在batch中包含样本数量多的时候有效
-
对RNN和序列数据性能较差
-