第 20 讲 · 嘉宾讲座:推进开放语言模型训练的帕累托前沿 · Advancing the Pareto Frontier of Training Open LMs

Advanced Topics in Machine Learning Systems (LLM Edition) · Lecture 20。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:CMU 15-779(Fall 2025,Zhihao Jia),Lecture 20 · Fri 11/14 · Guest Lecture: Advancing the Pareto Frontier of Training Open Language Models,讲者 Mengzhou Xia(OpenAI / CMU)。 依据说明:这一讲的 slides 和录像没有公开,课表也没有列必读论文。 能查到的公开信息:

  • 讲者 2025 年 11 月在 Princeton 的博士论文答辩报告与本讲同名,摘要提到三个方向:
    • 用结构化剪枝以很小的预训练成本得到紧凑而强的模型;
    • 后训练中的数据选择与优化(“少即是多”);
    • 新的后训练方法,让模型更好地对齐期望的行为(摘要还提到推理能力的差距和用智能体式的数据合成增强推理);
  • 2025 年 4 月在 CMU 的同题报告摘要类似。

本讲按这三个方向,根据讲者公开的三篇论文整理:

  • M. Xia, T. Gao, Z. Zeng, D. Chen, Sheared LLaMA: Accelerating Language Model Pre-training via Structured Pruning(ICLR 2024);
  • M. Xia, S. Malladi, S. Gururangan, S. Arora, D. Chen, LESS: Selecting Influential Data for Targeted Instruction Tuning(ICML 2024);
  • Y. Meng, M. Xia, D. Chen, SimPO: Simple Preference Optimization with a Reference-Free Reward(NeurIPS 2024)。

课上实际讲了哪些内容,请以讲者的公开材料为准。论文数字只做转述。

pareto_lab.py(可变宽度的小 Transformer、hard concrete 掩码与拉格朗日约束、动态批加载、LESS 的梯度特征、偏好优化的玩具)和全部实验都是本讲义自己设计的;模型是第 5 讲的 LikesWorld 小 Transformer,偏好优化用的是表格型的玩具策略。 配套代码 Code:code/lecture20/(4 个脚本 + 一个共享模块;需要 numpy 和 torch;最长的约 65 秒) 预计阅读时间:2.5 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标

学完这一讲,你应该能够:

  1. 用”成本—质量的帕累托前沿”比较模型,并说清楚一个”省了 X% 算力”的数字是在什么口径下算的。
  2. 解释有目标的结构化剪枝:可学习的掩码(hard concrete)、拉格朗日乘子怎样把模型约束到指定形状,以及为什么剪完还要继续训练。
  3. 说明动态批加载的更新规则和它要解决的问题。
  4. 写出 LESS 的影响分数:从 SGD 的一阶近似到 Adam 的预条件、余弦相似度、LoRA + 随机投影的数据存储。
  5. 比较 DPO 和 SimPO 的隐式奖励,解释”长度归一化""目标间隔""不需要参考模型”各自带来了什么。

0.2 先修与本讲范围

默认你已经会本讲只给直觉,后面再展开
第 18 讲:LoRA、微调的显存账剪枝、量化的更多方法(附加讲 A2)
第 19 讲:RLHF 的流程、奖励模型DPO 的完整推导
第 13 讲:训练的算力与 16 字节 / 参数长上下文训练、推理数据合成
第 5 讲:LikesWorld 小 Transformer影响函数的理论(Koh & Liang)

0.3 本讲地图

§1  帕累托前沿的视角                                ← 代码 01
§2  省预训练的算力:结构化剪枝 + 继续训练            ← 代码 02
§3  省微调的数据:基于梯度的数据选择                 ← 代码 03
§4  省对齐的计算:无参考模型的偏好优化               ← 代码 04
§5  把它们放在一起
§6  论文精读:Sheared-LLaMA;LESS;SimPO
§7 小结  §8 常见误区  §9 练习  §10 延伸阅读  §11 下一讲预告

1. 帕累托前沿的视角 · The Pareto view(代码 01)

LLM 的训练要大量算力,最强的模型又是闭源的,限制了研究者使用和定制它们(讲者答辩摘要的出发点)。讲者的问题是:在固定的算力、数据、模型预算下,怎样得到更好的模型? 把成本画在横轴、质量画在纵轴,一个模型”在前沿上”是指没有别的模型既更便宜又更好。

用 Sheared-LLaMA 论文表 2 的数字(11 个任务的平均分),训练算力按 6·参数·token 估计:

模型训练 token训练算力平均分
Sheared-LLaMA-1.3B50B3.9e2051.0 ★
Sheared-LLaMA-2.7B50B8.1e2056.7 ★
Pythia-2.8B300B5.0e2152.5
INCITE-Base-3B800B1.3e2254.7
OpenLLaMA-3B-v21T1.8e2255.7
TinyLlama-1.1B3T2.0e2250.0
LLaMA2-7B(源模型)2T8.0e2264.6 ★

