SFT

SFT (Supervised Fine-Trainning,有监督微调) 指在预训练模型基础上,用人工标注的输入输出数据继续训练模型,让它更好地完成特定任务并遵循指令。预训练主要学习通用知识和语言能力,SFT 则更关注任务适配和行为对齐。很多大模型都会先经过 SFT,再结合 RLHF 等方法进一步优化回答质量和用户体验。

SFT 目的

  • 让模型更好地遵循指令
  • 提升某类任务的效果
  • 让输出风格更稳定、更符合业务需求
  • 降低模型“会但不按要求答”的问题

SFT 训练数据形式

  • 指令 / 问题
  • 期望输出 / 标准答案

SFT 流程

流程总结

  1. 明确任务目标:确定希望模型提升哪些能力以及输入输出格式;
  2. 收集和构造高质量的监督数据,通常是 prompt-response 或 instruction-answer 形式;
  3. 对数据进行清洗、去重和格式统一,并转换成适合模型训练的模板
  4. 用 tokenizer 将文本编码成 token,同时构造 attention mask 和 labels;
  5. 在预训练模型基础上进行监督微调,通常使用交叉熵损失让模型学习生成期望输出;
  6. 通过自动评估和人工评估检查效果,再根据结果持续做数据和训练策略迭代优化。

收集和构造训练数据

数据来源通常有几种:

  • 人工标注
  • 业务历史数据清洗
  • 规则生成
  • 用更强模型生成后再人工筛选
  • 公共指令微调数据集

通常是这种形式:

  • Prompt / Instruction:用户输入、问题或任务描述
  • Response / Output:理想回答

数据清洗与格式化

  • 去重
  • 去掉低质量、错误、冲突样本
  • 统一格式
  • 过滤脏数据和异常字符
  • 控制回答长度和风格一致性
  • 检查是否有安全风险或隐私信息

之后把数据组织成模型可训练的格式。如单轮格式或指令模板形式。

单轮形式

用户:什么是机器学习?
助手:机器学习是让计算机通过数据学习规律并进行预测或决策的方法。

指令模板形式

[INST] 请解释什么是过拟合 [/INST]
过拟合是指模型在训练集上表现很好,但在测试集或新数据上泛化能力较差。

如果是聊天模型,还会进一步套成 chat template

分词与样本编码

把文本转成模型可以处理的 token 序列。通常包括:

  • tokenizer 编码
  • 截断或拼接长文本
  • 设置最大长度
  • 构造 attention mask
  • 构造 labels

在 SFT 中,通常只对 assistant 输出部分计算 loss,而用户输入部分更多是作为条件输入,不参与或弱参与损失计算。

监督微调训练

步骤

  • 从预训练模型加载参数
  • 用构造好的输入输出样本做 next-token prediction
  • 通过交叉熵损失训练模型
  • 更新参数,让模型更倾向生成期望答案

常见训练方式

  • Full Fine-tuning:全参数微调
  • LoRA / QLoRA:参数高效微调
  • PEFT:只训练少量附加参数

训练时关注的超参数

  • learning rate
  • batch size
  • epoch
  • warmup
  • max length
  • gradient accumulation
  • mixed precision

评估与迭代

自动评估

  • Rouge / BLEU
  • Accuracy / F1
  • Perplexity
  • Exact Match
  • Pass@k(代码任务)

人工评估

  • 是否符合指令
  • 是否表达自然
  • 是否有事实错误
  • 是否安全
  • 是否符合业务风格

继续迭代方式

  • 补充数据
  • 修正坏样本
  • 调整超参数
  • 改模板
  • 重新训练

SFT vs 预训练

  • 预训练:让模型从海量通用语料里学语言规律和世界知识
  • SFT:让模型学会更具体地执行任务、遵守格式和对话规则

SFT vs RLHF

  • SFT:直接学习人工给的标准答案
  • RLHF:在 SFT 基础上,再利用人类偏好反馈做强化学习优化

SFT 优点和局限

优点

  • 实现相对直接
  • 数据格式清晰
  • 能明显提升任务表现和可控性

局限

  • 依赖标注数据质量
  • 容易把数据中的偏差也学进去
  • 对复杂偏好和开放式质量优化,往往不如后续的偏好对齐方法

RLHF

RLHF (Reinforcement Learning from Human Feedback),是大模型对齐的经典方法。它通常包含三个阶段:第一步是 SFT,用监督数据让模型具备基本的指令跟随能力;第二步是基于人类偏好数据训练奖励模型,让模型学会区分哪些回答更好;第三步是通过强化学习,比如 PPO,让语言模型朝着更高奖励的方向优化。RLHF 的核心价值在于,它不仅让模型会回答问题,还让回答更符合人类对帮助性、安全性和自然性的要求。

RLHF 目的

