Batch Normalization
这篇Blog主要总结一下Batch Normalization在训练模型的时候的作用,以及具体的实现方法。
为什么需要使用Batch Normalization?
首先了解一下什么是batch、batch_size、和epoch
- epoch: 表示把所有的训练集输入到模型完整地训练一遍。
- batch: 模型训练时,往往不是一次性把所有的训练集输入到模型中,而是把训练集分成较小的批,即分成一个个的batch
- batch_size: batch的大小
例如batch_size为5,代表模型处理5个样本后,更新一次参数,即进行一次学习。完成batch次训练后,把数据集完整的训练了一遍,即完成了一个epoch。
batch对模型的训练有着重要的影响,例如batch_size的大小以及每个batch中数据的分布。说到数据的分布,可以batch范围的Normalization和整个数据集的Normalization来调整数据分布。为什么需要使用batch Normalization,可以从训练样本的角度出发来看,但一个batch训练完成后,更新一次参数,因为不同的batch之间可能存在不同的分布,让模型可以更好的识别更多类型的分布。
为什么要做Normalization
不同的特征所带来的不同的取值范围会让error surface变得非常崎岖,难以更新参数,对训练会造成阻碍。
而Normalization能让不同的特征有相同的取值范围,大大的改善了error surface,有利于模型的训练
如何做Normalization
上面是比较常见的Normalization,能让特征的均值为0,方差为1。
对于深度神经网络而言,每层hidden layer的input也需要做Normalization,因为经过W矩阵之后,特征的取值范围又发生了变化。
batch Normalization是发生在训练的时候,那在测试的时候需要怎么做呢?
在测试的时候,可以利用训练时候计算的均值和方差,在测试的时候直接把它们拿过来进行Normalization。
Batch Normalization 可以帮助Optimization,这种发现也是非常偶然的,可以参见How Does Batch Normalization Help Optimization?
Reference:
李宏毅《机器学习》:https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.html