(★ = 只算每个模型自己的训练时,在前沿上)

口径很重要:Sheared-LLaMA-2.7B 的 50B token 是 OpenLLaMA-3B-v2 的 4.5%(论文图 1:达到同样效果只要约 1/32 ≈ 3%)。但如果把源模型 LLaMA2-7B 的预训练也算进去,总成本反而是 OpenLLaMA-3B 的 4.5 倍;同一个源模型剪出 8 个小模型时,每个摊到 0.6 倍。“3%“是边际成本——在已经有一个强的大模型的前提下(开源社区的现实),再得到一个小模型要多花多少。

三个杠杆:

杠杆论文省的是
结构化剪枝 + 继续训练Sheared-LLaMA预训练的算力
基于梯度的数据选择LESS微调的数据
无参考模型的偏好优化SimPO对齐的计算和显存

2. 省预训练的算力:结构化剪枝 + 继续训练 · Structured pruning(代码 02)

2.1 两个问题

从一个大模型(源模型)得到一个小模型(目标模型)分两步:剪枝(参数变少,效果必然下降)→ 继续预训练(把效果补回来)。Sheared-LLaMA 发现两个问题:

  1. 剪成什么形状:已有的结构化剪枝方法(如 CoFiPruning、LLM-Pruner)不指定目标结构,剪出来的模型各层宽度不一,效果和推理速度都不理想;
  2. 怎样继续训练:用原来的预训练数据配比继续训练,不同领域的损失下降速度差别很大,数据用得很不经济。

2.2 有目标的结构化剪枝

目标形状直接用现有的、调好的模型配置(例如把 LLaMA2-7B 剪成 Pythia-1.4B、INCITE-Base-3B 的形状),因为这些配置已经在表达能力和推理效率之间做过权衡。

可学习的掩码:给不同粒度的结构各加一组掩码变量 z——

  • 层(z^layer)、隐藏维度(z^hidden,所有层共享);
  • 每层的注意力头(z^head)、每层的前馈中间维度(z^int)。

z = 0 表示剪掉,z = 1 表示保留。掩码服从 hard concrete 分布(Louizos et al. 2018 的 L0 正则化):取值在 [0, 1],但概率质量集中在 0 和 1 上,可以重参数化求梯度:

z = clamp(sigmoid((log u − log(1−u) + log α)/β)·(ζ − γ) + γ, 0, 1),u ~ U(0, 1)

拉格朗日乘子把模型约束到目标形状。以注意力头为例,每层的约束项:

L̃^head(λ, φ, z) = λ·(Σ z^head − H_T) + φ·(Σ z^head − H_T)²

整体是一个最小—最大问题:模型权重和掩码最小化”语言模型损失 + 所有约束项”,λ、φ 最大化它——约束没满足时乘子越来越大、惩罚越来越重。剪枝结束后,每个结构保留分数最高的那几个,正好得到目标形状。剪枝阶段比普通训练慢约 5 倍,论文只给它 0.4B token。

代码 02 在小 Transformer 上剪头(每层 4 → 2)和前馈维度(128 → 64),参数从 85,056 变成 44,096(52%):

  • 期望保留数被压到目标:前 50 步压过了头(每层只剩 1.3–1.7 个头、损失涨到 1.63),乘子随即把它拉回目标附近;
  • 剪完、还没继续训练时(正向 / 反向问答的准确率):
    • 学出来的掩码 79% / 98%,两个领域的损失都只高 0.22;
    • 按权重大小剪 91% / 76%(反向的损失高 0.67,后学会的回路更脆弱);
    • 随机剪 2% / 16%。

2.3 剪枝 + 继续训练 vs 从头训练

同样 1000 步(批 32):

做法正向 / 反向准确率
学出来的掩码:剪 400 步 + 继续训练 600 步100% / 100%
按权重大小剪 + 继续训练 1000 步100% / 100%
随机剪 + 继续训练 1000 步100% / 29%
从头训练同样的形状 1000 步24% / 30%
从头训练同样的形状 3000 步29% / 34%
  • 核心论点成立:从头训练同样的形状,3 倍的数据还没学会”回头查”;剪出来的模型继承了源模型的查找回路,几百步就补回来了。已有的大模型里存着大量”知识”,剪枝是一种极便宜的继承方式。
  • 继续训练抹平了大部分剪法的差别:按权重大小剪 1000 步后也到 100%,损失甚至略低于学出来的掩码(后者有 400 步花在受约束的剪枝上);但随机剪剪掉了反向查找需要的头,1000 步不够重学。在这个小模型上,学掩码的主要好处是”剪完马上能用、哪个领域都不会被剪坏”。论文在大模型上报告:同样的预算下,有目标的剪枝比 LLM-Pruner 等方法困惑度更低、结构更规整、推理更快;剪枝阶段多花数据,困惑度持续下降(表 5:0.2B → 1.6B token,12.99 → 8.04)。

2.4 动态批加载

