深度学习|表示学习|Layer Normalization 全面总结|24
如是我闻:
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.3 0.9 2.0 2.6 1.5 1.0 2.1 2.8 1.1 0.7 1.8 2.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.1 3 , 0.9 + 1.0 + 0.7 3 , 2.0 + 2.1 + 1.8 3 , 2.6 + 2.8 + 2.4 3 ] = [ 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 ) 2 3 , ( 0.9 − 0.87 ) 2 + ( 1.0 − 0.87 ) 2 + ( 0.7 − 0.87 ) 2 3 , . . . ] \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 = x i , 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.6 4 = 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 ) 2 4 \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.81 4 = 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 = x i − μ σ \hat{x}_i = \frac{x_i - \mu}{\sigma} x^i=σxi−μ
x ^ = [ 1.3 − 1.7 0.65 , 0.9 − 1.7 0.65 , 2.0 − 1.7 0.65 , 2.6 − 1.7 0.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
β,以恢复模型的表达能力:
y i = γ 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 β 调整模型表达能力。
以上