Normalization(归一化/标准化)的通俗讲解
通俗易懂的方式讲清楚 Normalization(归一化/标准化)。
1.首先,我为什么要做 Normalization?
想象一下这个场景:
你要训练一个模型,根据身高(米) 和体重(公斤)来预测一个人的健康指数。
身高的数据范围大约是 1.5 ~ 2.0 米
体重的数据范围大约是 40 ~ 100 公斤
你会发现,体重的数值天然就比身高大几十倍。这会导致什么问题呢?
1. 首先我们的模型会“偏袒”数值大的特征:在模型眼里,体重波动1公斤(比如从60到61)可能比身高波动0.1米(比如从1.7到1.8)显得“更重要”。这并非事实,只是因为它的数值更大。模型可能会花大量精力去学习体重的细微变化,而忽略了身高的影响。
2. 训练速度变慢:就像你要同时调整一个精密的显微镜(身高)和一个粗糙的大扳手(体重),步调很难一致。这放到我们数学上(比如梯度下降),寻找最优解的路会变得蜿蜒曲折,需要很多步才能收敛。
3. 不稳定,容易“爆炸”:某些对输入敏感的模型(如深度学习),如果输入数据尺度差异巨大,可能会导致梯度爆炸或消失,使得训练根本无法进行。
2.Normalization
Normalization 的核心思想就是:把所有特征都“摆到”一个大致相同的数值范围内,让它们站在同一起跑线上。
就像一个教练让篮球队的队员(高个子)和体操队的队员(矮个子)在同一个操场上训练前,先统一他们的步幅和节奏,这样训练起来才更高效、公平。

3.常见的 Normalization 方法
下面介绍几种常见的方法,这里我会用“把考试成绩统一到同一尺度”来类比。
假设你有三个科目的原始成绩:
* 数学:0-150分
* 语文:0-100分
* 英语:0-120分
1. Min-Max Normalization (最小-最大归一化)
- 做法:把数据缩放到一个固定的范围,通常是 [0, 1]。
- 公式:(当前值 - 最小值) / (最大值 - 最小值)
- 通俗解释:计算你在这个科目里,相对于最低分和最高分,你处在什么位置。
例子:
如果你的数学考了 75分,而全班最低0分,最高150分。那么你的归一化分数是:(75 - 0) / (150 - 0) = 0.5
如果你的语文考了 80分,最低0分,最高100分。那么你的归一化分数是:(80 - 0) / (100 - 0) = 0.8
优点:简单直观,新数据进来后可以在已知的 min/max 上继续计算。
缺点:对异常值( outliers )非常敏感。如果有个学霸数学考了149分,你考了75分,那么你的分数会非常接近0.5。但如果突然来个学神考了300分(异常值),你的分数瞬间就变成了 (75-0)/(300-0)=0.25,被“挤压”得很小。

2. Z-Score Normalization (Z值标准化)
做法:将数据转换为均值为0,标准差为1的正态分布。
公式:(当前值 - 平均值) / 标准差
通俗解释:不看你的绝对分数,而是看你的分数比平均分高(或低)了多少个“标准差”。它衡量的是你在群体中的“相对位置”。
例子:
假设数学平均分是90分,标准差是30分。你考了75分,那么你的标准化分数是:(75 - 90) / 30 = -0.5
假设语文平均分是70分,标准差是10分。你考了80分,那么你的标准化分数是:(80 - 70) / 10 = 1.0
优点:对异常值不敏感。因为标准差本身就考虑了数据的离散程度。你的分数是-0.5,就代表你比平均水平差了半个标准差,这个意义是稳定的,不受个别极端高分影响。
缺点:缩放后的数据没有固定的范围,可能不在[0,1]区间内。
3. Batch Normalization (批归一化)
做法:这不是在输入数据时做的,而是在深度神经网络的中间层做的。
它对一个小批量(Mini-batch) 的数据在每一个神经元(维度)上进行 Z-Score 标准化。
通俗解释:想象网络每一层的学习就像一群学生在传纸条。第一层的学生(神经元)写字可能有大有小(数据分布变化),传给第二层的学生看得很费劲。Batch Norm 就像在每一层传纸条时,都安排一个“课代表”,把纸条上的字迹统一整理成标准大小和格式,再传给下一层。这样下一层的同学就轻松多了。
优点:
- 大大加快训练速度,允许使用更大的学习率。
- 降低对初始权重的敏感性。
- 有轻微的正则化(防止过拟合)效果。
- 缺点:在批量大小(batch size)很小时,效果会变差。
4. Layer Normalization (层归一化)
做法:与 Batch Norm 类似,但计算的维度不同。它是在单个样本上,对所有神经元(或所有特征)进行归一化。

通俗解释:Batch Norm 是“横向”的,一次看一个特征在所有样本中的分布。Layer Norm 是“纵向”的,一次看一个样本的所有特征之间的关系(即看一个样本的所有维度之间的关系)。
应用场景:在 循环神经网络(RNN) 和 Transformer 模型中效果非常好,因为这些模型的输入序列长度会变化,且 Batch Size 可能不稳定。
其他方法
Robust Scaler:使用中位数和四分位数范围进行缩放,对异常值比 Z-Score 还鲁棒。
Instance Normalization / Group Normalization:主要用在计算机视觉领域,是对 Batch Norm 的变体,适用于不同的任务(如图像风格迁移)或当 Batch Size 无法设置得很大时。
总结
| 方法 | 主要思想 | 适用场景 | 优点 | 缺点 |
| Min-Max | 缩放到固定范围 [0, 1] | 数据分布较均匀,无极端异常值 | 简单直观,保持原始关系 | 对异常值敏感 |
| Z-Score | 转变为标准正态分布 (均值0,方差1) | 数据分布未知或有异常值 | 对异常值不敏感,非常常用 | 无固定范围 |
| Batch Norm | 在网络的每一层内部,对小批量数据进行标准化 | 深度神经网络的隐藏层 | 加速训练,稳定过程 | 依赖较大的Batch Size |
| Layer Norm | 在单个样本上,对所有特征进行标准化 | RNN, Transformer等序列模型 | 不依赖Batch Size,稳定 | 在CNN中效果不如Batch Norm |
一句话总结为什么要 Normalization
为了消除不同特征因原始量纲和分布不同带来的“不公平”,让模型训练得更快、更稳、更好。
更多推荐

所有评论(0)