主流大语言模型(LLM)的后训练技术

一、一个大模型的典型"生命周期":

  1. 预训练(Pre-training)

    • 模型预训练最初是做一个很"笨"的任务:输入大量互联网文本,目标是:给定前面一串词,预测下一个词的概率。
    • 通过这个任务,模型学会语言结构、常识、基础推理。
    • 结果:一个"读过很多书,但没人教过它如何当助手"的通才模型。
  2. 后训练(Post-training / Alignment)

    这一阶段专门为"让模型变成好用、听话、安全的助手",典型包括:

    • 指令微调 / 监督微调(SFT):教它听懂指令、按要求答题。
    • 偏好学习 / 强化学习(RLHF、DPO 等):教它"更礼貌、更安全、更符合人类偏好"。

二、后训练(微调+强化学习)

后训练 :是一整个阶段的总名称,要解决"如何把通用模型变成好助手"的问题。

后训练既可以用"标准答案"(SFT),也可以用"好坏反馈"(RLHF、DPO)

text 复制代码
                海量无标注文本
                       │
                 【预训练 Pre-training】
                       │
                       ▼
            通用语言模型(只会续写)
                       │
             ┌─────────┴─────────┐
             ▼                   ▼
      【后训练 / 对齐 Post-training】
      (这是一个阶段 / 大框架)

   通常包含两大类方法:    
   1. 微调(监督式)      2. 强化学习/偏好优化
      - 指令微调 SFT        - RLHF
      - 安全 SFT            - DPO / 其它偏好方法
       │                         │
       └─────────二者配合────────┘
                       │
                       ▼
        助手化模型(ChatGPT 类)
                       │
                       ▼
         再做领域/产品级微调(SFT/LoRA)

三、微调

凡是"有标准答案,让模型学会模仿"的训练,基本都可以归到"微调"一类。

3.1 典型微调任务类型

常见微调任务:

  1. 指令跟随(Instruction Following)

    • 让模型学会"看到指令就知道该怎么回答",而不是继续胡乱生成。
    • 多用于聊天机器人、Copilot 类产品。
  2. 问答 / 知识增强

    • 比如法律问答、医学问答、公司内部知识库问答。
    • 希望模型在某领域回答更正确。
  3. 文本生成任务

    • 摘要、改写、翻译、风格转换、文案生成等。
  4. 代码生成 / 辅助编程

    • 微调在大量高质量代码和问题-代码对上。
  5. 工具调用 / 结构化输出

    • 教模型如何按规定格式输出 JSON、SQL、API 调用参数等。

3.2 数据格式:常见 Schema

对话式微调中,最常见的是"多轮对话/指令-回复"格式,例如:

json 复制代码
{
  "messages": [
    {"role": "user", "content": "帮我写一封面试感谢信,语气真诚正式"},
    {"role": "assistant", "content": "尊敬的XXX先生/女士:\n..."}
  ]
}

或更通用的 "instruction / input / output" 三元组:

json 复制代码
{
  "instruction": "对下面文章写一个100字摘要",
  "input": "(原文内容......)",
  "output": "(摘要内容......)"
}

知识问答类:

json 复制代码
{
  "question": "XXX 法律中的第10条主要内容是什么?",
  "answer": "第10条规定......"
}

核心是:让模型看到"指令/问题/情境" → 学会输出"正确的回答/动作"。

3.3 监督微调(SFT):最基础也最核心的微调

核心思想

监督微调的本质很简单:

给定输入 X(指令/上下文),模型输出 Y(回答),我们有一组"理想回答"作为标签,

让模型尽量把输出向"理想回答"靠拢。

数学上就是:

  • 输入:prompt(包括系统提示 + 用户问题等)
  • 输出:模型生成的 token 序列
  • 损失函数:交叉熵(Cross-Entropy Loss),训练模型最大化"正确答案"每个 token 的概率。
