AI基石 | 大模型训练三部曲:预训练、SFT 与 RLHF —— ChatGPT 是如何炼成的?

前言

很多初学者有一个误区:以为把百科全书喂给模型,它就能回答问题了。 大错特错。

如果你直接用百科全书训练一个模型(Base Model),当你问它:“也就是北京的特产是什么?” 它可能会接着你的话往下写:“……还有上海的特产,广州的特产。” 因为它只会**“文字接龙”,它不懂这是在“回答问题”**。

要让 AI 从“续写狂魔”变成“贴心助手”,需要经历三个阶段:

  1. 预训练 (Pre-training):读万卷书,学通识。(获得知识)
  2. 监督微调 (SFT):名师辅导,学规矩。(学会对话)
  3. 人类反馈强化学习 (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. 核心流程:老师打分

这就像训练小狗,做对了给骨头,做错了打手心。

  1. 奖励模型 (Reward Model):让人类给 AI 的回答打分(好回答得高分,坏回答得低分)。训练一个“打分模型”来模仿人类的喜好。
  2. 强化学习 (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 —— 让大模型在你的显卡里“翩翩起舞”》


📚 课后作业

  1. Hugging Face 官网,搜索 Llama-3-8BLlama-3-8B-Instruct,看看它们的 Model Card 介绍有什么不同?(体会 Base 和 Instruct 的区别)
  2. 思考:如果你想做一个“林黛玉风格”的聊天机器人,你应该收集什么样的 SFT 数据?
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