本文目录
先看完整的数据路径
结构剖面
一个矩阵怎样穿过 Transformer Block
主线向下流动;两次残差连接从支路绕过计算模块再汇合。
一个 Transformer Block(Transformer 模块)不等于 Attention。现代解码器常采用 Pre-Norm:先做归一化,再进入子层。以常见结构为例:
X → RMSNorm → Self-Attention → +X → RMSNorm → FFN → +残差
RMSNorm(均方根归一化)稳定数值尺度;Self-Attention 在 Token 之间搬运信息;FFN(Feed-Forward Network,前馈网络)对每个位置的特征进行非线性变换。
两条旁路为什么重要
残差连接(Residual Connection)把子层输入直接加回输出。它保留原信息,并为深层网络提供更顺畅的梯度路径。注意它是逐元素相加,所以两边形状必须一致。
播放器里从头到尾都是 3×4:3 个 Token 没变,主维度 4 也没变。内部注意力头或 FFN 可以暂时改变维度,但回到残差相加前必须投影回来。
Logits 在 Block 外面
许多 Block 叠加后,最后表示通常还会经过归一化与输出投影,得到 Logits(未归一化原始分数)。Softmax 再把词表维度上的 Logits 转成分布。
因此完整模型不仅有注意力:Embedding、位置处理、Norm、FFN、残差、输出头都参与结果。
RMSNorm 到底稳定了什么
随着层数增加,隐藏向量的数值尺度可能忽大忽小,后续矩阵乘法和梯度都会变得难以控制。RMSNorm(Root Mean Square Normalization,均方根归一化)根据一行向量的均方根调整尺度,再乘一组可学习系数。
它不会把 3×4 变成别的形状,也不负责在 Token 之间交换信息。每个 Token 的一行独立完成归一化。Pre-Norm 中先归一化再进入 Attention 或 FFN,残差主路仍保留未归一化的输入用于相加。
Attention 与 FFN 分别改变什么
Self-Attention 的主要特征是跨 Token 汇总:某一行的新信息可以来自其他可见行。FFN 则对每个 Token 分别应用同一组前馈网络参数,不直接让第一个 Token 去读取第二个 Token。
常见 FFN 先把主维度扩张到更宽的中间维度,经过非线性激活,再投影回来。例如 4 → 12 → 4。中间变宽让网络能组合更多特征,但残差相加前必须回到 4 维。播放到 FFN 时看到的形状提示,正是在强调这种“内部扩张、外部还原”。
两次残差相加不是同一条支路
第一次残差围绕 Attention:把 Attention 输出与它的输入相加。第二次围绕 FFN:把 FFN 输出与进入 FFN 支路前的表示相加。两条旁路处在不同位置,不能把最初 X 一直加到所有子层输出上。
若把一个子层记作 F,残差结构可以简写为:
这条式子解释了为什么子层只需要学习“在现有表示上补充什么”,同时让梯度有一条绕过复杂变换的直接路径。深层网络能稳定训练,残差连接是重要原因之一。
多个 Block 为什么形状可以保持不变
每个 Block 接收 n×d_model,也输出 n×d_model,所以下一层能直接接收上一层结果。形状不变不代表内容不变:每层都会产生新的注意力模式和 FFN 变换,Token 的每一行逐渐包含更丰富的上下文信息。
层与层通常不共享全部参数。第 1 层有自己的 QKV、输出投影、Norm 与 FFN 权重,第 2 层还有另一套。总参数量之所以巨大,正是因为这些矩阵按层重复出现但数字彼此独立。
位置编码在哪一步进入
解码器需要区分 Token 顺序。现代模型常使用 RoPE(Rotary Position Embedding,旋转位置编码),在多头切分后、计算 QKᵀ 前对 Q 和 K 注入位置信息。它影响匹配分数,但不会直接改 V 的方式。
这篇播放器省略了具体旋转公式,只追踪 Block 主干。知道它位于 Attention 内部即可:Embedding 提供 Token 初始向量,位置机制让注意力比较同时感知相对次序。
Block 之后怎样得到词表分数
最后一个 Block 的输出仍是每个 Token 一行的隐藏表示。模型通常经过最终 Norm,再乘词表输出矩阵,把 d_model 维投影到词表大小。例如最后位置的一行从 4096 维变成 120,000 个 Logits,每个词表 Token 对应一个候选分数。
因此 Logits 不属于某个 Block 内的最后一步。Block 负责加工表示,输出头负责把表示翻译成词表候选。训练时损失从这些 Logits 开始向后传播,最终影响所有 Block 的参数。
参数主要集中在哪里
一个 Block 的 Attention 通常包含 Q、K、V 和输出投影,FFN 则包含向上扩张与向下投影的矩阵。由于 FFN 中间维度往往是主维度的数倍,它的参数量常常占据很大比例。Norm 的可学习系数相对少,但对数值稳定仍然重要。
若主维度为 d,普通多头 Attention 的四个大投影粗略是 4d² 个权重;传统两层 FFN 若扩张到 4d,两个矩阵大约是 8d²。不同架构会使用门控 FFN、GQA 或 MoE,公式随之变化,但“数出所有可训练矩阵元素”的原则不变。
Pre-Norm 与 Post-Norm 的位置差别
本篇采用 Pre-Norm,即先 Norm 再进入子层。早期 Transformer 也常见 Post-Norm:子层与残差相加后再归一化。两者拥有相似模块,却改变了数据与梯度通过网络的方式。
阅读架构图时不要只确认“有 Norm”,还要看它在残差加法之前还是之后。播放器把步骤明确拆开,就是为了让相同模块名不会掩盖实际顺序。
用播放器做一次形状审计
从输入开始,每按一步都回答两个问题:当前模块是否跨 Token 交换信息?输出能否与残差支路逐元素相加?Attention 对第一个问题回答“能”,FFN 回答“不能直接交换”;所有残差汇合点对第二个问题都必须回答“能”。
如果某个内部操作暂时得到 3×12,它不能直接与 3×4 相加,必须先投影回 3×4。沿着这条规则检查一遍,就能把看似复杂的 Block 图还原为一组有明确输入输出契约的模块。