Batch Normalization(批量标准化)是有google提出的一种训练优化方法,参考论文:Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift 。
神经网络学习过程本质就是为了学习数据分布,一旦训练数据和测试数据的分布不同,那么网络的泛化能力也就大大降低;另一方面,一旦每批训练数据的分布各不相同(batch梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,因此需要对数据做归一化预处理。
网络一旦train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。Batch Normalization算法就是要解决在训练过程中,中间层数据分布发生改变的情况。
Batch Normalization(BN)是将训练数据中心化、方差归一化,这样可以加快模型收敛。
Batch Normalization优点:
(1) 可以让我们使用更大的学习率
(2)在某些情况下,有它就不需要使用Dropout了
(3)不需要使用局部响应归一化层,因为BN本身就是一个归一化网络层
(4)初值更随意,起到正则项的作用。可以把训练数据打乱
BN概述
BN(Batch Normalization)也属于网络的一层。在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理,然后再进入网络的下一层。BN层是一个可学习、有参数的网络层。
Normalization的过程:
参考:
[1] https://blog.csdn.net/hjimce/article/details/50866313
[2] https://blog.csdn.net/fate_fjh/article/details/53375881