SFT 的作用
  • 把「下一词预测」能力转化为「听懂指令 + 回答」能力
  • 把原本可能"散漫"的生成,引导到"多步骤推理"、"工具使用"、"结构化输出"等特定模式。

例子:

假设原始预训练模型,对于输入:

"帮我写一封面试感谢信"

可能会继续生成一段与"感谢信"相关,但风格、格式很随机的文本。

通过 SFT,在大量"指令 → 理想回答"的训练对上,它学会:

  • 应该使用"尊敬的....../此致/敬礼"等格式
  • 字数大致控制
  • 语言风格符合要求(正式、礼貌)
SFT 的数据来源
  • 专家人工标注(最贵但质量最好)
  • 从现有优秀答案中收集(如论坛优质回答、文档 QA 等)
  • 使用更强的模型自动生成的"伪标签"(self-instruct、自我蒸馏)

典型做法:

先用 GPT-4 之类强模型生成大量高质量指令-回答对,再用这些数据微调较小的开源模型。

3.4 实际微调中的注意点

  1. 数据质量比模型技巧更重要

    • 垃圾数据微调,往往会让模型退化(变笨/更爱胡编)。
    • 特别要避免大量错误答案、不一致风格、相互矛盾的样本。
  2. 部署时的组合:RAG + 微调

    • 很多场景会结合检索增强生成(RAG):
      • 先从知识库检索相关文档
      • 再把文档 + 问题一起喂给模型生成回答
    • 微调则用于让模型更好"使用"这些文档和遵循格式、风格。
    • RAG + 轻量微调往往比"只靠微调"更灵活、可控。

四、强化学习(Reinforcement Learning,RL)

  • 微调:老师给题 + 标准答案,学生对照答案学,教学生标准解题方法
  • 强化学习: 老师不告诉你标准答案,只说"这次答得好/一般/很糟",给你一个分数,通过"奖励/惩罚"让你自己摸索怎么改进。

从数据形式看:

  • 微调的数据:

    • (输入 X, 标准输出 Y)
    • 明确每一步/每个 token 什么是正确。
  • 强化学习的数据:

    • (状态 s, 动作 a, 奖励 r) 或更长的序列
    • 你只知道做完这个动作后得到一个"好/坏"的分数,不知道标准答案是什么。

在 LLM 里,强化学习常这么用:

  • 状态:prompt(问题、对话上下文)
  • 动作:模型生成的回答
  • 奖励:由人类或奖励模型打分:
    • 符合指令吗?
    • 是否安全?
    • 是否有用、礼貌、逻辑清晰?

目标:

学到一种生成方式,让"期望奖励"最大。

4.1 RLHF(Reinforcement Learning from Human Feedback)

RLHF(Reinforcement Learning from Human Feedback) 就是大家常听说的"从人类反馈中强化学习",典型流程:

  1. 用 SFT 先得到一个"不太差的助手模型"。
  2. 收集人类偏好数据:
    • 给同一个问题,让模型生成多个回答 A、B、C...
    • 人类对它们排序:A > C > B。
  3. 用这些偏好训练一个"奖励模型 RM":
    • 输入:问题 + 回答
    • 输出:这个回答有多好(一个分数)。
  4. 做强化学习(如 PPO):
    • 模型生成回答 → 奖励模型打分 → 高分的生成方式被鼓励、低分被惩罚。
    • 同时用一个约束防止模型偏离原 SFT 模型太远(KL 正则)。

优点:

  • 能较好地控制模型行为:礼貌、安全、少胡编乱造(但不能完全避免)。
  • 可以用较少的人类标注(偏好比较)影响很大的行为空间。

问题:

  • 实现复杂,需要训练奖励模型 RM + PPO 这种 RL 算法。
  • 不稳定,容易出现多样性下降、偏见固化等问题。
  • 训练成本高。

4.2 DPO 等"直接偏好优化"方法