现象:Sheared-LLaMA 用缩放定律估计”一个同尺寸的 LLaMA2 从头训练能达到的各领域损失”(参考损失),发现剪枝后的模型在 GitHub 上已经比参考损失还好、在 C4 上却差很多——剪枝在低熵、小的领域(代码)保留了更多知识,在高熵、大的领域(网页)损失更多。按原来的配比继续训练,数据用得很不经济。

算法(论文算法 1):每 m 步在各领域的验证集上算损失 ℓ_t,Δ = max(ℓ_t − ℓ_ref, 0),按指数上升更新配比:

α = w · exp(Δ),w ← α / Σα

剪枝和继续训练两个阶段都用。论文表 3:RedPajama 的配比从 CC 67% / C4 15% / GitHub 4.5% 变成 CC 36% / C4 49% / GitHub 0.8%,下游任务更好。参考损失也可以直接用源模型的验证损失(“source reference”),效果略差。

代码 02 演示 4(两个领域:正向 / 反向问答,参考 = 源模型的损失):

  • 学出来的掩码剪完后两个领域掉得一样多,动态批加载几乎不改变配比——它只在领域之间不平衡时才有事可做;
  • 按权重大小剪的模型反向掉得多,动态批加载把约 60% 的数据给了反向问答,反向的损失差缩小得更快;
  • 但 100 步时正向的准确率反而更低(58% vs 均匀的 65%):在这个只有两个领域、几百步就能补回来的小模型上,“损失差”和”答案准确率”并不一致,收益很有限。

3. 省微调的数据:基于梯度的数据选择 · LESS(代码 03)

3.1 问题:定向指令微调

指令微调的数据集把各种任务混在一起(Flan v2、CoT、Dolly、Open Assistant…)。但实际应用常常只需要某一种能力(例如推理),这时:哪些数据真正有用?讲者答辩摘要里的说法是”少即是多”。

3.2 从影响到 LESS 的打分

一阶近似(Pruthi et al. 2020,TracIn):用 SGD 在样本 z 上走一步,验证样本 z′ 的损失变化

ℓ(z′; θ_{t+1}) − ℓ(z′; θ_t) ≈ −η_t·⟨∇ℓ(z; θ_t), ∇ℓ(z′; θ_t)⟩

把整个训练过程(每个 epoch 一个检查点)累加起来就是 z 对 z′ 的影响。选数据时,自然要选和目标示例梯度内积大的样本。三个困难和对应的办法:

  1. 循环依赖:检查点取决于选了哪些数据。办法:先在随机的一小部分(5%)上做一次短的预热训练(N = 4 个 epoch),用它的检查点。
  2. LLM 用 Adam 训练:Adam 的更新方向是 Γ = m/(√v + ε),不是梯度本身。办法:训练样本用 Γ(z, θ)(含预热训练留下的 m、v),目标示例仍用梯度。
  3. 序列级梯度的异常:一个样本的梯度是它所有 token 梯度的平均,范数和长度负相关,内积会严重偏向短样本。办法:用余弦相似度。

LESS 的影响分数(定义 3.1):

Inf_Adam(z, z′) = Σ_i η̄_i · cos(∇ℓ(z′; θ_i), Γ(z, θ_i))

算得动、存得下:

  • 预热训练用 LoRA,梯度只有原模型的不到 2%;
  • 再用 Rademacher 随机投影(Johnson-Lindenstrauss)降到 d = 8192 维;
  • 得到一个可复用的梯度数据存储:换一个目标任务,只要算目标示例的特征。
  • 选择时对目标的每个子任务分别算分、取最大,然后选前 5%。

3.3 小模型上的实验(代码 03)

数据池 2000 篇:

  • 原任务问答 40%;
  • “换说法” 15%、反向问答 15%;
  • 代号任务(目标)10%;
  • 随机 token 10%、只有事实 10%。

目标是代号任务的 8 个示例。

选法选出的 5% 里目标任务占比在上面 LoRA 微调后的目标准确率
LESS(余弦)100%82.2%
梯度点积(不归一化)86%(另有 14% 噪声)55.1%
词频相似度(tf-idf)23%(50% 是”只有事实”)21.4%
随机 5%10%10.0%
全部数据(100%)10%16.9%
  • LESS 按”对目标损失有没有帮助”选,选出的全是目标任务;词频相似度只看 token 组成,所有文档都由同样的人名、物品构成,表面上分不出来(论文:BM25、DSIR 常常按语言、话题等表面线索选)。
  • 同样的步数,5% 的精选数据远好于全部数据:目标任务在全部数据里被稀释了,而且”换说法”文档和目标的答案映射冲突。论文的假设:全部数据里有无关甚至有害的数据点。
  • 代价:只用目标数据训练,原任务从 100% 掉到 6%(灾难性遗忘)。
  • 点积的偏差:这里表现为偏向噪声文档——随机 token 无法预测,梯度范数(约 53)远大于其他文档(8–16);同一类文档里范数和长度负相关(−0.16 到 −0.30),和论文观察到的长度效应同向,但在这个数据池里不是主因。机制都是:点积 = 范数 × 余弦,被范数主导。

