在深度学习中,Normalization 是十分常规的操作。在神经网络训练开始前,都要对输入数据进行归一化处理,那为什么需要归一化呢?归一化后有什么好处呢?
机器学习领域有个很重要的假设:IID 独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。因此,在把数据喂给机器学习模型之前,“白化(whitening)”是一个重要的数据预处理步骤,其中最典型白化方法是 PCA。白化一般包含两个目的:
1. 去除特征之间的相关性:独立;
2. 使得所有特征具有相同的均值和方差 :同分布。
每批训练数据的分布各不相同,那么网络需要在每次迭代中去学习适应不同的分布,这样将会大大降低网络的训练速度。对于深度网络的训练是一个非常复杂的过程,只要网络的前面几层发生微小的改变,那么这些微小的改变在后面的层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。
其可以分为很多种:
BN 批归一化是对每一批的数据在进入激活函数前进行归一化,可以提高收敛速度,防止过拟合,防止梯度消失,增加网络对数据的敏感度。
BN 的优点是:
1. 可以选择比较大的初始学习率,加快网络的收敛。实验结果表明,就算你使用小的学习率,收敛速度也会很快;
2. 减少正则化参数的 Dropout、L2 正则项参数的选择问题,BN 具有提高网络泛化能力的特性;
3. 不需要使用局部响应归一化层(局部响应归一化是 Alexnet 网络用到的方法),因为 BN 本身就是一个归一化网络层;
4. 可以把训练数据彻底打乱,防止每批训练的时候,某一个样本经常被挑选到,在 ImageNet 上提高 1% 的精度。
BN 的核心思想不是为了防止梯度消失或者防止过拟合,其核心是通过对系统参数搜索空间进行约束来增加系统鲁棒性,这种约束压缩了搜索空间,约束也改善了系统的结构合理性,这会带来一系列的性能改善,比如加速收敛,保证梯度,缓解过拟合等。
LN
01 BN 在 训练和测试时的差异
对于 BN 来说,在训练时是对每一个 batch 的训练数据进行归一化,即用每一批次数据的均值和方差。在测试时,比如进行一个样本的预测,就并没有 batch 的概念,因此这个时候使用的均值和方差是训练过程中通过 滑动平均得到的均值和方差,这个会和模型权重一起在训练完成后一并保存下来。
对于 BN,是对每一批数据进行归一化到一个相同的分布,而每一批数据的均值和方差会有一定的差别,而不是用固定的值,这个差别实际上也能够增加模型的鲁棒性,并会在一定程度上减少过拟合。
但是一批数据和全量数据的均值和方差相差太多,又无法较好地代表训练集的分布,因此,BN 一般要求将训练集完全打乱,并用一个较大的 batch 值,去缩小与全量数据的差别。
02 BN 中的移动平均是怎么做的?
BN和LN有哪些差异?
1)两者做 Norm 的维度不一样,BN 是在 Batch 维,而 LN 一般是在最后一维。
2)BN 需要在训练过程中,滑动平均累积每个神经元的均值和方差,并保存在模型文件中用于推理过程,而 LN 不需要。
3)因为 Norm 维度的差异,使得它们适用的领域也有差异,BN 更多用于 CV 领域,LN 更多用于 NLP 领域。
为什么 Transformer/BERT 使用 LN,而不使用 BN?