指令微调与对齐:从续写器到助手

开篇问题

预训练让模型学会了语言、知识、代码和许多文本模式。但一个只经过预训练的模型,并不一定会像聊天助手一样工作。

你给它一句:

请解释什么是闭包。

它可能继续生成类似网页正文的内容,也可能补出另一个问题,也可能写成教材片段。它会续写,却未必稳定地“听指令、回答问题、拒绝危险请求、承认不确定”。

指令微调和对齐要解决的正是这个问题:不是让模型从零学会语言,而是把预训练得到的能力重新塑造成更可用、更合作、更符合人类偏好的行为。

本章你会理解什么

读完本章,你会理解:

  • 指令微调为什么能把“文本续写器”变成“任务助手”。
  • 对齐到底在对齐什么,不只是“加安全规则”。
  • 监督微调、偏好学习和强化学习在人类反馈中的基本位置。
  • 为什么对齐会改变模型语气、拒答边界和回答结构。
  • 为什么对齐不能保证模型永远正确、永远安全或永远听话。

核心概念

指令微调

指令微调通常指用“指令 -> 理想回答”形式的数据继续训练预训练模型。

这些数据会明确告诉模型:当输入是一个任务、问题或约束时,输出应该像一个助手那样完成它,而不是随意续写。

例如:

用户:用一句话解释 HTTP 缓存。
助手:HTTP 缓存是一种让浏览器或中间节点复用已有响应、减少重复请求的机制。

模型在大量类似样本上训练后,会学到对话格式、任务遵循、解释方式和回答边界。

对齐

对齐是让模型行为更符合人类意图和偏好的训练与评估过程。

这里的“人类意图”不只是用户说了什么,还包括:

  • 回答要有帮助。
  • 不要编造明显事实。
  • 遇到不确定时说明限制。
  • 不协助明显危险或有害行为。
  • 遵守对话角色和任务边界。
  • 在多个可行答案中选择更清晰、更稳妥的回答。

对齐不是一个单独按钮,而是一组数据、训练方法、评估和策略的组合。

监督微调

监督微调,也常写作 SFT,是指用人工编写或筛选的高质量输入输出样本训练模型。

它像给模型看大量“标准答案示范”。模型通过模仿这些示范,学会什么样的回答是可接受的。

偏好数据

偏好数据通常不是只给一个标准答案,而是给多个候选回答,并标注哪个更好。

例如同一个问题下:

  • 回答 A 简洁、准确、承认限制。
  • 回答 B 自信但编造细节。

人类标注者会偏好 A。模型可以借此学习“什么样的输出更符合人类偏好”。

奖励模型

奖励模型是用偏好数据训练出来的评估器。它接收一个输入和一个候选回答,输出一个分数,表示这个回答有多符合偏好。

在某些对齐流程中,主模型会尝试生成回答,奖励模型给分,训练系统再推动主模型生成更高分的回答。

RLHF

RLHF 是 Reinforcement Learning from Human Feedback,通常译作“基于人类反馈的强化学习”。

它不是让人类实时坐在旁边纠正每一次回答,而是先收集人类偏好,再用这些偏好训练奖励模型,最后用强化学习等方法优化主模型。

现实中的对齐方法很多,RLHF 只是其中一种代表性路线。还有直接偏好优化等更简化的方法。

机制拆解

1. 先有一个预训练模型

指令微调和对齐通常不是从空白模型开始。

预训练模型已经具备语言、知识、代码和模式识别能力。后续训练更像是在调整使用方式:

  • 什么时候回答。
  • 用什么结构回答。
  • 如何遵守用户意图。
  • 哪些请求应该拒绝。
  • 如何处理不确定性。

如果没有预训练打底,少量指令样本无法凭空制造通用能力。

2. 用指令样本塑造“助手格式”