论文的结果(表 2、表 3):LLaMA-2-7B 上 MMLU 全部数据 51.6、随机 5% 46.5、LESS 5% 50.2;TyDiQA 随机 52.7、LESS 56.2;BBH 随机 38.9、LESS 41.5;在 Mistral-7B、LLaMA-2-13B 上 LESS 的 5% 常常超过全部数据;用小模型选的数据训练大模型(LESS-T)也有效。


4. 省对齐的计算:无参考模型的偏好优化 · SimPO(代码 04)

4.1 DPO 的隐式奖励

DPO 把 RLHF 的奖励重新参数化成策略与参考模型(SFT 模型)的对数概率比 r(x, y) = β·log(π_θ(y|x) / π_ref(y|x)),代入 Bradley-Terry 模型,直接在偏好对上训练:

L_DPO = −log σ(β·log(π_θ(y_w)/π_ref(y_w)) − β·log(π_θ(y_l)/π_ref(y_l)))

两个问题(SimPO 论文 §2):

  1. 需要参考模型:每一对数据都要多做两次参考模型的前向,显存里还要多放一份模型;
  2. 训练和生成不一致:生成时模型偏好的是平均对数似然高的回答(不涉及参考模型),而 DPO 优化的是”相对参考模型提高了多少”。满足 r(y_w) > r(y_l) 不意味着 y_w 的平均似然更高——论文观察到 DPO 训练后只有约 50% 的训练三元组满足这个条件。

4.2 SimPO

  • 奖励 = 平均对数概率:r(x, y) = (β/|y|)·log π_θ(y|x)。和生成时的指标一致;按长度归一化(去掉归一化会让模型生成又长又差的回答);不需要参考模型。
  • 目标间隔 γ:L_SimPO = −log σ(β/|y_w|·log π_θ(y_w) − β/|y_l|·log π_θ(y_l) − γ),要求胜者比败者至少高 γ。间隔增大先提升效果、太大又变差(§4.3)。

4.3 玩具实验(代码 04)

40 个提示的表格型策略,回答的真实质量是各 token 好坏的平均(和长度无关),标注者按质量判断但有一点偏爱长回答(胜者更长的占 67%):

方法真实质量平均长度隐式奖励的准确率奖励与似然排序一致
参考策略−0.213.0——
DPO(β = 0.1)+0.345.672%83%
SimPO(β = 2,γ = 0.5)+0.445.379%100%
SimPO(β = 5,γ = 1)+0.354.979%100%
  • 两种方法都学到了偏好数据里”越长越好”的偏差,回答都变长了;SimPO 的真实质量更高、回答略短。
  • SimPO 的奖励就是平均似然,“奖励的排序”和”生成时的偏好”永远一致;DPO 只有约 83%。
  • 间隔和 β 太大(β = 5,γ = 1)反而变差。

4.4 系统层面的账(代码 04 演示 3)

每一对偏好数据(单位 Ψ·token):

  • 策略模型对两条回答各做一次前向 + 反向,12;
  • DPO 还要参考模型对两条回答各做一次前向,4;
  • 合计 DPO 16、SimPO 12,SimPO 少 25%。

显存上 SimPO 省掉一份参考模型的权重,8B 模型约 11%。论文图 5c(Llama-3-Base,8 块 H100):运行时间少约 20%、峰值显存少约 10%。论文脚注也指出:DPO 可以事先离线算好参考模型的对数概率来省掉这部分,但这需要额外的一遍推理和存储,不是常用的实现。

论文结果:

  • 在 Mistral、Llama 3、Gemma 2 的基座 / 指令模型上,SimPO 比 DPO 在 AlpacaEval 2 上最多高 6.4 分、Arena-Hard 上最多高 7.5 分,而且没有显著增加回答长度;
  • 基于 Gemma-2-9B-it 的模型 AlpacaEval 2 长度控制胜率 72.4%、Arena-Hard 59.1%,在 Chatbot Arena 的 10B 以下模型里排名第一。

5. 把它们放在一起 · Putting it together

Sheared-LLaMALESSSimPO
阶段预训练指令微调偏好对齐
省的资源算力(3%)数据(5%)计算(约 20%)、显存(约 10%)
利用的已有资源训练好的大模型已有的数据池、梯度信息SFT 模型本身(不需要另一份参考)
关键的设计有目标的形状 + 动态批加载Adam 方向 + 余弦 + LoRA / 随机投影平均似然奖励 + 目标间隔
系统层面的含义规整的形状才真的快(均匀的层配置比 CoFi 生成快 14%–16%)梯度存储必须降维才存得下、算得动少一份前向、少一份显存
本讲小实验的发现继承回路的作用巨大;继续训练抹平了大部分剪法差别精选 5% 远好于全部数据;代价是遗忘质量更高、长度略短;两者都会学到长度偏差