为了简化 RLHF 中复杂的 RL 步骤,后来提出了一系列"直接偏好优化"(Direct Preference Optimization,DPO)方法。

核心想法:

  • RLHF 里,奖励模型 + PPO 是间接用人类偏好调整模型。
  • 能不能不训练奖励模型、不做复杂 RL,而直接用"优劣回答对"对模型做监督式优化?

DPO 中数据形式是这样的:

  • 对同一个 prompt,有两种回答:y₊(更好)、y₋(更差),这是人类(或大模型)打的标签。
  • 目标:让模型更偏向 y₊,不喜欢 y₋。
  • 训练时,通过一个特殊的损失函数,让模型在"条件概率比值"上靠近"人类偏好"。

直观:

给你两个回答 A 和 B,人类说 A 比 B 好,DPO 直接调整模型参数:

"在看到这个问题时,输出 A 的概率提高,输出 B 的概率降低。"

DPO 的优点:

  • 不需要训练奖励模型,减少一个大模块。
  • 不需要复杂的 RL 算法,优化过程看起来像"扩展版的监督学习",比较稳定。
  • 在很多实验中,效果接近甚至超过 RLHF。

所以现在开源社区里,DPO/IPO/KTO 等"偏好优化"方法变得非常流行。

五、用一个具体例子来串起来

假设你要做一个"医疗咨询助手模型",整个过程大致可能是:

  1. 预训练阶段(一般由大厂完成)

    • 模型看遍海量文本、百科、论文,一些医疗知识也顺带学到一点。
  2. 后训练阶段(让它变成合格助手)

    1)SFT(监督微调)

    • 用大量"指令-回答"数据:
      • "请用通俗语言解释高血压的危害" → 理想回答
      • "患者咳嗽3周伴低热,可能的原因有哪些?" → 合理的鉴别诊断思路
    • 教会模型听指令 & 医学回答的基本格式、风格。

    2)偏好/强化学习

    • 为同一问题,生成多个回答,让医生打分"哪个更合理、更安全"。
    • 用 DPO 或 RLHF 让模型偏好"医生更认可的回答风格":
      • 不乱给确诊
      • 经常提醒"不能替代线下就医"
      • 对不确定情况表达不确定,而不是瞎编。

    3)安全对齐

    • 针对"自杀"、"违法医疗行为"类问题,加一批训练数据教会模型:
      • 及时给出劝导和求助建议
      • 拒绝提供危险操作方法。

在这个流程中:

  • 起到"让模型知道该怎么答题"的,是 监督微调(SFT)
  • 起到"让模型答得更像一个有职业素养的医生助手"的,是 偏好学习 / 强化学习
相关推荐
Σίσυφος19002 小时前
视觉矩阵之 正交矩阵
人工智能·算法·矩阵
java1234_小锋2 小时前
【专辑】AI大模型应用开发入门-拥抱Hugging Face与Transformers生态 - 基于BERT文本分类模型微调
人工智能·深度学习·bert
人工智能AI技术2 小时前
【Agent从入门到实践】16 接口与网络:API调用、HTTP请求,Agent与外部交互的基础
人工智能·python
代码写着写着就会了2 小时前
RuntimeError: No CUDA GPUs are available
人工智能·深度学习
lemoncat82 小时前
PS基础操作:快速去除AI水印
人工智能
老鱼说AI2 小时前
论文精读第五期:V-STAR提高复杂推理能力
大数据·人工智能·深度学习·神经网络·机器学习·语言模型
嘛嘛嘛嘛嘛嘛嘛嘛嘛2 小时前
Nanobrowser安装使用
人工智能·自动化
Java程序员威哥2 小时前
Spring AI快速上手:Java集成ChatGPT/文心一言,30分钟实现智能问答接口
java·人工智能·spring boot·后端·python·spring·云原生
C系语言2 小时前
Anaconda虚拟环境,完全使用conda install命令安装所有包,使用conda install pytorch
人工智能·pytorch·conda