反向传播:模型是怎么学习的
记录于 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 各自在哪个层面起作用