共同的主题:不靠堆更多资源,而是把已有的资源用得更充分——这在开放模型的研究里尤其重要,因为预算远小于闭源实验室。讲者答辩摘要也指出,即使是闭源模型在推理上也有差距,需要通过更广泛的(智能体式的)数据合成来增强推理能力,这是这条路线的延伸。


6. 论文精读 · Paper reading

6.1 Sheared LLaMA: Accelerating Language Model Pre-training via Structured Pruning(Xia, Gao, Zeng, Chen, ICLR 2024)

1. 问题:从头训练一个中等规模的通用 LLM(哪怕是 1B 级别)也要上万亿 token。能否利用已有的大模型,用少得多的算力得到一个更小、通用、有竞争力的模型?

2. 为什么重要又困难:

  • 小模型(1–3B)推理便宜,需求大,但从头训练很贵;
  • 对通用 LLM 做剪枝必然掉性能(不像任务专用的模型那样能剪很多而几乎不掉);
  • 剪出来的结构要规整、推理才快;
  • 继续训练时,剪枝对不同领域的损伤不同,按原配比训练效率低。

3. 以前的工作为什么不行:

  • CoFiPruning(讲者之前的工作)、LLM-Pruner 等不指定目标结构,剪出各层宽度不一的模型,效果和速度都不理想;
  • 大多只关注剪枝这一步,没有认真研究剪完后的继续预训练;
  • 现成的数据配比方法(如 DoReMi)需要训练额外的参考模型和代理模型。

4. 新意:

  • 有目标的结构化剪枝:层、隐藏维度、头、中间维度的 hard concrete 掩码 + 拉格朗日乘子,端到端地剪成指定形状(用现有模型的配置当目标);
  • 动态批加载:按各领域验证损失和参考损失(缩放定律预测的,或源模型的)的差距,指数式地调整数据配比,几乎没有额外开销;
  • 把”剪枝 + 继续预训练”作为一种构建小模型的通用方法。

5. 结果:

  • 把 LLaMA2-7B 剪成 1.3B 和 2.7B,只用 50B token(剪枝 0.4B + 继续训练),在 11 个下游任务上超过同尺寸的 Pythia、INCITE、OpenLLaMA、TinyLlama(2.7B 平均 56.7 vs OpenLLaMA-3B-v2 的 55.7),约为从头训练 3% 的算力;
  • 指令微调后的评测也更好;
  • 动态批加载让各领域的损失下降更均衡、下游更好;
  • 训练曲线显示继续训练更多 token 还会继续提升。

本讲的验证:

  • 可学习的掩码 + 拉格朗日约束在小模型上把形状精确压到目标;
  • 剪枝 + 继续训练 1000 步恢复到 100%,同形状从头训练 3000 步仍在瞎猜。
  • 不同的发现:
    • 继续训练后按权重大小剪也一样好;
    • 动态批加载在两个领域的玩具上收益有限;
    • “3%“只在不计源模型成本时成立(§1)。

局限:

  • 需要一个已经训练好的、同家族的大模型,而且继承了它的分词器和数据偏差;
  • 剪枝阶段比普通训练慢约 5 倍;
  • 最多做到 7B 的源模型;
  • 动态批加载依赖参考损失的估计(缩放定律拟合需要同家族多个尺寸的模型)。

6.2 LESS: Selecting Influential Data for Targeted Instruction Tuning(Xia, Malladi, Gururangan, Arora, Chen, ICML 2024)

1. 问题:通用的指令微调数据池很大、很杂;当我们只想要某一种能力(定向指令微调)、手里只有几个目标示例时,怎样从池子里挑出最有用的数据?

2. 为什么重要又困难:

  • 用全部数据训练成本高,而且无关、甚至有害的数据会拖累目标能力;
  • “有没有用”取决于模型和训练过程,不是表面相似度能判断的;
  • 对 LLM 计算每个样本的梯度、存下来、两两比较,代价巨大;
  • 经典的影响估计是为 SGD 推导的,LLM 用 Adam 训练,而且序列长度不一。

3. 以前的工作为什么不行:

  • BM25、DSIR 等基于表面特征(n-gram、词分布)的方法常常按语言、话题选数据,和目标的”技能”不对应;
  • 基于嵌入的方法(如 RDS)效果也不稳定;
  • 已有的梯度影响方法(TracIn)只考虑 SGD,直接用会严重偏向短样本。

4. 新意:

  • 把 TracIn 式的影响推广到 Adam(用 Adam 的更新方向 Γ,预热训练提供 m、v);
  • 用余弦相似度消除序列长度带来的范数偏差;
  • LoRA 预热 + 随机投影构造低维、可复用的梯度数据存储;
  • 目标示例按子任务分别打分取最大,覆盖目标里的不同子技能。

