阅读指南
上一节了解了监督微调的概念:在预训练模型基础上,用人工标注的问答对进行额外训练。
本节将系统分解监督微调的过程,看看数据从哪里来、模型如何学习、参数如何更新。
这是监督微调的核心。那么,数据从哪里来?
主要有两个来源:
由AI训练师、众包工作者编写问答对:
问题:"什么是机器学习?"
答案:"机器学习是一种人工智能技术,它让计算机能够从数据中学习规律,
而不需要明确编程。例如,通过分析大量的猫的图片,机器学习算法
能够自动学会识别猫,而不需要人工告诉它'猫有尖耳朵、长胡须'
这些规则。"问题:"如何做番茄炒蛋?"
答案:"番茄炒蛋的做法:
- 准备2个鸡蛋,2个番茄,适量盐和糖
- 鸡蛋打散,加少许盐,炒熟盛出
- 番茄切块,炒出汁水
- 加入炒好的鸡蛋,翻炒均匀
- 加盐和少许糖调味即可"
从互联网上筛选高质量的问答数据:
筛选标准:
✓ 问题清晰
✓ 答案准确、有帮助
✓ 语言规范、友好
数据量有多少?
相比预训练的3000亿词,监督微调的数据量少得多:
GPT-3的监督微调:
为什么可以这么少? 因为预训练已经建立了语言能力,监督微调只是"教会"模型一个新的使用方式
数据质量的重要性
在监督微调阶段,质量远比数量重要。
举个例子。
低质量问答对:
问:"机器学习是什么?"
答:"机器学习就是机器学习人类的知识。" ← 废话,没有帮助
高质量问答对:
问:"机器学习是什么?"
答:"机器学习是让计算机从数据中自动学习规律的技术。
与传统编程不同,不需要告诉计算机每一步怎么做,
而是给它大量例子,让它自己总结规律。举个例子:教计算机识别垃圾邮件。传统方法是人工
写规则('包含"免费领取"这类词的是垃圾邮件'),而机器
学习是给计算机看10万封标注好的邮件,让它自己学会
判断。" ← 清晰、准确、有例子
Tip
如果你经常使用DeepSeek等模型,你会发现他们特别有礼貌,也特别喜欢用项目符号将答案有序的整理,让人看起来层次分明,详略得当。而这些特点预训练阶段是学不会的(预训练只学知识,但不学什么是更好的回答),这些都是在监督微调阶段由人类"教"给他们的。
有了问答对数据,模型如何学习?
还是预测下一个Token——但现在的上下文变成了结构化的问答对。
训练样本的构造
以一个问答对为例,原始数据(人类编写):
问题: 什么是机器学习?
回答: 机器学习是一种人工智能技术
这里的问题和答案都是人类标注员手工编写的。OpenAI雇佣了大量标注员,让他们设计各种用户可能问的问题,为每个问题编写高质量的回答,确保回答准确、有帮助、安全。
这就是为什么监督微调的数据量远小于预训练(数万条 vs 3000亿Token)——每一条都需要人工成本。
Token化
["问题", ":", "什么", "是", "机器学习", "?", "\n",
"回答", ":", "机器学习", "是", "一种", "人工智能", "技术"]
生成多个训练样本
每个位置都是一个训练样本:
训练样本1:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":"]
目标: 预测下一个Token → "机器学习"训练样本2:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":", "机器学习"]
目标: 预测下一个Token → "是"训练样本3:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":", "机器学习", "是"]
目标: 预测下一个Token → "一种"训练样本4:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":", "机器学习", "是", "一种"]
目标: 预测下一个Token → "人工智能"...依次类推
训练过程
对于每个训练样本:
- 模型根据输入预测下一个Token
- 对比目标(人类给的正确答案)
- 计算错误
- 调整参数,让模型下次更可能预测出正确答案
关键的变化:上下文的结构
看起来好像和预训练没有太大的区别?其实不然。
预训练阶段,上下文是随机的文本片段。微调阶段,上下文被结构化为"问题-答案"的格式。
举个简单的例子。
预训练阶段看到的文本是杂乱无章的:
...编程语言有很多种。Python适合初学者。JavaScript用于网页开发。..
微调阶段看到的文本是结构化的问答对:
|问题| 如何学习编程?
|答案| 学习编程可以从以下步骤开始:1. 选择一门编程语言,推荐Python作为入门 2. 学习基本语法和数据结构 3. 通过小项目练习。..
通过大量看到这种"问题→答案"的模式,模型学会了识别"|问题|"标记后面是用户的提问,识别"|答案|"标记后面应该是有帮助的回答,并且在回答中采用清晰、结构化的方式。
这是他们本质的区别:有上下文环境。这样模型才能理解这种问答对,才能模仿人类提问时应该有的回答方式。
同预训练一样,既然他叫"监督微调",那就需要告诉模型参考人类给的标准答案,并让模型根据标准答案自己调整参数。但这一步也与预训练有区别:
┌──────────────────────────────────────
│ 预训练
├──────────────────────────────────────
│ 起点:参数从随机值开始
│ 幅度:大幅度调整
│ 数据量:训练数千亿个词
│ 成本:耗时数周,花费数百万美元
└──────────────────────────────────────
┌──────────────────────────────────────
│ 监督微调
├──────────────────────────────────────
│ 起点:参数从预训练结果开始(已经很好了)
│ 幅度:小幅度调整(精调)
│ 数据量:训练数万到数十万个问答对
│ 成本:耗时数小时到数天,花费数万到数十万美元
└──────────────────────────────────────
为什么微调比预训练便宜这么多
因为微调不是重新学习语言,而是在已有能力基础上"调整行为模式":
预训练 = 培养一个博学的人(需要读万卷书,耗时十几年)
微调 = 教这个博学的人"如何当老师"(只需要几个月的教学培训)
基础能力(语言理解)已具备,只是学习一个新的应用方式。
学习率的微小控制
微调时,学习率要非常小:
预训练的学习率:0.0001 (较大,因为从零开始)
微调的学习率: 0.00001 (很小,因为只是精调)太大 → 破坏预训练学到的知识
太小 → 学不到新的任务模式
类似给一幅画精修:预训练是画出整幅画;微调是调整细节和色彩,如果修改太用力,会破坏原画。
| 中文 | English | 音标 | 说明 |
|---|---|---|---|
| 问答对数据 | QA Dataset | /kjuː eɪ ˈdeɪtəsɛt/ | 训练微调使用的问答格式标注数据集合 |
| 众包标注 | Crowdsourced Annotation | /ˈkraʊdsɔːrst ˌænəˈteɪʃən/ | 通过互联网平台分发标注任务给大量自由职业者的方式 |
| 学习率 | Learning Rate | /ˈlɜːnɪŋ reɪt/ | 控制参数更新幅度的超参数,微调时需远小于预训练 |
| 参数精调 | Parameter Fine-Tuning | /pəˈræmɪtər faɪn ˈtjuːnɪŋ/ | 在已有参数基础上做微小调整而非重新训练 |
| 上下文结构化 | Context Structuring | /ˈkɒntekst ˈstrʌktʃərɪŋ/ | 将训练数据组织成特定格式(如问题-答案)让模型学习任务模式 |