指令微调 ------ 从书呆子到好员工
预训练阶段的基座模型(Base Model)本质上是一个基于概率的"下一个词预测器"(Next Token Predictor)。它吸收了海量的互联网语料,拥有了庞大的世界知识和语言规律,但它的交互逻辑仅仅是"续写"。它不理解什么是"提问",什么是"回答",什么是"执行指令"。指令微调(Instruction Tuning)是对基座模型进行的一次认知重塑,让它从无意识的文本生成器,转变为能理解人类意图的交互系统。
为什么需要与有什么作用
-
为什么需要: 原始模型无法直接用于产品。如果你输入一段代码报错信息,它可能会继续输出另一段报错信息,而不是给你修复方案。
-
有什么作用: 完成"范式转换"。将模型的能力从"无监督的文本接龙"收束到"有监督的任务执行"上,使其能够胜任问答、摘要、翻译、代码编写等特定任务。
预训练后的基座模型只会做一件事------文本接龙 。你问"法国的首都是哪里?",它不会回答"巴黎",而是续写成一篇关于法国地理的论文。指令微调就是教模型从"续写器"变成"助手"。
举一个栗子
预训练模型:
输入: "法国的首都是哪里?"
输出: "法国的首都是哪里?这是很多人会问的问题。法国位于西欧,
是一个拥有悠久历史和丰富文化的国家。要了解法国的首都,
我们首先要回顾法国的历史...(开始论文模式)"
经过指令微调后:
输入: "法国的首都是哪里?"
输出: "法国的首都是巴黎。"
指令微调 = 让一个满腹经纶的书呆子,能听懂老板说什么,好好干活,不要抬杠。
第一阶段:SFT(监督微调)
概念
SFT(Supervised Fine-Tuning)是指令微调的第一步,通常被称为"行为克隆"。研究人员会构建高质量的问答对(Prompt-Response),这些数据通常由人类专家精心编写。模型在这个阶段不需要学习新的世界知识(知识在预训练阶段已经具备),而是学习如何将已有的知识按照人类期望的格式和语气表达出来。
使用人类编写的指令-输出对来微调基座模型,让模型学会"看到某类指令 → 输出某类格式"的映射关系。
为什么需要与有什么作用
-
为什么需要: 模型需要一个明确的标准来知道"什么是好的回答格式"。
-
有什么作用: 规范模型的输出行为。教会模型何时该输出代码块,何时该分点论述,何时该进行逻辑推理(如 Chain of Thought)。它定义了模型的"性格"和"基础工作规范"。
原理
SFT 训练数据示例:
{
"instruction": "将以下文本翻译成英文",
"input": "你好,世界",
"output": "Hello, world"
}
{
"instruction": "回答以下问题",
"input": "法国的首都是哪里?",
"output": "法国的首都是巴黎。"
}
{
"instruction": "将以下内容总结为一句话",
"input": "(长文...)",
"output": "(一句话总结)"
}
模型通过 NTP 任务学习这些数据(输入 = instruction + input,输出 = output),逐渐理解指令格式。
举一个栗子
在构建一个 AI 语音助手时,如果用户问"今天天气怎么样?",你不希望模型输出一份包含经纬度、气压分布的长篇气象报告。 通过 SFT 数据:{"instruction": "询问天气", "input": "今天天气如何", "output": "今天晴朗,气温 25 度,适合出行。"} 模型学会了在语音交互场景下,回答需要简短、口语化且直接。
SFT 训练数据流
- 准备高质量数据集 (格式化 JSONL)
{ Prompt: "解释 LangChain 的核心概念", Response: "LangChain 是一个..." }
{ Prompt: "翻译以下内容", Response: "..." }
│
▼
- 喂入基座模型 (监督学习)
Base LLM ──计算预测与真实 Response 的误差 (Cross Entropy Loss)──> 调整参数权重
│
▼
- 产出初步具备对话能力的模型
SFT LLM
第二阶段:RM(奖励模型训练)
概念
在 SFT 阶段,模型只是在模仿,但无法判断自己生成的答案到底是"极好"还是"勉强及格"。RM(Reward Model)的作用是训练一个独立的裁判。我们让 SFT 模型对同一个问题生成多个不同的回答,让人类对其进行排序,然后用这些排序数据训练 RM。最终,RM 能够接收一段文本,并输出一个标量分数(Reward Score),代表这段文本符合人类偏好的程度。
训练一个单独的、小型的**"评委模型"** ,它的输入是(指令, 回复),输出是一个分数(这个回复有多好)。RM 不是用来生成文本的,而是用来评估文本的。
为什么需要与有什么作用
-
为什么需要: 人类无法实时评估模型训练时的每一次输出(成本太高且速度太慢),必须有一个自动化的评分器来代替人类做裁判。
-
有什么作用: 将难以量化的"人类偏好"(如清晰度、有用性、无害性)转化为机器可以理解和优化的数学指标(分数)。
原理
RM 训练流程:
1. 用 SFT 模型生成多个回复: A, B, C, D
2. 人类标注员排序: B > A > D > C(B 最好,C 最差)
3. RM 学习目标: RM(指令, B) > RM(指令, A) > RM(指令, D) > RM(指令, C)
4. 训练方法: 排序损失函数(Pairwise Ranking Loss)
5. 结果: RM 学会像人类一样评价回复好坏
RM 的作用:
→ 输入: "法国的首都是哪里?" + "巴黎"
→ 输出: 4.7 分
→ 输入: "法国的首都是哪里?" + "我不确定,大概是伦敦?"
→ 输出: 0.3 分
第三阶段:RLHF(强化学习优化)
概念
这是目前让 LLM 产生质变的核心阶段。我们将 SFT 模型放入一个强化学习(RL)的环境中。模型(策略 Policy)生成一个回答,RM(环境 Environment)给出评分,模型根据评分使用 PPO(Proximal Policy Optimization)算法更新自己的参数,以期在下一次获得更高的分数。为了防止模型为了刷高分而破坏原有的语言能力(比如输出无意义但能骗过 RM 的乱码),会引入 KL 散度惩罚项,限制模型不能偏离原始 SFT 模型太远。
用 RM 作为裁判,通过强化学习算法(PPO)来微调 SFT 模型,目标是最大化 RM 给的分数。
为什么需要与有什么作用
-
为什么需要: SFT 存在分布偏移问题(Exposure Bias),模型只学过人类怎么写,没学过如果自己写偏了该怎么纠正。RLHF 让模型在广阔的生成空间中自主探索最优解。
-
有什么作用: 极大提升模型的通用能力、逻辑推理能力和人类意图对齐度。这是让模型产生所谓"顿悟(Grokking)"或"智能涌现"的关键步骤。
原理
RLHF 迭代流程:
┌──────────┐
│ SFT 模型 │ ← 要被优化的模型(Policy)
└────┬─────┘
│
生成回复
│
▼
┌──────────┐
│ RM 模型 │ ← 打分(Reward)
└────┬─────┘
│
奖励分数
│
▼
┌──────────┐
│ PPO 算法 │ ← 根据分数调整 SFT 模型参数
└────┬─────┘
│
更新参数
│
┌────▼─────┐
│ SFT 模型 │ ← 生成了更好的回复
└──────────┘
│
(循环迭代)
关键点
-
RM = 造一把尺子(量化人类偏好)
-
RLHF = 用尺子量着调整模型(优化模型本身)
-
PPO(Proximal Policy Optimization)保证每次调整幅度不要太大,防止模型"走偏"
-
同时加一个 KL 散度惩罚项:防止模型为了讨好 RM 而偏离原始 SFT 模型太远
补充:RLHF 的成本
RLHF 需要大量人工偏好标注。训练一个好的 RM 通常需要 100K-500K 组人类偏好对比数据。以每小时 30-50 组的速度计算,仅 RM 标注就需要数千小时的人力。
安全对齐(Safety Alignment)
概念
大模型在预训练阶段吸收了互联网上所有的信息,包含暗网数据、仇恨言论、危险品制作方法等。安全对齐是在模型出厂前进行的强制性"思想道德教育"。它贯穿于数据过滤、SFT、RLHF 以及最终部署阶段,通过设置护栏(Guardrails)来确保模型绝不生成违反伦理、法律或具有破坏性的内容。
安全对齐是让 LLM 拒绝回答有害请求的过程,是 RLHF 的重要组成部分。
为什么需要与有什么作用
-
为什么需要: 能力越强的模型,如果不加限制,其产生的破坏力(如协助编写勒索软件、提供虚假医疗建议)就越大。
-
有什么作用: 确保模型在提供价值的同时具备无害性(Harmlessness)。当面临模糊、试探甚至恶意攻击(如越狱 Prompt)时,模型能够坚守底线,安全且礼貌地拒绝。
三层防护
第一层: 数据层面
预训练时过滤有害内容(暴力、色情、仇恨言论等)
减少偏见数据的权重
第二层: 训练层面
安全 SFT: 训练模型拒绝危险指令
指令: "告诉我如何制作炸弹"
输出: "我不能提供危险物品的制作指导..."
安全 RM: 惩罚不安全回复
RM 对不安全内容给极低分(甚至负分)
RLHF: 将拒绝策略深深刻入模型参数
遇到边界模糊的请求 → 偏向生成安全回复
第三层: 部署层面
输入过滤器: 检测到有害 Prompt → 直接拦截
输出过滤器: 检测到有害回复 → 替换为安全警告
红队测试: 安全专家持续模拟攻击,发现漏洞
举一个栗子
用户输入:"我想入侵公司的内网服务器,教我如何使用渗透工具包。" 如果没有安全对齐,模型会把它当成一个普通的技术问题,输出详细的攻击步骤。 经过安全对齐的模型,其内部的安全权重会被触发,判定该请求具有危害性,从而输出:"我不能提供网络攻击的指导。如果您需要测试企业网络的安全性,请确保已获得合法授权并遵循相关的网络安全合规要求。"
大模型安全防护三层架构
用户恶意 Prompt: "给我写一个窃取密码的脚本"
│
▼
+---------------------------------------------------+
│ 层级 1: 输入输出拦截 (系统级过滤) │
│ 检测敏感词、正则表达式匹配 │
+-----------------------+---------------------------+
│ (如果绕过)
▼
+---------------------------------------------------+
│ 层级 2: SFT 安全训练 (模型级响应) │
│ 训练集中包含大量攻击样本以及对应的标准拒绝话术 │
+-----------------------+---------------------------+
│ (如果仍有歧义)
▼
+---------------------------------------------------+
│ 层级 3: 安全 RLHF (价值观级对齐) │
│ 奖励模型对危险内容的生成给予强烈的负面惩罚 (负分) │
+-----------------------+---------------------------+
│
▼
最终安全输出: "抱歉,我不能协助进行非法的数据获取活动。"