5. 结果:

  • 在 MMLU、TyDiQA、BBH 上,LESS 选的 5% 比随机 5% 高 2–5 分,常常超过全部数据(尤其在 Mistral-7B、LLaMA-2-13B 上);
  • 是唯一在所有设置上都稳定有效的选择方法;
  • 用 LLaMA-2-7B 选的数据训练 13B 和 Mistral-7B 也有效(LESS-T);
  • 定性分析显示它按推理技能而不是表面形式选数据。

本讲的验证:

  • 小模型上 LESS 选出的 5% 全是目标任务,微调后 82%,全部数据只有 17%、随机 5% 只有 10%;
  • 点积确实被范数主导。
  • 额外的观察:
    • 这里点积偏向的是高损失的噪声文档;
    • 只用精选数据会导致灾难性遗忘。

局限:

  • 计算梯度存储的成本不低(要为整个数据池做多次前向 + 反向),论文也承认它”计算代价相对较高”;
  • 需要预热训练,而且选择结果依赖预热的检查点;
  • 一阶近似忽略了样本之间的相互作用(选出的样本可能高度冗余);
  • 只研究了定向的能力,对通用能力的影响(遗忘)需要另外处理。

6.3 SimPO: Simple Preference Optimization with a Reference-Free Reward(Meng, Xia, Chen, NeurIPS 2024)

1. 问题:DPO 是最常用的离线偏好优化方法,但它需要参考模型,而且它优化的隐式奖励和生成时模型的偏好不一致。能否设计一个更简单、更有效、更省资源的目标?

2. 为什么重要又困难:

  • 偏好优化是对齐的关键一步,每个开源模型都要做;
  • 参考模型带来额外的计算和显存;
  • 奖励和生成不一致会让训练”在优化错的东西”;
  • 去掉参考模型后,如何防止模型退化、如何控制长度,需要新的设计。

3. 以前的工作为什么不行:

  • DPO:参考模型 + 奖励与似然不一致(只有约 50% 的训练对两者一致);
  • IPO、KTO、ORPO、R-DPO、CPO 等变体各自解决一部分问题,但要么仍需参考模型,要么在多种设置下不如 DPO 稳定;
  • 长度问题:DPO 训练后回答往往变长,不加控制时长度和奖励高度相关。

4. 新意:

  • 用平均对数概率作隐式奖励:和生成一致、按长度归一化、不需要参考模型;
  • 在 Bradley-Terry 目标里加目标间隔 γ;
  • 系统的消融:长度归一化至关重要(去掉会生成又长又差的回答),间隔有合适的范围。

5. 结果:

  • 在 Mistral、Llama 3、Gemma 2 的基座与指令模型上,AlpacaEval 2 比 DPO 最多高 6.4 分、Arena-Hard 最多高 7.5 分,没有显著增加长度;
  • 奖励准确率更高;
  • 运行时间少约 20%、显存少约 10%;
  • Gemma-2-9B-it 版本在 Chatbot Arena 的 10B 以下模型里排名第一。

本讲的验证:

  • 玩具策略上 SimPO 的真实质量更高、回答略短、奖励准确率更高(79% vs 72%),奖励与似然排序 100% 一致(DPO 83%);
  • 计算 / 显存的账(25% / 11%)与论文的 20% / 10% 同量级。
  • 额外的观察:偏好数据里的长度偏差两种方法都会学到。

局限:

  • 没有参考模型的约束,模型可能离 SFT 模型很远(论文依赖小学习率、高质量的偏好数据等因素来避免退化);
  • β、γ 需要调(不同模型的最优值差别不小,例如 Llama-3-Instruct 需要更大的 β);
  • 评测主要依赖 LLM 评审的基准,可能有偏差(论文自己也讨论了)。

6.4 三篇论文之间的联系

  • 同一个问题的三个阶段:预训练(Sheared-LLaMA)、指令微调(LESS)、偏好对齐(SimPO)——每一个阶段都问”能不能用更少的资源得到更好的模型”。
  • 都在利用已有的东西:已有的大模型(剪枝继承知识)、已有的数据池和模型自己的梯度(选数据)、模型自己的似然(不要另一份参考模型)。
  • 都有”不要只看平均”的思想:Sheared-LLaMA 看各领域的损失差,而不是总损失;LESS 看目标的每个子任务(取最大),而不是平均相似度;SimPO 看平均似然(按长度归一化),而不是总似然。
  • 都和系统相关:剪枝要剪出规整的形状才能真的变快(表 4:同样稀疏度,均匀的层配置生成 58 / 43 token/s,CoFi 的非均匀配置 51 / 37);LESS 的成本主要在梯度的计算和存储,靠 LoRA 和随机投影才可行;SimPO 去掉参考模型就省掉了一份前向和一份显存。

