第 11 篇 · 第三部分 · 大语言模型是怎么长出来的
预训练 → 微调 → 对齐:大模型的三段式训练
大模型不是一次性训练出来的。它像上学一样分为三个阶段,每个阶段的教材、老师、考核方式都不同:先是像在图书馆里通读各类书籍,然后是岗前培训学习如何作答,再往后还需要有人纠正表达的分寸。这三段各花多少时间、多少钱,什么情况下可以跳过哪一段,是实际做项目时绕不开的问题。
一、先看全景图
把训练流程拉成一棵时间轴,大概是三截:
- 预训练(pre-training):给模型提供海量文本,让它自己预测下一个词。这一截最贵,占掉总成本的绝大部分。
- 监督微调(SFT,supervised fine-tuning):拿一批"指令—回答"对,教它照着这个格式回答。
- 对齐(alignment):用人类的偏好来调,让它答得更有分寸、更符合期待。
以上学作比:预训练是通识教育,读遍所有科目;SFT 是岗前培训,教你见了客户怎么开口;对齐则是师傅带徒弟,专门纠正说话的分寸。三段的产出完全不同——预训练出来的是一个"会续写"的模型,SFT 之后才勉强"会答话",对齐之后才算"答得让人舒服"。
这三段之间不是简单的叠加,而是有先后依赖。预训练决定了模型能力的上限,后两段在这个上限里面做引导;上限不够,后面两段再怎么努力也无法弥补。搞清这一点,判断"该不该微调"时就不会犯方向性错误。
二、预训练:读遍互联网,学语言的统计规律
预训练的任务简单得近乎朴素:给出前文,让它预测下一个词。猜错了就按交叉熵算损失,回传梯度。重复几百亿次、几千亿次。
这个目标看着单薄,但它逼着模型把中文语序、英文语法、常识、代码结构、甚至一点推理的雏形,全压进参数里。GPT-3 是 1750 亿参数,在约 3000 亿个 token 上训练,光是浮点运算量就超过 3×1023 这个量级。参数和数据的规模,就是这阶段的两个主角。
预训练里有个被反复验证的规律:模型的损失和参数量、数据量、算力之间有相当平滑的幂律关系,也就是常说的 scaling laws。它让"堆参数"这件事变得可预测——多花十倍算力,损失大约降到什么水平,可以事先估算。可这门规律只回答"更大的模型会不会更聪明",不回答"它会不会听话"。
有一点得说清楚:预训练完的模型完全不知道"听话"是什么。你问它问题,它可能顺着你的问句续写下去,因为它学的是"文本接下来会是什么",不是"被问到该怎么答"。这是后面两段存在的根本原因。
三、数据才是预训练的主角(清洗、去重、配比)
外界往往只盯着参数量,其实预训练真正的决定因素在数据。原始网页里充斥着广告、导航栏、乱码、模板文字,直接输入等于让模型只学会大量无意义的内容。
清洗这一关要做的:抽掉 HTML 标签、剔除低质量或机器生成的文本、过滤掉过短的段落。去重同样关键,同一篇新闻在互联网上被转了几十遍,如果不去重,模型会把这段内容背下来,考试遇到就"默写",泛化能力反而变差。业界常用 MinHash 这类近似去重来对付几十亿文档。
配比是另一门手艺。代码、百科、书籍、问答、网页,各占多少比例,直接决定模型的性格。代码比例高,模型逻辑和结构化输出会更稳;书籍比例高,长文连贯性更好。Chinchilla 那篇给过一条经验:给定算力预算,参数和数据量大致要按 1 : 20 的比例配(每 10 亿参数配约 200 亿 token),一味堆参数反而亏。
去重的力度也需要权衡。过严,连正常的相似句式都被删掉,数据量急剧缩水;不删,模型又会把段落背下来。常见做法是精确去重配合近似去重,目标是把"同一段文字反复出现"压到很低。有实验发现,用重复数据训练出来的模型更容易在一模一样的短语上卡住,泛化反而更差。
四、监督微调 SFT:教会"指令—回答"这个形式
SFT 的做法很朴素:准备几万条"用户这样问,助手这样答"的样本,用和预训练一样的交叉熵损失继续训练。InstructGPT 当年只用了大约 1.3 万条 SFT 样本,就足以让模型的回答形态发生明显的变化。
关键点在于损失只在"回答"那部分算。问题部分(也就是提示词)的 token 不参与计算梯度,模型集中学习"看到这类问法应该怎么组织答案"。等于是在已有的语言能力上,加了一层"对话格式"的外壳。
SFT 教会的是形式:要分点、要先给结论、要礼貌、不要顺着问句胡乱续写。至于"答得好不好""答得合不合人心意",SFT 管不了——每个问题通常只配一个参考答案,缺少好坏之间的排序信息。这件事留给对齐。
五、对齐:让回答符合人的偏好
对齐最常见的一条路线是 RLHF(基于人类反馈的强化学习),拆开主要是两步:先让标注员对同一个问题的两个回答评出"哪个更好",用这些比较数据训一个奖励模型;再用奖励模型当打分器,去优化语言模型本身。InstructGPT 就是这条流程的代表作。
它想达到的效果,可以概括成三个词:有帮助(听懂需求并给可用答案)、无害(不主动教授有害内容、不输出有害内容)、诚实(不刻意编造自己不知道的事)。这三条都太模糊了,没法写成一条公式,只能靠人来示教。具体怎么做,留到后面讲 RLHF 和 DPO 的那篇展开。
顺序上也别搞混:一般先 SFT 再对齐。SFT 铺好格式的底子,对齐才在合理的输出空间里挑更好的那些。跳过 SFT 直接进行对齐,模型连基本的对话格式都还没掌握,偏好数据也对不上。
六、三段各自的成本量级
三段花的钱差了不止一个数量级,这点在做决策时特别重要。粗线条地列一下(以 7B 级别的模型为例):
| 阶段 | 数据量 | 算力 | 大致成本 |
|---|---|---|---|
| 预训练 | 万亿级 token | 几千张卡跑数周至数月 | 数十万至数百万美元 |
| 监督微调 SFT | 几万条样本 | 几张卡跑几小时 | 几十到几百美元 |
| 对齐 | 几万到十几万条偏好对 | 多卡跑几天 | 几百到几千美元 |
差距为什么这么悬殊?预训练要看亿万个例子,每个例子都得前向加反向;SFT 只看几万个例子,跑几轮就够了;对齐虽然要同时跑好几份模型(策略、参考、奖励),但数据量小,也撑不起预训练那种规模。所以个人和小团队几乎不可能从零预训练,但进行 SFT 和轻量对齐是完全可行的。
七、什么时候该微调,什么时候用提示词或 RAG 就够了
这一块最容易造成不必要的开销。判断逻辑其实不复杂,看你要改的是"知识"还是"行为":
- 缺知识:模型不知道你公司的产品文档、最新政策。首选 RAG(检索增强生成),把文档切块存进向量库,提问时先检索再提供给模型。知识库随时更新,不用动模型权重。
- 要换格式或风格:比如固定输出某个 JSON 结构、统一某种语气。先写清楚提示词,配几个示例(few-shot),多数情况下即可满足需求。
- 要稳定改变行为:领域术语、行业黑话、固定业务流程,提示词无论怎么写都难以命中要点,或者每次都要输入一大段提示词太浪费,那就微调。
RAG 和微调还能叠加。拿 RAG 补知识,拿微调固定回答的语气和结构,各管一段,往往比强行只用其中一种更省。Lewis 等人 2020 年那篇 RAG 文章,就是把检索和生成拼在一起的开端。
还有个现实因素:微调出来的模型需要自己维护、自行部署运行,成本和责任都归你。能用提示词或 RAG 解决的情况,就不必急于修改权重。
这里还有一个常被忽略的因素:迭代速度。RAG 换了文档就生效,提示词改完当天就能上线,这两条路的反馈周期是以小时计的;权重路线改一次要重新训、重新测、重新部署。需求还在快速变化的时候,这点差别往往比一次性成本更关键。
八、灾难性遗忘与数据配比
微调有一个典型问题:灾难性遗忘。拿某个垂直领域的数据集中训练,模型在这个领域确实变强了,但通用能力会逐渐退化——原来会做数学、会写通顺英文,现在常常答不上来。原因并不复杂,梯度只往新数据的方向拉,原来的那套能力被覆盖了。
几个可行的对策:学习率压低(比预训练小一两个数量级),训练时间不要过长;在微调数据里加入 5% 到 10% 的通用指令数据,让模型"同步复习";LoRA 这类只训练旁路参数的方法也更不容易影响主干,原因后面那篇会讲。
判断有没有遗忘,办法简单但有效:微调前后各跑一遍通用能力的小测试集,比如几道数学题、几段英文写作。分数明显下降,就说明配比或者学习率出了问题,需要往回调整。
数据配比同样要盯紧。全是你那个领域的数据,模型会变得很"窄";掺太多无关数据,又把微调的效果稀释了。做法通常是从少量高质量领域样本起步,边测边加,不要一次填满。
九、一张决策表
把上面的判断压成一张表,方便对着用:
| 你的需求 | 首选方案 | 理由 |
|---|---|---|
| 补最新的、私有的知识 | RAG | 知识可更新,不动权重 |
| 换个输出格式 / 语气 | 提示词 + few-shot | 成本最低,当天能改 |
| 固定领域术语与流程 | LoRA 微调 | 行为稳定落地,成本可控 |
| 全面提升回答质量 | SFT + 对齐 | 需要偏好数据,成本更高 |
| 要一个全新基础模型 | 预训练 | 通常只有大机构承担得起 |
三段的顺序是死的,但每段你是否真的需要,得按自己的需求来定。绝大多数人卡在"要不要微调"这一步,而答案往往早在数据、算力和维护成本里写好了。
参考资料
- Tom B. Brown 等, Language Models are Few-Shot Learners, NeurIPS 2020. arXiv:2005.14165(GPT-3,预训练规模的里程碑)
- Long Ouyang 等, Training language models to follow instructions with human feedback, 2022. arXiv:2203.02155(InstructGPT,SFT + 对齐的经典流程)
- Jason Wei 等, Finetuned Language Models Are Zero-Shot Learners, ICLR 2022. arXiv:2109.01652(FLAN,指令微调)
- Edward J. Hu 等, LoRA: Low-Rank Adaptation of Large Language Models, ICLR 2022. arXiv:2106.09685(低成本微调的代表)
- Patrick Lewis 等, Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, NeurIPS 2020. arXiv:2005.11401(RAG 的原始论文)