0%

Training-Tricks

本笔记统一整理李宏毅深度学习课程中"what to do if my networks fail to train"的内容 ## 特征归一化(Feature Normalization)

在训练神经网络时,我们希望误差曲面(error surface)尽量规整,这样在不同可学习参数下的误差变化趋于一致。如果在不同方向上误差曲面变化不均匀,训练过程就需要不同的学习率来匹配每个方向。例如在下图中,方向的误差变化较快,而方向的变化较慢,这会导致对不同参数的学习率需求不同。为了解决这一问题,可以使用 Adam 等自适应优化器。

然而,除了调整学习率,还可以直接改变误差曲面的形状,通过对输入特征进行归一化,让各个方向上的变化更加一致。这种方法能使得模型的各个方向上对误差的敏感性相似,进而加快收敛速度。

特征归一化的方法

一种常用的特征归一化方法是标准化(Standardization),即让每个特征维度的均值为 0,方差为 1,使其类似于标准正态分布:

注:激活函数前后的归一化效果差异通常不大。

批归一化(Batch Normalization)训练阶段

在计算所有样本的均值 和方差 时,计算资源消耗较大,因此通常采用批归一化(Batch Normalization)。在这种方法中,我们对每一批数据计算均值和方差来进行归一化处理。批归一化可以显著加快网络的收敛,同时还可以起到一定的正则化作用。

通常批归一化会引入两个可学习的参数 ,允许模型在归一化后的基础上对数据进行缩放和平移。这是因为某些场景下,均值为 0 并不总是最优的分布形式。

批归一化(Batch Normalization)测试阶段

在测试阶段,模型会使用训练过程中计算得到的移动平均值(moving average)来进行归一化处理,确保模型在训练和测试期间表现一致。