资讯

归一化是什么?把数据或中间结果调整到统一的尺度

2026-11-053 分钟阅读百科
TL;DR归一化(Normalization)指把数据或神经网络的中间结果缩放到统一尺度的方法,数据预处理中常见最小-最大归一化和标准化(Z-score),深度学习中有批归一化、层归一化、RMSNorm 等,能加快训练收敛、稳定梯度,Transformer 大模型普遍使用层归一化或 RMSNorm。

归一化(Normalization)是把数据或者神经网络中间的计算结果调整到一个统一的、合适的尺度上的方法。它在机器学习中有两种主要的用途:一是在训练之前对输入的数据进行预处理;二是在神经网络的内部,对每一层的输出进行调整,让训练更加稳定和快速。

数据预处理中的归一化

不同的特征往往有着完全不同的取值范围和单位:比如一个人的年龄在 0 到 100 之间,月收入可能在几千到几十万之间。如果直接把这些数据交给模型,取值范围大的特征可能会在计算中占据主导地位,而取值范围小的特征的作用就被掩盖了,即使它们可能同样重要。对于依赖距离计算的模型,比如 K 近邻、K 均值聚类、支持向量机,这个问题尤其严重;对于用梯度下降训练的模型,比如线性回归、神经网络,取值范围差异大会让损失函数的形状变得又扁又长,梯度下降需要来回震荡很多次才能找到最低点,训练变得很慢。

常用的方法有两种。最小-最大归一化:把数据线性地缩放到 0 到 1 之间,计算方法是用每个值减去最小值,再除以最大值与最小值之差。它的缺点是对异常值很敏感,一个极端的值就会让其他数据都被压缩到一个很小的范围里。标准化,也叫 Z 分数标准化:用每个值减去平均值,再除以标准差,使得处理之后的数据平均值为 0、标准差为 1。它受异常值的影响较小,是更常用的方法。在中文语境中,“归一化”有时也泛指这两种方法。需要注意的是,计算这些统计量时只能使用训练集,然后用同样的参数去处理验证集和测试集,否则会造成信息泄露。决策树、随机森林等基于树的模型对特征的尺度不敏感,一般不需要进行这种处理。

深度学习中的归一化层

在深度神经网络中,每一层的输入都是上一层的输出。在训练过程中,前面各层的参数在不断地变化,导致后面每一层收到的输入的分布也在不断地变化,后面的层需要不断地适应这些变化,训练变得困难。在网络内部加入归一化层,能让每一层的输入保持稳定的分布,从而加快训练、让训练更加稳定。

批归一化(Batch Normalization):由谷歌的 Sergey Ioffe 和 Christian Szegedy 在 2015 年提出。它在每一个小批量的数据中,对每个特征计算平均值和方差并进行标准化,然后再通过两个可学习的参数进行缩放和平移,让网络自己决定最合适的分布。它大大加快了卷积神经网络的训练,允许使用更大的学习率,被广泛用于图像模型中。它的缺点是依赖于批次的大小,批次很小时效果变差,在训练和推理时的行为也不相同。

层归一化(Layer Normalization):由 Jimmy Ba、Geoffrey Hinton 等人在 2016 年提出。它不是在批次的维度上,而是在每一个样本内部对所有的特征进行标准化,因此不依赖于批次的大小,非常适合处理长度不一的序列数据。Transformer 架构采用了层归一化。

RMSNorm:一种简化的层归一化,只用均方根进行缩放,不减去平均值,计算更加高效,效果相当。Llama、Qwen 等很多大语言模型都采用了它。此外还有用于图像生成的实例归一化、在小批量时效果更好的组归一化等。

在 Transformer 中,归一化层放在什么位置也很重要:原始的 Transformer 把它放在残差连接之后,后来的研究发现,把它放在每个子层之前,训练深层的网络会更加稳定,这种做法被如今大多数的大语言模型所采用。