7. 小结 · Summary

  1. 帕累托前沿:同时看成本和质量;“省了多少”一定要说清楚口径(Sheared-LLaMA 的 3% 不含源模型的成本)。
  2. 结构化剪枝 + 继续训练:hard concrete 掩码 + 拉格朗日乘子剪成指定形状;剪出来的模型继承了源模型的能力,少量继续训练就能超过从头训练的同尺寸模型;动态批加载按各领域的损失差调整配比。
  3. LESS:用”训练样本的 Adam 更新方向和目标示例梯度的余弦相似度”估计影响;LoRA + 随机投影让梯度存储可行;5% 的精选数据常常胜过全部数据。
  4. SimPO:平均对数概率当奖励(和生成一致、不需要参考模型)+ 目标间隔;效果更好、更省资源。
  5. 共同的主题:把已有的资源用得更充分,推动开放模型的质量—成本前沿。

8. 常见误区 · Common misconceptions

  • “剪枝只用了 3% 的算力,所以比从头训练便宜 30 倍。” 这是边际成本,不包括源模型的预训练;只有在源模型已经存在(或者要剪出很多个小模型摊销)时才成立(代码 01)。
  • “剪枝之后模型就能直接用。” 对通用 LLM,剪完必然掉性能,继续预训练才是关键(论文 §2;代码 02:学出来的掩码剪完正向掉到 79%)。
  • “非结构化 / 不规整的剪枝和结构化剪枝一样能加速。” 只有规整的形状才能真的在硬件上变快;同样的稀疏度,非均匀的层配置推理更慢(论文表 4)。
  • “数据越多越好。” 对定向的能力,大部分数据无关甚至有害;精选的 5% 可以超过全部数据(LESS 表 2;代码 03:82% vs 17%)。但只用精选数据会遗忘其他能力。
  • “选数据就看样本和目标像不像。” 表面相似(词、话题)常常选错;LESS 看的是梯度——这个样本会把模型往哪个方向推(代码 03:tf-idf 选了一半”只有事实”的文档)。
  • “梯度内积越大越有用。” 内积会被范数主导:长度短、损失高(甚至是噪声)的样本范数大。要用余弦(代码 03:点积选进了 14% 的噪声)。
  • “SimPO 不需要参考模型,所以模型可以随便偏离。” 没有了 KL 约束,要靠小学习率、高质量的偏好数据和长度归一化来防止退化。
  • “DPO 会让回答变长,SimPO 不会。” 如果偏好数据本身偏爱长回答,两者都会学到;SimPO 的长度归一化让它不会因为”写得更长”本身而得到更高的奖励(代码 04:两者都变长,SimPO 略短、质量更高)。

9. 练习 · Exercises(含参考答案)

练习 1 四个模型的(训练算力,分数):A (1, 50),B (2, 49),C (3, 56),D (5, 55)。哪些在帕累托前沿上?

答案:A 和 C。B 比 A 贵又差,被 A 支配;D 比 C 贵又差,被 C 支配。A 最便宜,C 是在不超过它的成本下最好的。

练习 2 按 6·N·D 估算:Sheared-LLaMA-1.3B(1.3B 参数、50B token)和 Pythia-1.4B(1.4B、300B token)的训练算力各是多少?前者是后者的百分之几?如果再算上源模型 LLaMA2-7B(6.7B、2T token)的成本呢?

答案:

  • Sheared:6 × 1.3e9 × 50e9 = 3.9e20;Pythia:6 × 1.4e9 × 300e9 = 2.5e21;前者是后者的 15.5%。
  • 源模型:6 × 6.7e9 × 2e12 = 8.0e22,加上后是 Pythia 的约 32 倍。
  • 所以”便宜”的前提是源模型已经存在。

练习 3 hard concrete 分布中 β = 2/3、γ = −0.1、ζ = 1.1。log α = 0 时,z ≠ 0 的概率是多少?要让这个概率接近 1,log α 大概要多大?

答案:

  • P(z ≠ 0) = sigmoid(log α − β·log(−γ/ζ)) = sigmoid(0 − (2/3)·log(0.1/1.1)) = sigmoid(1.60) ≈ 0.83。
  • log α = 3 时 sigmoid(4.6) ≈ 0.99。代码里掩码就初始化在 log α = 3(几乎全部保留),剪枝过程中逐渐把一部分推向 0。

练习 4 为什么 Sheared-LLaMA 的约束项同时有一次项 λ·(Σz − T) 和二次项 φ·(Σz − T)²,而且 λ、φ 要做梯度上升?

答案:

  • 这是增广拉格朗日法:一次项让”违反约束”有线性的代价,乘子 λ 会自动调到让约束刚好满足的大小;二次项在远离约束时提供更强的拉力,让优化更稳定。
  • 对乘子做梯度上升:约束没满足时(Σz ≠ T),惩罚项对 λ、φ 的梯度把它们推向让惩罚更大的方向,于是模型被迫满足约束;约束满足时惩罚项为 0,乘子不再变化。
  • 这样不用手工调一个固定的正则化系数,就能精确地剪到指定形状。

练习 5 动态批加载:当前配比 w = (0.5, 0.5),两个领域的验证损失比参考损失分别高 Δ = (0.1, 0.5)。更新后的配比是多少?如果某个领域的损失已经低于参考损失呢?