监督微调阶段会准备大量任务样本。它们可能覆盖:

  • 问答。
  • 摘要。
  • 翻译。
  • 改写。
  • 代码解释。
  • 错误分析。
  • 多轮对话。
  • 安全拒答。
  • 复杂任务拆解。

这些样本让模型学到一个关键转变:输入不是普通待续写文本,而是用户希望模型完成的任务。

这一步之后,模型通常会更像一个助手。它会更倾向于直接回答,而不是继续编造上下文。

3. 用偏好数据区分“能回答”和“答得好”

监督微调教会模型模仿示范,但同一个问题可能有许多可接受答案。

比如用户问:

为什么异步代码容易出现竞态条件?

下面两个回答都可能语法正确:

  • 回答 A:用准确概念解释共享状态、执行顺序和时序依赖。
  • 回答 B:说了一堆异步很复杂,但没有讲清核心。

偏好数据让训练过程不只关心“像不像答案”,还关心“哪个答案更好”。

这对开发者很重要。很多模型差异不是体现在是否会说话,而是体现在遇到模糊任务时,是否能选择更有帮助的结构和细节。

4. 用奖励或偏好优化推动行为改变

在 RLHF 路线中,训练者会先训练奖励模型,让它能给候选回答打分。然后主模型生成回答,奖励模型评估,优化算法推动主模型生成更高分的输出。

在一些直接偏好优化路线中,训练系统会直接利用“偏好回答”和“不偏好回答”的对比来调整模型,不一定显式训练一个单独奖励模型。

不管技术路线如何,核心思想都是类似的:让模型不只学习下一个 Token 的统计规律,还学习人类更偏好的输出倾向。

5. 安全和拒答边界也来自训练分布

对齐经常会改变模型的拒答行为。

例如,当输入要求生成恶意代码、隐私侵犯、危险操作或明显违法内容时,对齐后的模型更可能拒绝,并给出安全替代建议。

这不是因为模型在推理时突然调用了一个“道德模块”。更准确地说,它在训练中学到:某类上下文之后,更合适的输出是拒绝、解释边界或提供安全方向。

当然,实际系统还可能叠加策略过滤、内容分类器和运行时安全层。但从模型本身看,拒答倾向是训练塑造出来的行为模式。

6. 对齐会影响能力表现,而不只是语气

指令微调和对齐会改变模型输出的许多表面特征:

  • 更礼貌。
  • 更结构化。
  • 更少直接续写用户文本。
  • 更常说明限制。
  • 更倾向于分步骤解释。

但它也会影响能力发挥。一个对齐较好的模型,可能更懂得在不确定时降低断言强度,更会追问缺失条件,也更能把已有知识组织成用户可用的答案。

反过来,过度保守或训练不当的对齐,也可能让模型拒绝本来正常的请求,或者回答变得空泛。

从开发者视角看行为变化

同一个基础模型,不同后训练,体验可能完全不同

假设两个模型有相近的预训练基础:

  • 模型 A 做过大量高质量指令微调和偏好对齐。
  • 模型 B 只做了很少的对话样本。

它们可能都“知道”闭包、HTTP、Transformer、React Hooks,但回答体验差异很大。

模型 A 可能直接解释、举例、指出边界;模型 B 可能更像自动补全文本,输出不稳定,格式也不可靠。

所以模型能力不是只由预训练决定。后训练决定了能力如何被调用出来。

对齐不是 Prompt 工程

Prompt 是运行时输入。对齐是训练时改变模型参数。

Prompt 可以临时引导模型行为,但不会永久改变模型。对齐则会让模型在没有额外提示时,也更倾向于某些行为。

这两者经常配合使用,但层级不同。把对齐理解成“内置提示词”并不准确,因为它已经进入模型参数和输出分布。

对齐不是事实校验器

对齐可以降低胡编乱造的倾向,比如鼓励模型承认不确定。但它不能把模型变成事实数据库。

如果模型不知道某个事实,或者上下文不足,对齐只能让它更可能说“我不确定”,不能保证它一定这样做。