只靠预训练和 SFT,模型虽然能回答,但常见问题是:

  • 回答不够符合用户真实偏好
  • 容易啰嗦、跑题
  • 可能生成不安全或不稳妥的内容
  • 对开放式问题,难以只靠“标准答案”定义质量

RLHF 的优势就在于,它不是只学标准答案,而是学人类更喜欢哪种回答。

RLHF 训练流程

1. 准备预训练模型

进行 RLHF 前,通常需要准备一个已经进行过大规模预训练的语言模型。这个阶段模型已经具备基本语言理解和生成能力、一定的知识记忆以及通用推理和表达能力,但是还存在某些问题,如不一定擅长遵循指令、回答风格不稳定、对开放式问题不一定符合人类偏好、可能生成不符合规范内容等。

需要通过 SFT 和 RLHF 做进一步对齐。

2. 通过SFT进行监督微调

如果直接做强化学习,模型连基本的回答格式都不稳定,训练会很难收敛。
所以通常先用人工标注的高质量问答数据做监督微调,让模型先具备基础指令跟随能力、稳定的回答风格以及初步的任务完成能力。

通过这一步,会产出一个 SFT model,也叫初始策略模型。该模型已经能回答问题,能大致遵循指令,但不一定答得好。

3. 训练奖励模型

收集人类偏好数据

很多开放式任务并没有唯一标准答案,比起“唯一正确答案”,更常见的是 ”回答 A 和回答 B,哪个更好“ 的问题。

偏好数据集构造流程通常如下:首先,给定一个 prompt,让当前模型生成多个候选答案,让人工标注员比较这些回答,选出更好的那个,或者做排序。

偏好数据形式常见是如下三元组:

  • prompt
  • chosen response
  • rejected response

或更复杂的排序数据:

  • prompt
  • response1 > response2 > response3

标注员通常会从多个维度判断回答,如:

  • helpfulness(有帮助)
  • correctness(正确性)
  • harmlessness / safety(安全性)
  • clarity(清晰度)
  • conciseness(简洁性)
  • instruction following(是否遵循指令)
训练模型

通过训练奖励模型,把人类偏好数据变成模型可以优化的数值信号。其本质上是一个打分器,输入 prompt + response,输出一个标量分数,表示这个回答有多符合人类喜好。奖励模型的质量非常关键,因为它决定了后续强化学习优化的方向;如果奖励模型有偏差,策略模型可能会朝错误方向优化。

奖励模型的训练数据来自于人类偏好数据,如果一条数据中 chosen response 比 rejected response 更好,那训练目标就是让奖励模型满足 score(chosen) > score(rejected)。通常会用 pairwise ranking loss 来训练。

奖励模型训练完毕后,可以对新生成的回答自动打分,这个分数就是后面强化学习的 reward。

问题
奖励模型可能存在 reward hacking 风险,如:

  • 学到标注偏差
  • 过度偏好某种风格
  • 只会奖励表面特征
  • 被策略模型“投机取巧”利用

4. 通过强化学习优化模型

策略模型
在强化学习视角下:

  • 状态(state):用户输入 prompt,以及已经生成的上下文;
  • 动作(action):生成下一个 token;
  • 策略(policy):把语言模型看作策略模型,策略模型为语言模型本身;
  • 奖励(reward):奖励模型对完整回答给出的分数。

约束条件
如果只让模型疯狂追求高奖励,容易出现:

  • 回答风格畸形
  • 偏离原始语言分布
  • 语言质量下降

因此 RLHF 一般会加入一个约束,使最终模型不能离 SFT 模型太远。这通常通过 KL penalty(KL 散度惩罚)来实现。

策略优化算法
在经典 RLHF 里,通常使用 PPO 这样的策略优化算法。模型先生成回答,再由奖励模型给出分数,并结合 KL 约束形成最终优化目标,PPO 则负责稳定地更新模型参数。

强化阶段流程

  • 采样:从一批 prompt 出发,当前策略模型生成回答。
  • 打分:用奖励模型给每个回答打分。
  • 约束:结合参考模型或 SFT 模型,计算 KL penalty。
  • 计算优势或回报:将 reward 处理为 PPO 需要的优化信号。
  • 更新参数:根据 PPO 目标函数更新策略模型。
  • 循环,直到达到预期。

5. 评估模型

训练完成后,不只看 reward 分数,还要做多维评估。

自动评估
  • 胜率比较(win rate)
  • 安全性分类器指标
  • 事实性指标
  • benchmark 表现
  • 对比不同模型的偏好胜率
人工评估
  • helpfulness
  • safety
  • factuality
  • coherence
  • instruction following
在线评估
  • 用户满意度
  • 点击率
  • 对话完成率
  • 投诉率
  • 风险内容触发率

RLHF vs SFT

