数据归一化与层归一化概述
深度学习归一化
目录
这是一个非常经典且深入的问题。要理解这三者的区别与联系,我们可以从应用阶段、计算维度、目的以及可学习性这几个维度来剖析。
简单来说:
- Min-Max 是数据预处理手段,目的是把输入数据”压”到一个固定范围。
- BatchNorm (BN) 和 LayerNorm (LN) 是神经网络层,目的是在训练过程中让中间层的输出保持稳定的分布。
一、核心概念与计算方式
1. 数据归一化:例如 Min-Max Normalization
通常用于模型训练前的预处理阶段。
- 公式:
- 计算方式:统计整个训练集(或单张图像)中某一个特征的最小值和最大值。
- 结果:将数据映射到 或 区间。
- 特点:是线性的,不改变数据分布的形状,但对异常值(Outliers)非常敏感。
2. Batch Normalization (BN)
通常用于 CNN(卷积神经网络)。
- 核心思想:纵向规范化。在**Batch(批次)**维度上进行归一化。
- 形象理解:假设一个班级(Batch)考了语文、数学、英语(Channels)。BN 是把全班同学的”语文成绩”拉到同一个标准,再把”数学成绩”拉到同一个标准。
- 计算方式:对于特征图 ,固定通道 ,在 上求均值和方差。
- 公式:
(注意:BN 包含可学习参数 和 ,用于恢复网络的表达能力)
3. Layer Normalization (LN)
通常用于 RNN、Transformer(NLP领域)。
- 核心思想:横向规范化。在**Sample(样本)**维度上进行归一化。
- 形象理解:还是那个班级。LN 是不管别的同学考多少分,只看”张三”这一个同学,把他的语文、数学、英语成绩放在一起算出均值方差,进行标准化。
- 计算方式:对于特征图 ,固定样本 ,在 上求均值和方差。
- 优势:不依赖 Batch Size 的大小,对变长序列(如文本)更友好。
二、三者的区别 (Differences)
我们可以通过以下表格清晰地对比:
| 维度 | Min-Max (数据归一化) | BatchNorm (BN) | LayerNorm (LN) |
|---|---|---|---|
| 位置 | 网络外部 (预处理阶段) | 网络内部 (层与层之间) | 网络内部 (层与层之间) |
| 计算数据范围 | 全局数据集 (Global) | 当前 Batch (局部) | 当前 单个样本 (局部) |
| 归一化方向 | 特征维度 (通常按列) | 纵向 (跨样本,同特征) | 横向 (跨特征,同样本) |
| 可学习参数 | 无 | 有 () | 有 () |
| 训练/推理差异 | 训练推理使用相同的 min/max | 训练用Batch统计量,推理用Running Mean/Var | 训练和推理计算方式完全相同 |
| 主要目的 | 消除量纲影响,加速收敛 | 解决内部协变量偏移 (Internal Covariate Shift) | 同样解决分布偏移,适应小Batch/变长序列 |
| 适用场景 | 图像像素归一化、传统ML | 计算机视觉 (CNN, ResNet) | 自然语言处理 (Transformer, BERT, GPT) |
关键区别详解
- 数据的”轴”不同:
- BN 依赖其他样本(看别人的脸色),如果 Batch Size 太小(如为1),BN 无法计算方差,网络就崩了。
- LN 独立于其他样本(只管自己),一条数据进来就能归一化,所以适合 RNN/Transformer。
- 训练与推理的各种状态:
- Min-Max:推理时必须使用训练集计算出的 min/max,否则数据分布不一致。
- BN:训练时用当前 Batch 的均值方差;推理时用训练期间通过滑动平均积攒下来的全局均值方差(Running Mean/Var)。
- LN:训练和推理逻辑一致,来一条算一条。
三、三者的联系 (Connections)
尽管做法不同,它们在本质数学原理和最终目标上是高度一致的。
- 数学本质相同: 都是 线性变换(平移和缩放)。 公式结构都是:
- Min-Max 是减去最小值,除以极差。
- BN/LN 是减去均值,除以标准差(本质接近 Z-Score 标准化)。
-
目的殊途同归:
- 加速收敛:让损失函数的景观(Loss Landscape)更平滑,梯度下降更顺畅,可以使用更大的学习率。
- 数值稳定性:防止梯度消失或梯度爆炸(特别是对于 Sigmoid/Tanh 等饱和激活函数)。
- 消除量纲差异:让权重的更新不再受输入特征尺度的影响。
-
BN/LN 与 Min-Max 的配合:
- 通常在深度学习中,我们首先会对输入图片/数据做 Min-Max(或 Z-Score)预处理,把它变成 或符合 分布。
- 然后,在网络内部的中间层,随着矩阵乘法的叠加,数据分布会再次跑偏,所以我们需要 BN 或 LN 把它们再次”拉回来”。
四、总结:什么时候用哪个?
- 刚拿到数据时:必须做 Min-Max 或 Standardization (Z-score)。这是为了让网络的第一层”吃”到舒服的数据。
- 设计 CNN (做图像):首选 Batch Norm。因为图像的不同通道(特征)具有特定的物理意义,跨样本归一化效果好。
- 设计 RNN/Transformer (做文本/序列):首选 Layer Norm。因为文本长度不一,且 Batch Size 可能受限。
- Batch Size 非常小 (显存不够):别用 BN,用 LN 或者 Group Norm (GN)。
一句话概括:Min-Max 是让数据进门时整整齐齐;BN/LN 是为了让数据在网络里跑腿时不乱阵脚,其中 BN 是大家一起整队(跨样本),LN 是自己整理内务(跨特征)。