AI 学习课程 / LESSON 13

第十三节:大语言模型的训练与使用

从“预测下一个 Token”走到“回答用户的问题”:先分清训练阶段,再亲手调采样分布、上下文预算与检索结果,定位一次回答为何没有证据。

预训练 / SFT / 偏好温度与 Top-k上下文窗口RAG 故障诊断离线 HTML

01 / 先明确模型会什么

预测下一个字符,不等于已经会可靠答题

第十二节的小模型只在四句短语上训练了 18 个字符。它学到的是“给定前缀,哪个字符可能接在后面”。真实大语言模型同样要处理 Token 序列,但训练数据、规模和后续训练会复杂得多。会续写文本,并不自动等于知道事实、能遵循指令或会承认不知道。

预训练建立语言建模能力
指令微调学习按要求回答
偏好对齐优化回答取向
推理时组织上下文、采样、检索与核查
本节的“温度”使用上一节真实训练的小模型概率;RAG 用几段本地短文和一个明确写出的词面检索器。RAG 里的回答是教学脚本,并非那个 18 字符模型生成。

02 / 参数怎样逐阶段变化

预训练、指令微调、偏好对齐解决不同问题

选择阶段看“训练数据是什么、优化什么、得到什么”。以下以自回归 decoder-only 模型为主线,不表示所有大模型必须采用完全相同的训练流水线。

训练数据

优化目标与作用

预训练和 SFT 在这里都能写成 Token 预测的交叉熵,但数据组织方式不同:SFT 让模型在“用户问题 → 期望回答”样例中练习回应。偏好数据常给同一问题的较好与较差回答;可用 RLHF 或 DPO 等方法利用这类反馈。它们是例子,不是唯一做法。指令训练论文 · DPO 论文。

偏好对齐不是给模型自动接入新的外部事实库,也不能保证每个回答正确。下一阶段的强化学习会单独从“状态、动作、奖励”开始讲,RLHF 只是强化学习的一类应用。

03 / 真实模型的一步预测

温度改变分布,Top-k 限制候选;两者都不补知识

下面的 18 个 logits 来自第十二节已训练模型,对前缀“春天来了,”预测下一字符。调温度会改变概率的尖锐程度;Top-k 只保留最高的 k 个候选并重新归一化。点击“抽取一次”会按当前分布随机抽一个字符。

下一字符概率(最高六项)

本次随机抽样

尚未抽取。

不同抽样可能得到不同字符;一旦 Top-k=1,只剩一个候选,温度再高也不会随机出其他字符。

pᵢ(T) = exp(logitᵢ/T) / Σⱼ exp(logitⱼ/T) T > 0;T 越小通常越偏向高分 Token。 Top-k:先保留 k 个最高分候选,再在其中归一化并抽样。

这里展示单个字符的一步预测,不代表完整回答的质量。温度高低只改输出选择分布,不会让不存在的事实突然进入模型参数。

04 / 窗口装的是输入加输出

检索到了,也要放得进上下文

把用户问题、指令、检索到的短文和要生成的回答都放进同一个预算里。真实模型通常按 Token 计窗口;为方便手算,本页小实验用字符槽位作为示意,数值不能当成任何真实模型的 Token 上限。

输入指令 + 用户问题 + 检索短文 + 预留输出 ≤ 上下文窗口 本页简化:固定给指令与问题留 24 个字符槽位; 剩余槽位按检索顺序放完整短文,放不下的短文不进入上下文。
资料库

正确证据根本不存在:再调窗口也装不出答案。

检索

正确证据存在,却没有进入 Top-k:先改检索。

装箱

证据进入 Top-k,却因预算不够被丢掉:检查窗口与排序。

下面的实验会同时显示“检索到”和“真正进入上下文”的文档,避免把它们混成一步。

05 / 把故障定位到具体一层

本地 RAG 诊断台

