参考:Implementing Batch Normalization in Tensorflow
批量标准化:是一个简单且有效的方法,能感觉神经网络的性能,此处指,能够扩大learning rate,不需要很小的learning rate,那么在有限的迭代次数内,就能完成loss的优化,一般速度能提高14倍。
BN,即“批量规范化”;每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1。最后的‘scale and shift’操作是为了让因训练所需而“刻意”加入的BN能够有可能还原成最初的输入,从而保证整个network的capacity。此处capacity指,BN是一种在原模型上的新操作,这个新操作很大可能改变某层原来的输入,也有可能不变,如此一来,既可以改变同时也可以保持原输入,那么模型的容纳能力就提升了。
BN的原因:
为了克服深度神经网络难以训练的弊病。说到底为了防止‘梯度弥散’,
比如0.9的30次方=0.04,而BN中,通过将activation规范为均值和方差一致的手段,让原本会减小的activation的scale变大。
什么时候进行BN?
比如:在神经网络训练时,遇到收敛速度很慢,或者梯度爆炸等无法训练的状况下,可以尝试BN来解决。另外,一般情况下,使用BN能加快训练速度,提高模型精度。