解剖层 · 第 8 / 25 课

归一化:给数值踩刹车

真权重交互 复用已加载权重(未加载则需确认下载 28.1MB) 建议 15–30 分钟

学完这课你能

  1. 理解深层网络数值漂移问题与 LayerNorm 公式(减均值、除标准差、γ 缩放、β 平移)。
  2. 理解 pre-LN 与 post-LN 的结构差异,知道 pythia(GPT-NeoX 系)用输入侧 pre-LN。
  3. 会看「残差流的范数逐层增长」这一真实现象,理解 LN 是让每层输入尺度稳定的标准件。

想想调音台:十几路推子高高低低、参差不齐——调音师伸手把它们拉回同一条基准线。LayerNorm 就是站在每层门口的调音师,专管抚平数值的参差。

调音台上十几路推子高高低低,一条橙色水平基准线横穿所有推槽
类比 参差的推子=一个向量里大小悬殊的数值;橙色基准线=归一化后的统一尺度。

01数值会漂

向量在层与层之间流动时,数值尺度并不安分。做个思想实验:每层把向量放大 1.1 倍——听着温和吧?叠 100 层就是 1.1 的 100 次方,一万三千多倍。反向也一样:每层缩小一点,一百层后信号就没了。数值爆炸或消失,训练都进行不下去。

这是深层网络的老大难。transformer 的答案是个标准小零件:LayerNorm(层归一化),安在每个子层的入口或出口,负责把数值尺度摁回稳定区间——像调一架略歪的天平:砝码加减之后指针回中,读数才可信。

一架天平两侧托盘各放几只圆球,横梁基本水平,红色指针指在中央刻度
类比 悬殊的托盘=漂移的数值尺度,指针回中=LN 把均值、标准差拉回基准。

02LayerNorm 公式逐项拆

公式只有四步,而且对象很小:对单个 token 的 128 维向量(不跨 token、不跨层,就地处理)求均值——减掉;求标准差——除掉。这两步把它拉成均值 0、方差 1 的标准形态。然后再乘一个可学习的缩放参数 γ(128 维),加一个可学习的平移参数 β(也是 128 维)——允许网络在「标准化」的基础上自由调整。三个步骤加上安装位置,都在下面这张图里。

γ 和 β 是训练出来的:如果网络发现「不标准」更好用,它们可以学出抵消归一化的取值。刹车装了,方向盘还在模型手里。

一个 token 的 128 维向量 ① 减均值 均值变 0 ② 除标准差 尺度变 1 ③ 乘 γ 加 β 可学习参数 装在哪?—— pythia 的 pre-LN:每个子层入口各一个 残差流 (主干直通) LayerNorm 本课主角 注意力 / FFN 子层 写回 残差流
上:对单个向量减均值、除标准差、乘 γ 加 β;下:pre-LN 装在每个子层入口。

03pre vs post:刹在进层前还是出层后

同一个零件,两种装法。原版 Transformer 是 post-LN:先过注意力/FFN,再归一化。GPT 系主流改成 pre-LN:先归一化再进子层。pythia(GPT-NeoX 系)是后者——每层结构是「LN → 注意力 / FFN」,结果再进残差流。上面图里的下半部分,画的就是这个装法。

别小看先后次序:pre-LN 让残差主干上没有任何归一化拦截,信息和梯度可以畅通直达输出,深层训练因此稳定得多。这是「原版」到「现代 GPT」的关键结构演化之一。

04顺带一提 RMSNorm

再认识一下简化版。Llama、Qwen 这些后来的模型用的是 LayerNorm 的简化版 RMSNorm:只除「均方根」这一刀——省掉均值减除、省掉 β,少一半运算,效果几乎不降。本站选的 pythia 用标准 LayerNorm,RMSNorm 的细节留到发力层正式讲。

05看真实统计

空谈不如看数。实验台画出 pythia 处理真实句子时每个观测点的向量范数与方差:embedding 之后到第 6 层,残差流的数值确实在逐层增长——这正是第 10 课「残差流」要细讲的现象;而每层入口的 LN 都把尺度重新拉平。增长是真的,刹车也是真的。

还有一个更直观的开关:「模拟去掉 LN」。它叠加一条用无 LN 版本跑出的对照曲线——数值逐层发散,几层之后面目全非。见过这条虚线,你就再也不会问「LN 是不是可有可无」了。

交互实验:LN 仪表盘 + 去掉 LN 对照

引擎加载中…

例句 token 条选一个 token;逐层统计折线(embedding 后 + 每层输出,L2 范数 / 方差 / 最大绝对值三选一);逐层仪表盘格子(均值/标准差/max 读数 + 128 维迷你热条,点格子切换观测点);侧栏 LN 前后 128 维热条对比(前=原始统计,后=x̂≈0/1)+ 该层真实 γ/β 曲线;「拆掉 LayerNorm」开关用 forward({disableLN:true}) 现场重跑,叠加发散虚线(自动 log 刻度)+ 末位 logits 偏移 top5。

组件挂载点 · LN 仪表盘将在下一波接入(复用已加载权重)