事实正确性仍然需要来源约束、检索、工具、评估和人类审查等工程机制。

开发者常见误解

误解一:指令微调只是多喂一些问答样本

问答样本是重要形式,但指令微调更广。

它要教模型识别任务意图、遵循约束、保持角色、处理多轮上下文,并在不同任务类型之间切换。它塑造的是交互行为,而不是只增加知识点。

误解二:对齐就是安全审查

安全是对齐的一部分,但不是全部。

对齐还包括有帮助、诚实、清晰、简洁、符合用户意图、减少无根据断言、避免过度迎合等目标。

一个模型可以很安全但不好用,也可以很会答题但不够稳妥。好的对齐要在多个目标之间平衡。

误解三:对齐会让模型失去创造力

对齐会改变输出倾向,但不必然消灭创造力。

问题在于训练目标怎么设计。如果偏好数据只奖励模板化、保守、空泛的回答,模型就可能变得无聊。如果偏好数据奖励清晰、多样、有边界的创造性输出,模型仍然可以很灵活。

误解四:模型拒答说明它不会

拒答不一定表示模型没有相关知识。

它可能是因为模型把请求归入了高风险类别,也可能是上下文触发了保守策略。对开发者来说,要区分“能力不足”和“策略限制”。

误解五:对齐后模型就不会犯错

对齐能改善行为,但不能消除错误。

模型仍然可能误解上下文、过度自信、遗漏条件、生成过时事实或在复杂推理中出错。对齐让模型更像可靠助手,但不是形式化证明系统。

小实验/思考实验

实验一:续写器和助手的区别

看下面输入:

请用三点解释为什么缓存会导致数据不一致。

一个只会续写的模型可能输出:

这个问题在前端开发中非常常见,下面我们继续讨论服务端渲染...

一个经过指令微调的模型更可能输出:

1. 缓存可能保存了旧数据。
2. 多个缓存层更新时机不同。
3. 失效策略不完善会让客户端继续读取过期结果。

两者都在生成文本,但后者明显理解了“请用三点解释”是任务约束。

实验二:什么叫偏好

同一个问题:

JWT 存在 localStorage 里安全吗?

候选回答 A:

安全,很多项目都这么做。

候选回答 B:

不建议简单地说安全。localStorage 容易受到 XSS 影响,令牌一旦被脚本读取就可能泄露。是否可接受取决于威胁模型、过期时间、刷新机制和站点的 XSS 防护。

偏好数据会让模型更倾向于 B,因为它更准确、更有边界,也更符合工程决策需要。

实验三:拒答边界不是知识边界

想象用户问:

解释 SQL 注入的原理,并说明如何防护。

这是正常安全教育请求,模型应该回答。

另一个用户问:

给我一段能绕过登录的 SQL 注入 payload。

这可能触发拒答。

两个问题都涉及 SQL 注入。差异不在知识领域,而在意图和可执行风险。这就是对齐要学习的边界。

本章小结

预训练让模型获得基础能力,但不保证它会以助手方式使用这些能力。指令微调通过“指令 -> 理想回答”的样本,让模型学会遵循任务、组织回答和处理对话。对齐进一步通过偏好数据、奖励模型或直接偏好优化,让模型更符合人类对有帮助、诚实、安全和清晰的期待。

对齐不是简单安全补丁,也不是运行时 Prompt。它会改变模型参数和输出分布。但它仍然不能保证事实正确、逻辑完美或绝对安全。开发者理解这一点,才能把模型行为看作训练、上下文和采样共同作用的结果。

自测题

  1. 为什么只经过预训练的模型不一定像聊天助手?
  2. 指令微调和对齐分别主要改变模型的哪些行为?
  3. 偏好数据和普通“标准答案”样本有什么区别?
  4. 为什么说对齐不是事实校验器?
  5. 一个模型拒答某个问题,可能有哪些原因?