Skip to content

反向传播:模型是怎么学习的

记录于 2026-05-18,对话整理


核心思路

模型输出错了 → 算出错多少(误差)→ 从后往前,每个参数算"我该调多少" → 全部微调一点 → 重复百亿次


一个具体例子

任务:预测"猫 在 屋顶 ___"的下一个词

正确答案:跑   (这个词在训练文本里就有,是真实数据)
模型输出:睡   概率分布 [睡:0.6, 跑:0.3, 飞:0.1]

计算误差(Loss)

正确答案 = "跑" 的概率应该是 1.0
模型预测   "跑" 的概率是     0.3
误差 = -log(0.3) ≈ 1.2    (越接近1误差越小)

从后往前算:链式法则

误差从输出层往前"传",每一层都算自己对误差的贡献:

误差 1.2

  ▼ 全连接层(输出层):我的权重该调多少?→ 算出 Δ全连接

  ▼ 第N个注意力层:我该调多少?→ 算出 Δ注意力

  ▼ ...

  ▼ Embedding 层:"猫"那行要调多少?→ 算出 Δ猫的向量

这就是链式法则:后面层的误差乘上当前层的斜率 = 当前层的调整量。


锅怎么分

"猫 在 屋顶"这三个词都参与了预测,所以:

  • 注意力权重分析:模型主要在看哪个词?
  • 看得多的词,承担更多的"锅"
  • 每个词的 Embedding 行,根据"参与程度"各自调整

不是某一个词单独背锅,是按贡献比例分担误差


正确答案从哪来

训练用的是真实文本(自监督学习),不需要人工标注:

训练数据(互联网文本):
"猫 在 屋顶 跑 来 跑 去"

模型看到:猫 在 屋顶 [?]   → 正确答案就是 "跑"
模型看到:在 屋顶 跑 [?]   → 正确答案就是 "来"
...

每一句话都能自动生成无数个"题目+答案"对,这就是为什么 LLM 可以用海量数据训练,不需要人工标注每一条。


和我们工作的关系

作为 LLM 应用工程师,不需要手写反向传播。但理解它有用:

  • 知道为什么"训练数据质量"很重要(垃圾数据 → 错误的梯度信号)
  • 理解为什么模型在罕见知识上更容易出错(训练数据少 → 那块参数没调好)
  • 知道 fine-tune / RAG 各自在哪个层面起作用

Built with VitePress