wp_title: 用费曼学习法,5分钟学会LLM的监督微调阶段 wp_slug: "" wp_status: publish wp_excerpt: "" wp_categories: [] wp_tags: [] wp_post_id: 192 wp_url: https://an.lovescie.com/archives/192 wp_published_at: 2026-05-26T21:59:02
wp_updated_at: 2026-05-26T21:59:02
简介
在理解了预训练的基础上,SFT(监督微调)阶段会更容易理解。不过,“自己理解”和“讲给别人听”确实不一样——讲出来需要花费更多时间去求证内心的疑惑,但收获也更大。
想学习 LLM 详细内容的朋友可以去 B 站 或 YouTube 搜索:安德烈·卡帕西(Andrej Karpathy)的三小时深度讲解。
一、预训练快速回顾
预训练的核心是让模型在互联网所有文本上学习语言规律。可以类比为:一个大脑空白的小婴儿,我们给他灌输互联网上的所有知识。具体分为三步:
- 数据收集与清洗:从互联网抓取海量文本,去除广告、垃圾信息,最终得到约 44 TB 的精华数据。
- Token 化:将文本转化为 token(词元)。例如,字母
l、o、w在 BPE 算法中因为高频共现而被合并为一个 tokenlow,从而减少序列长度、提高效率。 - 训练模型:核心目标就是学会预测下一个 token。模型像一个黑盒,内部是拥有几十亿甚至上百亿参数的数学函数。训练就是不断调整这些参数(如同调节无数旋钮),使输出概率越来越接近真实文本。
二、什么是 SFT 监督微调?
问题:预训练后的模型只会“续写”,不会“回答”
预训练结束后得到的是 Base Model(基础模型),但它有一个大问题:只会接着往下写,不会回答问题。
例如,当用户询问“1+1 等于多少”时,AI 可能回答“1+1=2,2+2=4,3+3=6”——因为它学到的就是在互联网文本中最常见的“续写”模式,而不是回答问题。
我们的真正需求是:当用户问“1+1 等于几”时,AI 直接回答“等于 2”。
解决方案:SFT 监督微调
SFT 本质上和预训练做的是同一件事——预测下一个 token,但有一个关键变化:训练数据变了。
- 预训练阶段:数据是普通文章(如 44 TB 的互联网文本)。
- SFT 阶段:数据变为对话数据(由人工标注员根据规范标注的高质量问答对)。
在训练过程中,模型输入一个对话,经过神经网络得到输出概率,与对话集中的标准答案进行比较,不断微调参数,使模型逐渐学会以“回答”而非“续写”的方式说话。
之所以叫“微调”,是因为 SFT 使用的数据量远小于预训练(预训练用几十 TB 数据,SFT 可能只用到几千到几万条高质量对话),因此只在预训练模型参数基础上做细微调整。
三、SFT 阶段的核心症结:模型幻觉
完成 SFT 后,模型常常会出现幻觉——明明不知道答案,还要一本正经地编造。
根本原因在于:训练数据中,几乎所有问题都有标准答案,几乎没有“我不知道”这种回答。
模型因此学会了一件事:不管会不会,都要回答。
常见缓解方案
| 方案 | 做法 |
|---|---|
| 数据层面 | 在训练数据中主动加入“我不知道”类样本,让模型学会有时可以不回答 |
| 工具层面 | 给模型接入外部工具(如搜索引擎、数据库),不知道时去查询,而不是编造 |
四、常见误区
1. “你是谁”这类问题没有意义
模型没有自我意识,本质上只是一个概率系统。它会根据训练数据生成最可能的答案。
如果互联网上大量文本都说“我是 ChatGPT”,那么即便这个模型不是 ChatGPT,它也很可能这么回答。
2. 模型不擅长数数和拼写
例如问“strawberry 里面有几个 r”,模型可能回答错误。
原因在于:预训练阶段文本已被切分为 token,模型看到的不是字母 s t r a w,而是 straw 和 berry。
解决方法:让 AI 调用外部代码完成数数任务。
3. 模型在简单比较时也会出错
例如问“9.9 和 9.11 谁大”,模型有时会回答“9.11 更大”。
原因:模型不是逻辑计算器,而是统计系统。它可能把数字当成“章节编号”模式来处理(如第 9 章第 11 节 > 第 9 章第 9 节),而不是数学比较。
五、流程总结
| 阶段 | 核心目标 | 训练数据 | 输出表现 |
|---|---|---|---|
| 预训练 | 学会语言、学会接话 | 海量互联网文本 | 续写 |
| SFT 监督微调 | 学会对话、学会回答 | 人工标注的高质量问答 | 回答 |
本质:一个从“续写”到“回答”的转化过程。
面试题与参考答案
1. 什么是 SFT(监督微调)?它在 LLM 训练中扮演什么角色?
答: SFT 是在预训练好的 Base Model 基础上,使用人工标注的高质量问答数据对模型进行微调,使其从“习惯续写”转变为“习惯回答问题”。它是将通用语言模型转化为可用对话模型的关键环节。
2. SFT 和预训练在训练方式上有什么相同点和不同点?
答: 相同点:两者本质上都是在做“下一个 token 预测”。不同点:预训练使用海量、低质量的互联网文本数据;SFT 使用少量、高质量的人工标注对话数据。
3. SFT 为什么被称为“微调”?
答: 因为 SFT 使用的数据量远小于预训练(千/万级 vs 万亿级),因此只对预训练好的模型参数做相对小幅的调整,故称微调。
4. 模型产生幻觉的主要原因是什么?
答: 训练数据中几乎所有问题都有标准答案,几乎没有“我不知道”的样本。模型因此学会“不管会不会,都要回答”。
5. 缓解模型幻觉的常见方案有哪些?
答: 两种主流方案:① 在训练数据中加入“我不知道”类样本;② 给模型接入外部工具(如搜索引擎、数据库),让模型在不确定时去查而非去编。
6. 为什么模型不擅长数单词里的字母数量(如“strawberry 里有几个 r”)?
答: 因为模型看到的是 token(词元)而非字母。例如 strawberry 可能被拆分为 straw 和 berry 两个 token,模型没有真正看到每个字母。
7. 为什么模型在比较 9.9 和 9.11 时可能出错?
答: 模型本质是统计系统而非逻辑计算器。它可能按照类似“章节编号”的模式来处理数字(如 9.11 误认为第 9 章第 11 节大于第 9 章第 9 节),而不是严格按照数学大小比较。
8. 用户问“你是谁”这样的问题,对模型来说有意义吗?
答: 没有实质意义。模型没有自我意识,它只是根据训练数据中的统计规律来生成最大概率的回答。如果训练数据中说“我是 ChatGPT”,它就会这样回答,无论它实际是什么模型。