答案:

  • α = (0.5·e^0.1, 0.5·e^0.5) = (0.553, 0.824),归一化后 w ≈ (0.40, 0.60)。
  • 损失低于参考时 Δ = max(ℓ − ℓ_ref, 0) = 0,α = w·1,这个领域的权重不增加,相对地被其他领域”挤”小(论文表 3:GitHub 从 4.5% 降到 0.8%)。

练习 6 LESS 的数据池约 27 万个样本;LLaMA-2-7B 的 LoRA 梯度按 1.3 亿维估算(论文:不到原模型的 2%)。存 4 个检查点、FP16,直接存梯度要多大?投影到 8192 维呢?

答案:

  • 直接存:2.7e5 × 1.3e8 × 4 × 2 字节 ≈ 2.8e14 字节 = 280 TB——不可行;
  • 投影后:2.7e5 × 8192 × 4 × 2 ≈ 17.7 GB——存得下,而且换一个目标任务只要再算几个目标示例的特征。
  • Johnson-Lindenstrauss 引理保证随机投影大致保持内积(余弦)。

练习 7 两条回答:y₁ 长 10 个 token,策略下 log π = −20,参考模型下 −30;y₂ 长 20 个 token,策略下 −36,参考模型下 −40。β = 1。DPO 和 SimPO(γ = 0)分别更喜欢哪一条?生成时(按平均对数似然)模型更偏好哪一条?

答案:

  • DPO 的奖励:y₁ = −20 − (−30) = 10,y₂ = −36 − (−40) = 4,DPO 认为 y₁ 更好。
  • SimPO 的奖励:y₁ = −20/10 = −2.0,y₂ = −36/20 = −1.8,SimPO 认为 y₂ 更好。
  • 生成时的偏好(平均对数似然):y₂(−1.8 > −2.0)。
  • 这个例子里 DPO 的奖励排序和生成的偏好不一致:y₁ 相对参考模型提高得多,但模型实际上更可能生成 y₂。SimPO 的奖励就是平均似然,永远一致。

练习 8 (开放)你有 1000 个 GPU 小时,要为一个专门领域(比如法律问答)做一个 1B 级别的开源模型。现有资源:一个开源的 8B 通用模型、一个混杂的 100 万条指令数据集、一批人工偏好对。怎样用本讲的三个杠杆安排预算?

参考思路:

  • 剪枝:把 8B 剪成 1B 级别的规整形状,大部分算力用在继续预训练上;如果有领域语料,用动态批加载平衡通用语料和领域语料的损失。
  • 数据选择:用少量法律问答的示例,在小模型上算 LESS 的梯度存储(可以用剪出的模型做选择模型),从 100 万条里选几个百分点做指令微调;混入少量通用数据防止遗忘。
  • 对齐:用 SimPO 在偏好对上训练,省掉参考模型的显存和计算;注意偏好数据里有没有长度偏差。
  • 每一步都要留出评测:剪枝后的困惑度、选择后的目标任务、对齐后的胜率,确认是在把前沿往外推,而不是用更多资源换来的。

10. 延伸阅读 · Further reading

  • M. Xia, Z. Zhong, D. Chen, Structured Pruning Learns Compact and Accurate Models(ACL 2022)——CoFiPruning,Sheared-LLaMA 的前身。
  • M. Xia et al., Training Trajectories of Language Models Across Scales(ACL 2023)——讲者关于不同规模模型训练动态的分析。
  • C. Louizos, M. Welling, D. Kingma, Learning Sparse Neural Networks through L0 Regularization(ICLR 2018)——hard concrete 分布。
  • S. M. Xie et al., DoReMi: Optimizing Data Mixtures Speeds Up Language Model Pretraining(NeurIPS 2023)——动态批加载借鉴的数据配比方法。
  • G. Pruthi et al., Estimating Training Data Influence by Tracing Gradient Descent(NeurIPS 2020)——TracIn。
  • R. Rafailov et al., Direct Preference Optimization: Your Language Model is Secretly a Reward Model(NeurIPS 2023)——DPO。

11. 下一讲预告 · Next lecture

第 21 讲回到原课的主线:混合专家(Mixture-of-Experts)。

  • 前馈层占了 Transformer 的大部分参数;MoE 把一个前馈层换成很多个”专家”,每个 token 只激活其中几个——参数量增长,每个 token 的计算量不变;
  • 门控与 top-K 选择、负载均衡;
  • 批量的 MoE 为什么等价于块稀疏矩阵乘法(MegaBlocks),怎样用前缀和求出置换下标、用分组 GEMM 高效计算;
  • 专家并行(Switch Transformer)的 all-to-all 通信,以及 MoE 的混合并行。

这也连回了本讲的主题:MoE 是另一种推动”质量—成本”前沿的方法——用更多的参数换质量,而不增加每个 token 的计算。

← 返回课程目录