LayerNorm

AI

LayerNorm(层归一化),多用于NLP
![[Pasted image 20260507183851.png]]

LayerNorm做了什么

对于一个样本的几个特征,也许他们的特征值分布太分散。比如一个人的年收入是10000000,但是他的身高体重是180cm和70kg。那么这个数据传递给下一个网络时,年收入的权重就会远远盖过身高体重等。让模型的训练只由某个特征主导。
所以我们需要让一个样本的特征值在数值范围上接近,对单个样本的所有特征进行归一化也就是使其均值为0、方差为1。

LayNorm解决了什么

一般来说我们认为它解决了两个问题

  1. -内部协变量偏移
    名词听起来很抽象,首先你需要知道模型的训练过程。
    前向传播 → 计算损失 → 反向传播 → 计算梯度 → 更新所有层的参数(W1,W2,W3…)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 假设一个3层网络
x = [1, 2, 3] # 输入
# 第1步训练
W1 = [[0.1, 0.2, 0.3]] # 初始
h1 = [0.1*1+0.2*2+0.3*3] = [1.4] # 输出范围正常
# 计算损失,更新W1(假设梯度让W1变大)
W1_new = [[0.5, 0.6, 0.7]]
h1_new = [0.5*1+0.6*2+0.7*3] = [0.5+1.2+2.1] = [3.8] # 范围变大
# 第2层看到h1从1.4变成3.8(变化很大!)
# 这就是ICS:第2层的输入分布变了,而且范围变散了
# 这种范围变大会影响第2层的梯度计算
# 导致第2层的参数W2更新指向错误方向
# 然后W2又会让第3层看到更分散的数据...
# 恶性循环
我们知道模型训练过程中是参数是会不断更新的,以此来变化下一层的输入。那么如果有一个数值过于大,大的纬度就会主导梯度,其他维度被忽略。并且更新时由于过大过小,模型需要猛踩刹车或者猛踩油门,也就是w的变化会忽大忽小而不能做出有效调整。
  1. 梯度消失与梯度爆炸
    前面提到,数据范围分散会导致更新时输出值过大过小,分别会导致梯度爆炸与消失
    • 梯度爆炸:数值范围层层放大(例如每层放大10倍),传递到输出层时已达天文数字。反向传播时,这些巨大数值相乘,导致梯度超过 float 32 表示范围,变成 inf(无穷大)。模型瞬间崩坏,Loss 直接变成 NaN。这就是你说的“超范围”。
    • 梯度消失:数值范围层层缩小(例如每层缩小到 0.1 倍),传递到输出层时已接近 0。反向传播时,多次乘以小于 1 的数,梯度变成 0。模型再也学不到任何东西,Loss 永远不降。

LayerNorm的具体实现

前文提到,我们需要对一个样本的每个特征进行归一化,也就是方差为1均值为0
公式:
![[Pasted image 20260507191827.png]]
例如一个样本如下:原始数据[25, 500000, 8000]
μ≈169341.67
σ≈233,760
归一化后的值=x−μ/σ
经过 LayerNorm 处理后[-0.724, 1.415, -0.690]
(公式里的 γ 和 β 是两个可学习的参数。网络训练时可以调整它们。
比如,假设网络学习到 γ=2,β=0.5γ=2,β=0.5,那么最终输出就是:

  • −0.724×2+0.5=−0.948−0.724×2+0.5=−0.948
  • 1.415×2+0.5=3.331.415×2+0.5=3.33
  • −0.690×2+0.5=−0.88−0.690×2+0.5=−0.88
    这样网络就有了灵活性:如果原始分布是最好的,它可以把 γ=1,β=0γ=1,β=0 学回来;如果另一种分布更好,它可以调整。)

这样下来你得到了什么?

  1. 范围接近了:原来的 25 和 500000 相差 2 万倍,现在 -0.724 和 1.415 相差只有 2 倍左右。收入高的特征不再“欺负”其他特征了。
  2. 以0为中心:数据现在有正有负,大致分布在 -1 到 +1 之间。
  3. 分布标准:这组新数据的均值是 0,标准差是 1。你可以快速验证一下:(−0.724+1.415−0.690)/3≈0(−0.724+1.415−0.690)/3≈0(均值0),离散程度也标准化了。

LayerNorm在Transformer里的运用

![[Pasted image 20260507193403.png|345]]
这是Transformer的解码器架构

[[Add]] & Norm层

它实际上由两个独立的操作组成:残差连接(Add) 和 层归一化(Layer Normalization, Norm)。这两个操作协同工作,极大地提升了 Transformer 的训练稳定性、收敛速度和最终性能。
Norm 操作接收来自 Add 的输出(原始输入 + 子层变换)。这个组合信号的分布可能会剧烈变化,尤其是在训练初期。LN 将其“拉回”到一个相对稳定(均值为0,方差为1)的分布,极大地减少了训练的不稳定性,显著加快了收敛速度。γ 和 β 让模型能自适应地调整这个分布。

2.2 与[[BatchNorm]]的对比
特性 BatchNorm LayerNorm
统计量计算 沿批次维度(N)计算 沿特征维度(C/H)计算
依赖关系 依赖批量大小 与批量大小无关
适用场景 CNN RNN、Transformer
站内搜索
常搜: