面试知识库
高 困难

LLM训练流程与对齐#

一句话答案#

大模型是”三段式”训出来的:预训练用万亿级 token 做 next-token prediction 学到通用语言与世界知识(得到 base 模型);SFT 用指令-回答对把”续写机器”变成”会对话的助手”;对齐用人类偏好(RLHF/DPO/GRPO)把回答往”有用、诚实、无害”的方向推。取舍核心是:对齐提升可用性但会付出对齐税、可能过度拒答,奖励也会被模型钻空子。

核心要点

1. 预训练:next-token prediction 与 Scaling Law#

  • 目标:自回归语言建模,对序列每个位置预测下一个 token,损失是 交叉熵 L = −Σ log P(x_t | x_<t);无需人工标注,互联网文本天然就是监督信号
  • 数据:当前主流规模在 数万亿 token(Llama 2 约 2T,Llama 3 约 15T)。数据管线比模型结构更决定上限:质量过滤(分类器打分)、去重(MinHash/精确去重,重复数据会显著伤害泛化)、毒性过滤、配比(代码/数学/多语言比例)
  • Scaling Law(Kaplan 2020):损失与参数量 N、数据量 D、算力 C 呈幂律下降,且大范围内无饱和迹象。训练算力经验公式 C ≈ 6·N·D FLOPs
  • Chinchilla(Hoffmann 2022)的核心结论:给定算力预算,N 和 D 应等比例扩大,最优比约 每参数 20 token(70B 模型 ↔ 1.4T token);此前 GPT-3 175B 只喂了 300B token,属于”参数过多、数据不足”。注意工业界现在常故意过训(Llama 3 8B 喂 15T),因为训练贵一次、推理便宜一辈子
  • 涌现能力(emergent abilities):少样本学习、多步算术、CoT 等在小模型上接近随机,越过某个规模后突然出现;也有研究认为部分”涌现”是不连续评测指标造成的假象
  • 成本与并行:千亿级模型训练需数千到上万张 GPU 跑数周到数月,算力量级在 10^24–10^25 FLOPs;工程上靠 数据并行 / 张量并行 / 流水线并行 三维组合(加 ZeRO/FSDP 切分优化器状态),此处只点名

2. SFT:把续写模型变成对话模型#

  • 数据:(instruction, response) 对,数量通常在万到百万级,质量远比数量重要(LIMA 用约 1k 条精选数据就能得到可用的对话模型)
  • chat template:用特殊 token 把多轮对话序列化,如 <|im_start|>system ... <|im_end|> / <|im_start|>user ... <|im_end|> / <|im_start|>assistant ...;模型学会”看到 assistant 标记就开始回答、生成结束符就停”。推理时模板不一致是线上效果崩掉的常见原因
  • 损失只算在 assistant 段(prompt 部分 mask 掉),本质仍是交叉熵——SFT 并没有换目标函数,只是换了数据分布
  • 与参数高效微调的关系:全量 SFT 显存贵,LoRA微调原理 就是 SFT 阶段最常用的参数高效手段,同样的数据与 loss,只是可训练参数换成低秩旁路

3. 对齐:RLHF → DPO → GRPO#

偏好数据 (x, y_w ≻ y_l) ──► 奖励模型 RM ──► PPO 最大化 r(x,y) − β·KL(π‖π_ref)   [RLHF]
偏好数据 (x, y_w ≻ y_l) ──► 直接闭式损失 L_DPO(不训 RM、不采样)            [DPO]
可验证奖励 (答案对/测试过) ──► 组内相对优势 + PPO 式裁剪,无 critic           [GRPO/RLVR]
plaintext
方法是否训 RM是否在线采样需要的模型关键公式/机制
RLHF (PPO)是,Bradley-Terry 损失 −log σ(r(y_w) − r(y_l))是policy / ref / RM / critic 四份奖励里加 KL 惩罚 防止策略漂离 SFT 模型、防止 reward hacking
DPO否否(离线)policy / ref 两份利用 KL 约束下最优策略 π* ∝ π_ref·exp(r/β),把 r 反解为 β·log(π/π_ref) 代回 BT 损失:L = −log σ(β[log π(y_w)/π_ref(y_w) − log π(y_l)/π_ref(y_l)])
GRPO可不训(规则奖励)是policy / ref(无 critic)同一 prompt 采 G 个回答,优势 A_i = (r_i − mean)/std 组内归一化,省掉 value model,显存约省一半
  • RLHF(InstructGPT 路线):人类对同一 prompt 的多个回答排序 → 训 RM 打分 → PPO 用 RM 做奖励优化策略。KL 项 β 是”听 RM 多少”与”不偏离 SFT 多少”的调节旋钮
  • DPO 省掉 RM 与 RL 的原因:RLHF 的最优解有闭式形式,隐含地把”策略本身”当成奖励模型,于是偏好学习退化为一个分类式损失,训练稳定、成本低;代价是离线、不探索,对偏好数据分布外的泛化弱于在线 RL
  • GRPO(DeepSeek-R1 使用):面向推理任务,奖励常来自可验证规则(数学答案匹配、代码单测通过),即 RLVR;组内相对比较天然适合”同题多解”,长链 CoT 与自我检查行为正是在这种 RL 中涌现的,详见 推理模型与思维链
  • RLAIF / Constitutional AI:用 AI 按一组原则(宪法)打偏好标签代替人工,降低标注成本

4. base vs instruct:怎么选#

base 模型instruct / chat 模型
行为续写文本,问它问题可能接着”出题”按 chat template 回答、会拒绝、会停
适用继续预训练、自建 SFT 数据管线、few-shot 补全式任务直接对话、Agent、RAG 生成端
注意必须自己写 prompt 格式必须用官方 chat template,否则效果失真

5. 对齐的副作用#

  • 对齐税(alignment tax):RLHF 后部分学术基准可能下降;InstructGPT 用 PPO-ptx(混入预训练梯度)缓解
  • 过度对齐 / 过度拒答:安全奖励权重过高 → 对”如何杀掉 Python 进程”也拒答;需要用拒答率与有用性一起做评测,见 LLM评测方法
  • 奖励 hacking:RM 是不完美的代理,策略会钻空子——回答越长分越高(长度偏差)、迎合用户立场(sycophancy)、堆格式不堆内容;KL 惩罚、RM 集成、定期用新数据重训 RM 是常见对策
  • 幻觉与对齐的关系:SFT 若让模型回答它预训练里根本不知道的事,等于在教它”不知道也要编”;RLHF 若奖励”自信完整的回答”,会进一步放大。缓解思路是把”我不确定”也纳入偏好数据、做校准训练,更多见 大模型幻觉与缓解

面试回答(2分钟版)

大模型训练分三个阶段。第一是预训练,目标就是 next-token prediction,用交叉熵损失在几万亿 token 的语料上自监督训练,这一步决定模型的知识和能力上限,数据清洗去重比结构创新更关键。规模上遵循 Scaling Law,损失随参数、数据、算力幂律下降;Chinchilla 的结论是算力固定时参数和数据要等比例放大,大约每个参数配 20 个 token,不过现在工业界会故意过训小模型换推理成本。第二是 SFT,用指令-回答对在 chat template 下继续训练,loss 只算 assistant 部分,把只会续写的 base 模型变成会对话的 instruct 模型,LoRA 就是这一阶段的参数高效手段。第三是对齐。经典 RLHF 是先收集人类偏好对训一个奖励模型,再用 PPO 最大化奖励减去 KL 惩罚,KL 是防止策略漂离 SFT 模型、防止钻 RM 空子的。DPO 发现这个优化问题有闭式解,可以把奖励用策略和参考模型的对数概率比表示,直接代回偏好损失训练,不用 RM 也不用采样,稳定又便宜,缺点是离线不探索。GRPO 是 DeepSeek-R1 用的,一个 prompt 采一组回答,用组内均值方差算相对优势,省掉 critic,奖励用可验证规则比如数学答案对不对,这就是 RLVR,推理模型的长思维链就是这么 RL 出来的。最后要知道对齐有副作用:对齐税、过度拒答、奖励 hacking 比如越长分越高,以及 SFT 教模型回答不知道的事会加重幻觉,所以选型时 base 模型适合继续训和自建管线,instruct 模型直接上线用,并且一定要用官方 chat template。

追问与易错

追问方向:

  • RLHF 里的 KL 惩罚去掉会怎样? → 策略会快速漂向 RM 的高分区域并过拟合 RM 的缺陷(reward hacking),生成变得啰嗦、重复甚至乱码;β 太大则学不动。KL 是在”听 RM”和”保持 SFT 分布”之间调节的唯一旋钮,通常 β 在 0.01–0.1 量级
  • DPO 既然这么省,为什么大厂仍用在线 RL? → DPO 是离线的,只在标注过的偏好对上学,不会探索新回答;在线 RL 能在当前策略自己采样的分布上持续拿反馈,推理、代码这类有可验证奖励的任务上在线 RL(PPO/GRPO)上限明显更高。实践常是先 DPO 再在线 RL
  • GRPO 为什么能去掉 critic? → PPO 需要 value model 估计基线来算优势;GRPO 对同一 prompt 采 G 个样本,直接用组内奖励的均值做基线、标准差做归一化,样本之间互为基线,所以不需要再训一个和 policy 同等规模的 critic,显存和训练稳定性都受益
  • Chinchilla 说每参数 20 token 最优,为什么 Llama 3 8B 喂了 15T? → Chinchilla 优化的是”训练算力固定下的最终 loss”,没算推理成本。小模型过训后 loss 仍在缓慢下降,而部署成本只和参数量有关,所以推理量大的产品线会把算力压到小模型上过训
  • 奖励模型怎么训?数据量多少? → 在 SFT 模型上换一个标量输出头,用成对比较数据按 Bradley-Terry 损失训;InstructGPT 量级是数万条比较对。RM 质量天花板就是对齐天花板,所以会做多 RM 集成、定期用新策略的采样重标注

易错点:

  • ❌ “SFT 换了训练目标” → SFT 仍是交叉熵 next-token prediction,只是数据换成了对话格式、且只对 assistant 段计算损失
  • ❌ “DPO 不需要参考模型” → DPO 不需要奖励模型,但损失里显式含 π_ref,仍要加载 SFT 模型做参考(可离线预计算 log-prob 省显存)
  • ❌ “Scaling Law 等于参数越大越好” → Kaplan 与 Chinchilla 的共同结论是参数和数据要配套,算力固定时盲目堆参数反而 loss 更差
  • ❌ “对齐只会让模型更好” → 存在对齐税、过度拒答与奖励 hacking,对齐后仍需用有用性 + 安全性两套指标回归