从 SFT 到 Self-Rewarding:一文看懂大模型「训练四件套」——SFT / IFT / EFT / RLHF 全流程
这篇文章系统介绍了将7B基础模型升级为ChatGPT级AI助手的四大微调步骤: SFT监督微调:通过标准问答对训练,确保模型回答准确性 IFT指令微调:使用结构化指令数据,提升模型对复杂指令的理解能力 EFT评估微调:训练模型自我评估能力,为后续强化学习做准备 RLHF强化学习:基于人类反馈优化输出,使回答更符合人类偏好 该流程通过逐步优化模型的知识准确性、指令遵循性、评估能力和人类偏好对齐,最终
📍前言
如何将一个7B参数的"裸模型"训练成具备70B参数模型能力的「ChatGPT」级AI助手?
这个看似复杂的转化过程,实际上可以分解为四个关键微调步骤加一套完善的奖励系统。
今天,我们将用5分钟的时间,系统性地解析SFT(监督微调)、IFT(指令微调)、EFT(评估微调)和RLHF(基于人类反馈的强化学习)这四大技术环节的具体作用、实施方法以及每个阶段的预期效果。
1️⃣ SFT:Supervised Fine-Tuning(监督微调)
核心目标:确保模型掌握基础的知识准确性
训练数据格式:标准问答对(prompt, gold_answer)
损失函数:采用标准的语言建模交叉熵损失
训练效果:模型能够给出正确答案,但回答格式可能不够规范
实战案例:
输入prompt = “《红楼梦》的作者是谁?”
标准答案gold = “曹雪芹”
经过训练后,模型能够准确回答"曹雪芹",但可能直接输出答案而缺乏礼貌用语或完整句式。
2️⃣ IFT:Instruction Fine-Tuning(指令微调)
核心目标:提升模型对复杂指令的理解和执行能力
训练数据格式:结构化指令(instruction + input, answer)
损失函数:同样使用交叉熵损失
显著提升:模型的格式规范性、风格适应性和多任务泛化能力
典型示例:
指令instruction = “请用正式商务信函的格式回复以下内容”
输入input = “感谢您的来信”
期望输出answer = “尊敬的先生/女士:衷心感谢您近日的来信…”
3️⃣ EFT:Evaluation Fine-Tuning(评估微调)
核心目标:赋予模型自我评估和打分的能力
训练数据格式:带评分的数据(prompt, answer, score)
损失函数:采用均方误差(MSE)或二元交叉熵(BCE)
关键改进:模型额外训练出的reward head可以输出0-1的评分,为后续RLHF提供基础
评估示例:
prompt = “为新产品撰写宣传标语”
answer = “创新科技,智享未来”
score = 0.92(由人工标注或专家评估得出)
4️⃣ RLHF:Reinforcement Learning from Human Feedback(基于人类反馈的强化学习)
终极目标:使模型输出完全符合人类偏好
训练数据格式:对比数据(prompt, chosen, rejected)
主流算法:PPO/DPO/GRPO/SPIN/Self-Rewarding等
全面提升:在保证正确性的基础上,优化风格、安全性、创造力和用户体验
对比案例:
prompt = “用幽默的方式解释相对论”
chosen(优选回答)= “想象你坐在美女旁边一小时就像一分钟…”
rejected(劣质回答)= “相对论是爱因斯坦提出的物理理论…”
🔁 完整训练流程图示
📊 技术参数对比表
| 阶段 | 数据特征 | 新增组件 | 核心目标 | 典型训练时长 |
|---|---|---|---|---|
| SFT | 标准问答对 | 无 | 知识准确性 | 24-48 GPU小时 |
| IFT | 结构化指令 | 无 | 指令遵循性 | 48-72 GPU小时 |
| EFT | 带评分数据 | Reward Head | 质量评估能力 | 24-36 GPU小时 |
| RLHF | 对比数据 | Actor-Critic架构 | 人类偏好对齐 | 72+ GPU小时 |
🚀 实战代码示例(PyTorch Lightning版)
# 1. SFT阶段
sft_trainer = pl.Trainer(
accelerator="gpu",
strategy="deepspeed_stage_3",
plugins=[PrecisionPlugin(precision="bf16")]
)
sft_trainer.fit(SFTModel(), datamodule=SFTDataModule())
# 2. IFT阶段
ift_trainer = pl.Trainer(...)
ift_trainer.fit(IFTModel(), datamodule=IFTDataModule())
# 3. EFT阶段
eft_trainer = pl.Trainer(...)
eft_trainer.fit(RewardModel(), datamodule=EFTDataModule())
# 4. RLHF阶段
rlhf_trainer = DPOtrainer(
model=ift_model,
ref_model=sft_model,
beta=0.1,
loss_type="sigmoid"
)
rlhf_trainer.train(rlhf_dataset)
🧠 关键结论
- SFT构建知识基础,IFT培养指令理解,EFT建立评估标准,RLHF实现偏好对齐
- 通过这四步系统性训练,即使是7B参数的"小模型"也能展现出媲美70B参数的"大模型"的用户体验
- 当前最前沿的模型(如GPT-4、Claude 3等)都遵循类似的技术演进路径### 📍前言
把 7B 的“裸模型”变成 70B 的「ChatGPT」到底要几步?
答案是:四步微调 + 一套奖励系统。
今天带你用 5 分钟搞清楚 SFT、IFT、EFT、RLHF 分别干什么、怎么干、干到什么程度。
1️⃣ SFT:Supervised Fine-Tuning
目的:让模型「答对题」
数据:(prompt, gold_answer)
损失:语言建模交叉熵
效果:知识正确,但格式不一定听话
示例:
prompt = “中国的首都是?”
gold = “北京”
训练后模型能答“北京”。
2️⃣ IFT:Instruction Fine-Tuning
目的:让模型「听指令」
数据:(instruction + input, answer)
损失:同样是交叉熵
效果:格式、风格、任务泛化大幅提升
示例:
instruction = “把这句话翻译成英文”
input = “你好”
answer = “Hello”
3️⃣ EFT:Evaluation Fine-Tuning
目的:让模型「当裁判」
数据:(prompt, answer, score)
损失:MSE / BCE 回归
效果:额外 reward head 输出 0-1 标量,用于自打分或 RLHF
示例:
prompt = “写一段广告文案”
answer = “买它!”
score = 0.85
4️⃣ RLHF:人类反馈强化学习
目的:让模型「更懂人类偏好」
数据:(prompt, chosen, rejected)
算法:PPO / DPO / GRPO / SPIN / Self-Rewarding
效果:在正确 + 格式好基础上,风格、安全、创造力全面提升
示例:
prompt = “写一首关于春天的诗”
chosen = “春风又绿江南岸…”
rejected = “春天来了,草绿了…”
🔁 训练顺序流水线
📊 对比速查表
| 阶段 | 数据格式 | 新增模块 | 目标 |
|---|---|---|---|
| SFT | (prompt, answer) |
— | 正确性 |
| IFT | (instruction, input, answer) |
— | 指令遵循 |
| EFT | (prompt, answer, score) |
reward head | 打分能力 |
| RLHF | (prompt, chosen, rejected) |
actor + critic / DPO | 人类偏好 |
🚀 实战代码 1 行跑通
# 1. SFT
trainer = SFTTrainer(model, dataset_sft)
trainer.train()
# 2. IFT
trainer = SFTTrainer(model, dataset_ift)
# 3. EFT
trainer = RewardTrainer(model, dataset_eft)
# 4. RLHF
trainer = GRPOTrainer(model, reward_func, dataset_rlhf)
trainer.train()
🧠 结语
- SFT 打底,IFT 教指令,EFT 造裁判,RLHF 做精修。
- 四步走完,7B 也能有 70B 的“人情味儿”。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)