如是我闻:
1. 什么是 Layer Normalization?
Layer Normalization(层归一化)是一种用于深度学习的归一化方法,它的核心思想是在单个样本的所有神经元上计算均值和标准差,然后进行归一化,使得不同神经元的输出分布更稳定,从而加速训练,提高泛化能力。
与 Batch Normalization(批归一化)不同,Layer Normalization 不依赖 batch 维度,它适用于 RNN、Transformer、小 batch 训练、强化学习等场景。

2. Batch Normalization vs. Layer Normalization
| Batch Normalization (BN) | Layer Normalization (LN) | |
|---|---|---|
| 归一化维度 | 对 mini-batch 维度 计算均值和标准差 | 对 单个样本的所有神经元 计算均值和标准差 |
| 适用于 | CNN(计算机视觉任务) | RNN(自然语言处理)、Transformer、小 batch 训练 |
| 依赖 batch size | ✅ 依赖 batch size,batch size 太小时效果不稳定 | ❌ 不依赖 batch size,适用于变长输入 |
| 计算方式 | 对 batch 里相同神经元的不同样本进行归一化 | 对单个样本的所有神经元归一化 |
| 计算代价 | 需要在 batch 维度统计均值和方差 | 计算量较小,对小 batch 友好 |
3. Batch Normalization 和 Layer Normalization 计算举例
(1) Batch Normalization 示例
假设:
- batch size = 3(有 3 个样本)
- 隐藏层有 4 个神经元
- 下面是 mini-batch 中 3 个样本的隐藏层输出:
X=[1.30.92.02.61.51.02.12.81.10.71.82.4] X = \begin{bmatrix} 1.3 & 0.9 & 2.0 & 2.6 \\ 1.5 & 1.0 & 2.1 & 2.8 \\ 1.1 & 0.7 & 1.8 & 2.4 \end{bmatrix} X=1.31.51.10.91.00.72.02.11.82.62.82.4
计算 Batch Normalization:
-
计算每个神经元的均值(按列计算):
μ=[1.3+1.5+1.13,0.9+1.0+0.73,2.0+2.1+1.83,2.6+2.8+2.43]=[1.3,0.87,1.97,2.6] \mu = \begin{bmatrix} \frac{1.3+1.5+1.1}{3}, \quad \frac{0.9+1.0+0.7}{3}, \quad \frac{2.0+2.1+1.8}{3}, \quad \frac{2.6+2.8+2.4}{3} \end{bmatrix} = \begin{bmatrix} 1.3, 0.87, 1.97, 2.6 \end{bmatrix} μ=[31.3+1.5+1.1,30.9+1.0+0.7,32.0+2.1+1.8,32.6+2.8+2.4]=[1.3,0.87,1.97,2.6] -
计算标准差(按列计算):
σ=[(1.3−1.3)2+(1.5−1.3)2+(1.1−1.3)23,(0.9−0.87)2+(1.0−0.87)2+(0.7−0.87)23,...] \sigma = \begin{bmatrix} \sqrt{\frac{(1.3-1.3)^2 + (1.5-1.3)^2 + (1.1-1.3)^2}{3}}, \quad \sqrt{\frac{(0.9-0.87)^2 + (1.0-0.87)^2 + (0.7-0.87)^2}{3}}, \quad ... \end{bmatrix} σ=[3(1.3−1.3)2+(1.5−1.3)2+(1.1−1.3)2,3(0.9−0.87)2+(1.0−0.87)2+(0.7−0.87)2,...] -
归一化:
x^i,j=xi,j−μjσj \hat{x}_{i,j} = \frac{x_{i,j} - \mu_j}{\sigma_j} x^i,j=σjxi,j−μj
对 batch 里所有样本按列归一化。
(2) Layer Normalization 示例
假设:
- 单个样本的隐藏层输出有 4 个神经元:
x=[1.3,0.9,2.0,2.6] x = [1.3, 0.9, 2.0, 2.6] x=[1.3,0.9,2.0,2.6]
-
计算均值(对该样本的 4 个神经元计算均值)
μ=1.3+0.9+2.0+2.64=1.7 \mu = \frac{1.3 + 0.9 + 2.0 + 2.6}{4} = 1.7 μ=41.3+0.9+2.0+2.6=1.7 -
计算标准差
σ=(1.3−1.7)2+(0.9−1.7)2+(2.0−1.7)2+(2.6−1.7)24 \sigma = \sqrt{\frac{(1.3 - 1.7)^2 + (0.9 - 1.7)^2 + (2.0 - 1.7)^2 + (2.6 - 1.7)^2}{4}} σ=4(1.3−1.7)2+(0.9−1.7)2+(2.0−1.7)2+(2.6−1.7)2
=0.16+0.64+0.09+0.814=0.425≈0.65 = \sqrt{\frac{0.16 + 0.64 + 0.09 + 0.81}{4}} = \sqrt{0.425} \approx 0.65 =40.16+0.64+0.09+0.81=0.425≈0.65 -
归一化
x^i=xi−μσ \hat{x}_i = \frac{x_i - \mu}{\sigma} x^i=σxi−μ
x^=[1.3−1.70.65,0.9−1.70.65,2.0−1.70.65,2.6−1.70.65] \hat{x} = \left[ \frac{1.3 - 1.7}{0.65}, \quad \frac{0.9 - 1.7}{0.65}, \quad \frac{2.0 - 1.7}{0.65}, \quad \frac{2.6 - 1.7}{0.65} \right] x^=[0.651.3−1.7,0.650.9−1.7,0.652.0−1.7,0.652.6−1.7]
=[−0.615,−1.231,0.462,1.385] = [-0.615, -1.231, 0.462, 1.385] =[−0.615,−1.231,0.462,1.385]
4. 归一化之后数据的去向
归一化后的数据会继续通过神经网络的后续层进行计算,比如:
- 全连接层(MLP)
- 归一化后的值会作为输入,经过权重变换和非线性激活函数(ReLU、Sigmoid)。
- 卷积层(CNN)
- 归一化后的特征会继续经过卷积运算,提取更高层次的特征。
- RNN/Transformer
- 归一化后的数据可以作为输入到 LSTM 或 Transformer,防止梯度消失/爆炸。
- 自适应缩放((\gamma) 和 (\beta))
- 归一化后会乘以可学习参数 γ\gammaγ 并加上 β\betaβ,以恢复模型的表达能力:
yi=γx^i+β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
- 归一化后会乘以可学习参数 γ\gammaγ 并加上 β\betaβ,以恢复模型的表达能力:
5. 什么时候用 Layer Normalization?
✅ 适合:
- RNN/Transformer(序列模型):BatchNorm 依赖 batch size,而 LayerNorm 适用于变长输入。
- 强化学习(RL):状态输入通常是独立的,LN 适用于对个体样本进行归一化。
- 小 batch 训练:当 batch size 很小时,BatchNorm 可能无法估计稳定的均值和方差,而 LayerNorm 仍然可以稳定工作。
- 个别 CNN 任务:虽然 CNN 主要使用 BatchNorm,但在某些小 batch 任务或非图像任务中,也可以用 LayerNorm。
❌ 不适合:
- 大 batch 训练的 CNN:BatchNorm 通常比 LayerNorm 计算更高效,并且对 CNN 训练更有效。
6. 总的来说
- Layer Normalization 归一化的是单个样本的所有神经元,不依赖 batch size,适用于 NLP(RNN、Transformer)、强化学习等任务。
- Batch Normalization 归一化的是 batch 内所有样本的相同神经元,主要用于 CNN 和大 batch 训练。
- 归一化后数据会继续传递到神经网络的下一层,并通过可学习参数 γ\gammaγ 和 β\betaβ 调整模型表达能力。
以上
5517

被折叠的 条评论
为什么被折叠?