SFT 主要依赖“输入-标准输出”数据,目标是让模型学会完成任务;RLHF 则是在此基础上进一步利用人类偏好信号做优化,目标是让模型输出更符合人类期望。

RLHF 优点与局限

优点

  • 能显著提升回答质量和用户体验
  • 可以更好地做安全性、帮助性、风格对齐
  • 适合开放式任务,不要求唯一标准答案
  • 是 ChatGPT 类模型对齐中的关键方法之一

局限

  • 流程复杂,训练成本高
  • 需要高质量人工偏好数据
  • 奖励模型可能有偏差
  • 强化学习阶段训练不稳定,调参难度较大

DPO

DPO (Direct Preference Optimization,直接偏好优化),是一种基于人类偏好数据的大模型对齐方法。它不需要像传统 RLHF 那样先训练奖励模型,再用强化学习优化,而是直接利用“同一个问题下,哪个回答更好”的成对偏好数据进行训练。其目标是提升模型生成优选答案的概率,降低劣选答案的概率。相比 RLHF,DPO 流程更简单、训练更稳定、工程成本更低,因此现在在大模型对齐中非常常见。

DPO 要解决什么问题

在大模型训练里,SFT 能让模型学会基本的指令跟随,但它有一个问题:

  • 很多开放式问题并没有唯一标准答案
  • 更现实的情况是:回答 A 和回答 B 哪个更好
  • 这个“更好”往往体现在帮助性、安全性、清晰度、风格等方面

DPO 就是专门利用这种偏好比较数据来做优化。

DPO 训练数据

通常是一条样本包含:

  • 一个 prompt
  • 一个 chosen answer(人类更喜欢的回答)
  • 一个 rejected answer(相对没那么好的回答)

DPO 的训练目标就是让模型更倾向生成 chosen,而不是 rejected。

DPO 和 RLHF 的区别

传统 RLHF 一般分三步:

  1. 先做 SFT
  2. 再训练一个奖励模型(Reward Model)
  3. 用强化学习方法,比如 PPO,让模型朝高奖励方向优化

DPO 的特点是:

  • 不单独训练奖励模型
  • 不需要复杂强化学习
  • 直接从偏好数据出发优化策略模型

DPO 的优点和局限

优点:

  • 训练流程更简单
  • 不需要奖励模型
  • 比 PPO 这类 RLHF 方法更稳定、实现成本更低
  • 很适合做大模型对齐和偏好优化

局限:

  • 依赖高质量偏好数据
  • 学到的是“相对偏好”,不是完整的长期交互策略
  • 在特别复杂的多轮决策场景里,未必能完全替代强化学习方法

PPO

PPO ( Proximal Policy Optimization,近端策略优化 ) 是一种经典的强化学习策略优化算法,其核心思想是在提升策略效果的同时,限制每次策略更新的幅度,避免新旧策略差异过大导致训练不稳定。

在 RLHF 中,通常把语言模型看作策略模型,把生成回答看作动作序列,再利用奖励模型提供的分数作为反馈,通过 PPO 持续优化模型,使其输出更符合人类偏好。

PPO 的优点是训练相对稳定、实现较成熟,因此在早期大模型对齐中被广泛使用。

为什么需要 PPO

在强化学习里,策略模型会根据奖励不断更新。但如果每次更新幅度太大,容易出现:

  • 训练不稳定
  • 性能崩掉
  • 新策略和旧策略差别太大
  • 模型学偏,甚至“作弊”去拿高分

PPO 的核心思想就是 每次都优化,但只做受约束的小步更新

PPO 在 RLHF 里是干什么的

在 RLHF 中,语言模型 = 策略模型,生成 token = 动作,奖励模型打分 = reward,PPO = 用 reward 来更新语言模型参数的方法。

流程:

  1. 给模型一个 prompt
  2. 模型生成回答
  3. 奖励模型给这个回答打分
  4. PPO 根据这个分数更新模型
  5. 让模型以后更倾向生成高分回答

但更新时不会让模型无限追求高奖励,而是会限制它不要偏离原始模型太远。

PPO 核心思想

PPO 通过限制新旧策略的变化幅度,避免策略更新过大,从而提升训练稳定性。

PPO 最重要的特点是通过 裁剪或约束策略变化,防止更新过头。如果某次更新方向是对的,那就鼓励更新,但如果更新得太猛,就把它“裁掉”。这样可以让训练更稳定

与传统策略梯度方法区别

传统策略梯度方法往往直接按照奖励方向更新,容易出现:

  • 方差大
  • 不稳定
  • 训练容易崩

PPO 相比它们的优势是:

  • 更稳定
  • 更容易实现
  • 更容易调参
  • 实际效果好

所以它在强化学习里非常常见,也被大量用于 RLHF

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