Module 1 · Transformer Lesson 10 Block 零件 2/3

LayerNorm

残差的搭档。作用只有一个:在数据进下一步之前,把每个向量的数值"重新校准"到一个稳定、标准的范围,让训练不乱飘。

TopicLayer Normalization(层归一化)
Objectives理解"归一化"在做什么、为什么稳训练、γ/β 是干嘛的
Prerequisites残差 ✅、均值/标准差的概念(缩放点积课提过 std)
Outcome能说清 LayerNorm 把一个向量变成什么、为什么需要它
Warning它对每个词向量单独做,不跨词、不跨样本

① Why — 数值会"漂"

向量流过一层又一层,每层都做加法、乘法、加 delta……数值的尺度会失控:乘法让某些维度指数级越变越大、某些越变越小,层与层之间尺度差好几个数量级。

这会让训练很难受:

我们想要:每进下一步之前,先把向量的数值拉回一个统一、温和的范围。这就是 LayerNorm。(呼应缩放点积课的 ÷√d——都是"别让数值失控",LayerNorm 是更通用的那把尺子。)

② What — 把一个向量标准化

一个词向量(d_model 个数)做三步:

  1. 算这一个向量自己的均值 μ 和标准差 σ(对它的 d_model 个分量统计)。
  2. 标准化:每个分量减 μ、除以 σ → 这个向量变成 均值 0、标准差 1(数值被拉到统一尺度)。
  3. 缩放 + 平移:再乘一个可学习的 γ、加一个可学习的 β → 让模型能按需调整"标准化的力度"。
x̂ᵢ = (xᵢ − μ) / √(σ² + ε) → yᵢ = γᵢ · x̂ᵢ + βᵢ

ε 是个极小数,只为避免 σ=0 时除以零。γ、β 各有 d_model 个,是学出来的参数

前:数值乱飘 后:均值0、标准差1 一个向量的 6 个分量(示意) LayerNorm 0 同一向量:拉到统一尺度、以 0 为中心
把一个向量的各分量减均值、除标准差 → 数值居中、尺度统一。每个词向量各自独立做一遍。

③ 关键点

④ 在 Transformer 里:Add & Norm

它和残差是搭档,每个子层配一组,合称 "Add & Norm"

x = LayerNorm( x + 多头注意力(x) )
x = LayerNorm( x + FFN(x) )

Add = 残差把 x 加回来;Norm = LayerNorm 把结果校准。两者一起:既有梯度高速路,又有数值稳定。

🅿️ 小注(不展开):LayerNorm 放"残差相加之后"(Post-LN)还是"子层之前"(Pre-LN)有两种流派,现代大模型多用 Pre-LN(更稳)。细节以后需要时再说,今天记住"残差 + 归一化搭档"即可。

💬 深入问答(来自讨论)

Q:可以理解为"控制每个词向量的长度在一个区间"吗?

方向对(都是"控尺度"),但两点要拧准:

升级说法:把"控制长度"改成"标准化数值分布(均值0标准差1)+ 居中",就精确了。

Q:γ、β 不是写死的,那怎么学?不会又数值失控吗?

怎么学:和其它参数一样由梯度下降学(各 d_model 个)。初始 γ=1, β=0——即一开始 LayerNorm 就是"纯标准化,不缩放不平移"(γ·x̂+β = x̂),从干净起点再慢慢调。

为什么不失控(可控 vs 失控的区别):

一句话:LayerNorm 不是"禁止数值变大",而是把尺度变成一个被学习、被每层重置的可控量,而非无人看管地乱漂。

Q:"均值0标准差1"和"γ/β 学出来"矛盾吗?

不矛盾,是两个时间点减均值除标准差那一刻,输出确定是均值0标准差1(纯数学,不学);随后乘 γ 加 β,尺度被调走(γ/β 是学出来的)。所以最终输出不一定还是 0/1(初始 γ=1、β=0 时才正好保持)。

Q:数值失控是"忽高忽低"吗?给个具体例子。

不是"来回波动"——用词纠正:一次前向内趋势是单调的(爆炸或消失)。具体例子:一个向量里两个分量 A、B 都从 2 出发,某层里 A 每层被 ×1.4、B 被 ×0.6:

0 → 2 → 5 → 10 → 20
A (×1.4)2 → 2.8 → 10.8 → 58 → 1675(爆炸)
B (×0.6)2 → 1.2 → 0.16 → 0.012 → 0.00001(消失)

真正的问题是三点(都不是"抖动"):① 尺度指数爆炸/消失② 维度间极度不均(A=1675 淹没 B);③ 跨训练步不可预测(权重每步在变,乘数 1.4 下步可能变 1.6…,第 30 层尺度在训练步之间乱跳)。LayerNorm 每层把尺度重置成均值0标准差1 → 消除"尺度"这个变量,每层都在标准环境里工作。

✅ 快速检查(用自己的话答)

  1. LayerNorm 对一个向量做了什么?(两步:标准化 + 什么)标准化后这个向量的均值和标准差大约是多少?
  2. 为什么需要它?数值"漂移"会给训练带来什么麻烦?
  3. "Layer" 的意思是它对谁单独做统计?(一个词向量内部 / 跨所有词 / 跨所有样本)

答完这 3 题,下一课 FFN(前馈网络)——Block 的最后一个零件,然后就能拼出完整 Transformer Block 了。