AI基石 | 大模型训练三部曲:预训练、SFT 与 RLHF —— ChatGPT 是如何炼成的?
文章摘要: 大模型训练分为三个阶段: 预训练:通过海量文本学习通识知识,但仅会文字接龙(如预测“床前明月光”的下一个词); 监督微调(SFT):用人工编写的问答数据教会模型遵循指令(如将“你好”翻译成英文),使其从续写转为对话; RLHF:通过人类反馈(如DPO算法)对齐价值观,避免胡说或有害内容。 实际应用中,普通人可通过LoRA技术微调开源模型(如Llama-3),仅调整1%参数即可适配特定任
AI基石 | 大模型训练三部曲:预训练、SFT 与 RLHF —— ChatGPT 是如何炼成的?
前言
很多初学者有一个误区:以为把百科全书喂给模型,它就能回答问题了。 大错特错。
如果你直接用百科全书训练一个模型(Base Model),当你问它:“也就是北京的特产是什么?” 它可能会接着你的话往下写:“……还有上海的特产,广州的特产。” 因为它只会**“文字接龙”,它不懂这是在“回答问题”**。
要让 AI 从“续写狂魔”变成“贴心助手”,需要经历三个阶段:
- 预训练 (Pre-training):读万卷书,学通识。(获得知识)
- 监督微调 (SFT):名师辅导,学规矩。(学会对话)
- 人类反馈强化学习 (RLHF):价值对齐,学做人。(符合人类价值观)
今天,我们就来拆解这三步走的底层逻辑与数据差异。
第一阶段:预训练 (Pre-training) —— 孤独的博学家
这是最烧钱、最耗时、门槛最高的阶段。99% 的公司和个人都玩不起,只能用开源的(如 Llama 3, Qwen)。
1. 核心任务:预测下一个词 (Next Token Prediction)
在这个阶段,AI 被关在一个只有书的房间里。我们给它喂海量的互联网文本(CommonCrawl、维基百科、GitHub 代码)。
训练目标只有一个: 遮住这句话的最后一个字,猜它是啥。
- 输入:“床前明月光,疑是地上__”
- AI 预测:“霜” (奖励) / “鞋” (惩罚)
这种训练方式叫 Causal LM (因果语言模型)。
2. 只有“知识”,没有“意识”
经过几万亿个 Token 的训练,模型学会了语法、逻辑、世界知识。它变成了 Base Model (基座模型)。
Base Model 的特点:
- 博学:它知道量子力学,也知道 Python 语法。
- 不听话:你问它问题,它可能不回答,而是给你出下一道题(因为它以为在做文本续写)。
第二阶段:监督微调 (SFT) —— 懂事的练习生
为了让 AI 听懂指令,我们需要进入 Supervised Fine-Tuning (SFT) 阶段,也叫 指令微调 (Instruction Tuning)。
1. 核心任务:问答配对
这个阶段的数据不再是“乱糟糟的网页”,而是人工精心编写的 (Prompt, Response) 对。
- Prompt (指令):“请把下面这句话翻译成英文:你好。”
- Response (回答):“Hello.”
模型依然是在做“预测下一个词”,但这次它学到了一个模式:当用户发出指令时,我要给出对应的回答,而不是接着指令往下编。
2. 数据格式的质变
这是实战中最重要的区别。
-
预训练数据(纯文本):
今天天气真好,我们去公园玩吧。公园里有很多人... -
SFT 数据(对话格式,通常是 JSONL):
{ "instruction": "请解释一下什么是量子纠缠?", "output": "量子纠缠是量子力学中的一种现象,描述了两个粒子..." }
经过 SFT,模型就变成了 Chat Model (对话模型),比如 Llama-3-Instruct。
第三阶段:RLHF (人类反馈强化学习) —— 有道德的助手
SFT 后的模型虽然能对话,但它可能为了讨好你而胡说八道 (Hallucination),或者输出暴力色情内容。 为了让 AI 符合人类的价值观(有用、诚实、无害),需要用到 RLHF (Reinforcement Learning from Human Feedback)。
1. 核心流程:老师打分
这就像训练小狗,做对了给骨头,做错了打手心。
- 奖励模型 (Reward Model):让人类给 AI 的回答打分(好回答得高分,坏回答得低分)。训练一个“打分模型”来模仿人类的喜好。
- 强化学习 (PPO/DPO):让 AI 自己生成回答,Reward Model 给分。AI 为了拿高分,会不断调整策略,向“人类喜欢的方向”靠拢。
2. DPO:更优雅的替代者
传统的 PPO 算法非常复杂且不稳定。现在主流的微调(如 Llama 3)开始使用 DPO (Direct Preference Optimization)。 它不需要训练复杂的奖励模型,直接给 AI 两条回答(一条好的,一条坏的),告诉它:“学好的,别学坏的”。
四、 代码实战:看看 SFT 代码长啥样
在实际工作中,我们 90% 的场景是在做 SFT (微调)。也就是拿开源的 Base 模型,喂入自己的行业数据(比如医疗问答、法律文书)。
我们使用 Hugging Face 的 trl 库(Transformer Reinforcement Learning),这是目前最流行的微调工具。
# 伪代码演示 SFT 核心逻辑
from datasets import load_dataset
from trl import SFTTrainer
from transformers import TrainingArguments, AutoModelForCausalLM
# 1. 加载模型 (比如 Qwen 或者 Llama)
model_name = "Qwen/Qwen1.5-7B"
model = AutoModelForCausalLM.from_pretrained(model_name)
# 2. 加载数据 (你的私有数据,JSON格式)
# 格式: {"text": "User: 什么是SFT? \n Assistant: SFT是监督微调..."}
dataset = load_dataset("json", data_files="my_data.json", split="train")
# 3. 设置训练参数
args = TrainingArguments(
output_dir="./sft_output",
per_device_train_batch_size=4, # 显存杀手,调小点
learning_rate=2e-5, # 微调的学习率通常很小
num_train_epochs=3
)
# 4. 初始化 SFT 训练器 (Hugging Face 把脏活累活都封装了)
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
dataset_text_field="text", # 指定数据集中哪一列是训练文本
max_seq_length=1024,
args=args
)
# 5. 开始炼丹
trainer.train()
五、 结语:普通人的机会在哪里?
看完这三部曲,你可能会绝望:“预训练要几千张显卡,SFT 也要大显存,我这破电脑能干啥?”
别急。AI 届为了让普通人也能玩转大模型,发明了一种**“偷懒”的技术。 我们不需要微调模型的所有参数(几十亿个),我们只需要微调不到 1%** 的参数,就能达到几乎相同的效果。
这就是大名鼎鼎的 LoRA (Low-Rank Adaptation)。
下一篇预告: 如何用一张消费级显卡(甚至 CPU),微调千亿参数的大模型? 《第14期:微调黑科技:LoRA 与 PEFT —— 让大模型在你的显卡里“翩翩起舞”》
📚 课后作业
- 去 Hugging Face 官网,搜索
Llama-3-8B和Llama-3-8B-Instruct,看看它们的 Model Card 介绍有什么不同?(体会 Base 和 Instruct 的区别) - 思考:如果你想做一个“林黛玉风格”的聊天机器人,你应该收集什么样的 SFT 数据?
更多推荐

所有评论(0)