24

前向传播——从输入到 loss 的完整路径

阅读约 4 分钟第 24/60 课

前五个单元搭建了 Sophia 的全部架构。这个单元开始讲训练——模型怎么从随机参数变成能理解语言的状态。

训练的第一步是前向传播:把一段训练数据从模型的入口送到出口,算出 loss。

完整的前向路径

让我们跟着一段训练文本走一遍完整的前向传播。假设训练文本是「机器学习很有趣」,tokenizer 把它切成了 5 个 token:[3847, 2190, 1523, 892, 4401]。

第一步:嵌入层。

5 个 token ID 通过嵌入表,各查出一个 1,536 维向量。得到一个 5×1,536 矩阵。

第二步:28 层 Transformer。

每一层做两件事:注意力 + 前馈网络,各有残差连接和 RMSNorm。5×1,536 矩阵经过 28 层变换,仍然是 5×1,536——维度不变,但向量的内容被逐层修正,融入了越来越丰富的上下文信息。

第三步:输出层。

最后一层的 RMSNorm 输出乘以输出投影矩阵(1,536×65,536),得到一个 5×65,536 矩阵。每个 token 位置对应一行 65,536 个数字——这是对词表中所有 65,536 个 token 的原始分数(logits)。

第四步:softmax 和 loss。

对每个位置的 65,536 个 logits 做 softmax,得到概率分布。然后跟正确答案计算交叉熵。

训练时的「正确答案」是什么?就是序列中的下一个 token:

位置 0 ("机器")的正确答案是 位置 1 的 token("学习")
位置 1 ("学习")的正确答案是 位置 2 的 token("很")
位置 2 ("很")  的正确答案是 位置 3 的 token("有趣")
位置 3 ("有趣")的正确答案是 位置 4 的 token(句末标记)

4 个位置各有一个交叉熵值。把它们平均起来就是这段文本的 loss。

一个数字的旅程

跟踪一个具体的数字可以帮助你感受前向传播的规模。

嵌入层查表后,位置 0 的向量有 1,536 个数字。这 1,536 个数字进入第一层:

  • RMSNorm:1,536 次乘法(除以 RMS)
  • 注意力的 Q、K、V 生成:3 次矩阵乘法,每次 1,536 × 1,536 ≈ 236 万次乘加
  • 点积计算、softmax、加权汇总
  • 残差连接:1,536 次加法
  • RMSNorm:1,536 次乘法
  • 前馈网络:3 次矩阵乘法(gate、up、down),加激活函数
  • 残差连接:1,536 次加法

这是一层的计算量。乘以 28 层,再加上最后的输出投影(1,536 × 65,536 ≈ 1 亿次乘加)。

一段 5 个 token 的文本的前向传播,总计约几十亿次浮点运算。这就是为什么训练语言模型需要 GPU——CPU 做几十亿次浮点运算要好几秒,GPU 只需要几毫秒。

Loss 是一个数字

经过这一切计算之后,前向传播的最终输出是一个数字:loss。

这个数字衡量了模型在这段训练文本上的预测有多差。如果模型完全是随机的(训练刚开始),loss 很高(Sophia 的初始 loss 约 11.39)。随着训练进行,loss 逐渐降低。

但光有 loss 还不够——模型还需要知道「怎么调参数才能让 loss 变小」。这就是下一章节的主题:反向传播——梯度是怎么从 loss 一路算回到每一个参数的。

下一章节是训练理论中最核心的部分。如果你理解了反向传播,就理解了深度学习训练的全部机制。