这个演示有 5 段短文。检索器只计算问题与短文共有多少种连续两个汉字,按分数排序;同分按文档原顺序。它故意很简单,便于看见词面相似不等于包含答案。问答输出由教学脚本控制,能演示“证据足够仍答错”。

问题
检索
上下文
回答
检索排序与上下文

教学脚本给出的回答

可依次试:①“海豚吃什么”,Top-k=1 → 检索失败;② Top-k=2、窗口=70 → 正确段落检索到了却没装进上下文;③ 窗口=100 → 有证据;④“蓝鲸是鱼吗”,把回答脚本改成“故意给错误答案” → 有证据但回答错误;⑤“企鹅能活多少年” → 资料库没有寿命信息。

这是可检查的故障演示,不是对真实 LLM 做性能评估。实际 RAG 还需要处理分段、召回、重排、来源可信度和答案核验。RAG 原始论文。

06 / 回答流畅不等于有证据

把“幻觉”拆成可检查的环节

模型生成的是输出 Token 的分布,而不是一个内置的事实证明器。错误答案可能来自缺少相关资料、检索没找对、窗口漏掉证据,也可能是在证据已提供时仍推断或表述错误。高温可能增加输出变化,但低温和贪心选择也可能稳定地产生错误。

先看资料是否存在

没有可信资料支持时,正确做法通常是承认无法据此回答,而不是编一个具体数字。

再看答案是否被支持

即使检索到了相关段落,也要对照原文检查事实、条件、范围和引用是否相符。

本节诊断标签采用优先顺序:资料缺失 → 检索失败 → 上下文丢失 → 有证据但回答错误。它帮助定位最早断掉的一环,并不声称涵盖所有模型错误原因。

07 / 两种常见改进手段

微调与 RAG 改的不是同一个部位

需求更先考虑理由
让回答长期遵循固定格式或行业术语指令微调 / SFT通过示例更新模型参数,学习输出方式。
让模型依据经常更新的手册、私有文档答题RAG推理时找外部资料并放进上下文,不必为每次文档更新重训生成模型。
既要固定格式,也要引用更新的资料可以结合微调负责行为格式,检索负责提供当次证据;仍需验证答案。
检索器总把错误段落排第一先改检索与重排仅调整生成模型的回答风格,不能让遗漏的证据进入上下文。

“微调”也不是自动灌入可逐条核验的新知识;RAG 也不是答对的保证。决定方案时先找瓶颈:行为、检索、上下文,还是答案使用证据的能力。

08 / 本地练习

把概率与证据链都走一遍

配套代码读取第十二节已保存的 CPU 模型权重,计算温度分布,并执行本地检索、预算装箱与故障分类。不下载模型或外部资料;无需启动服务。

uv run python lessons/lesson-13-llm-use.py

阅读代码 · 查看实验数据 · 回看第十二节

  1. 对同一组 logits 手算两个候选在 T=0.5 与 T=2 时的概率比,解释为什么温度改变相对差距。
  2. 解释 Top-k=1 为什么不受温度变化影响,并在页面多抽几次核对。
  3. 用海豚问题依次制造检索失败、上下文丢失和有证据的情况,记录 Top-k、窗口与输出预留。
  4. 用蓝鲸问题在已有正确证据时切换“故意给错误答案”,指出错误位于哪一层。
  5. 给五段短文加一段企鹅寿命资料,再运行代码,预测“资料缺失”的诊断如何改变。

09 / 自测

五道题

1. SFT 的典型训练样例是什么?

2. 维持同一组 logits,把 T 提高通常会怎样?

3. 正确文档在资料库,却不在 Top-k,先检查哪里?

4. 正确文档已在上下文,回答仍与其矛盾,是哪类?

5. 哪种方式更直接地提供当次最新文档证据?

下一阶段:强化学习。打开第十四节互动讲义。 先在小环境里理解状态、动作、奖励和长期回报,再回头看它与模型偏好训练的联系。