Self-Play Fine-Tuning (SPIN):把弱语言模型自我博弈成强模型
一句话总结:不引入任何新的人类标注 / 偏好数据,让一个已经 SFT 过的 LLM 和上一版的自己对打——把"自己生成的回答"当负样本、把"人类 SFT 数据里的回答"当正样本做区分式微调,一轮轮把生成分布拉向人类数据分布 \(p_{data}\);理论上收敛点恰是 \(p_\theta = p_{data}\),实验上把 zephyr-7b-sft 的 Open LLM Leaderboard 均分从 58.14 推到 63.16,只用 SFT 数据就追平甚至超过用了 62k 额外 GPT-4 偏好数据的 DPO。
- 来源:Zixiang Chen*, Yihe Deng*, Huizhuo Yuan*, Kaixuan Ji, Quanquan Gu(UCLA),ICML 2024,arXiv:2401.01335v3,2024-06-14
- 代码:https://github.com/uclaml/SPIN
- 本地 PDF:ref06_spin-self-play-finetuning.pdf
TL;DR 速览
- 问题:SFT 用完人类标注数据后就到顶了——在同一份 SFT 数据上继续多训几个 epoch,分数停滞甚至下降。而 RLHF/DPO 想再进一步,就得额外采集昂贵的人类偏好数据或训一个奖励模型。能不能不要任何额外人类数据,就让一个弱 LLM 自己把自己变强?
- 方法: 1. 从一个 SFT 过的模型 \(p_{\theta_0}\) 出发; 2. 每一轮用上一版模型 \(p_{\theta_t}\) 对 SFT 数据里的 prompt 生成"合成回答" \(y'\)(当负样本),人类回答 \(y\) 当正样本; 3. 两人博弈:主玩家(新模型 \(p_{\theta_{t+1}}\))学着区分 \(y\)(人类)和 \(y'\)(旧模型);对手(旧模型)力图生成"像人类的"回答; 4. 用一个 IPM(积分概率度量)风格的目标 + logistic loss,把这套博弈压成一个端到端可训的损失 \(L_{\text{SPIN}}\),本质是"提高人类回答的对数似然、压低自生成回答的对数似然",形式上很像 DPO 但不需要偏好对; 5. 迭代到 \(p_\theta = p_{data}\)——此时最强的模型也分不清"上一版自己"和"人类"的回答,博弈停止。
- 关键数字:
- Open LLM Leaderboard 均分 58.14 → 60.80(iter0)→ 62.12(iter1)→ 62.97(iter2)→ 63.16(iter3);GSM8k、TruthfulQA 单项 +10%+ / +5%+。
- MT-Bench 5.94 → 6.78(超过 vicuna-13b 的 6.57)。
- iter0 就追平 zephyr-7b-DPO(用了 62k GPT-4 偏好数据),iter1 在多数数据集上超过 DPO。
- 在 SPIN iter3 之上再叠 DPO,还能再 +0.89 分(→64.05)——说明 SPIN 可插在 SFT 与 RL 之间。
- 一句话评价:这是"self-play + boosting(弱转强)"两条老思想在 LLM 对齐上的一次干净落地。它最漂亮的不是分数,而是理论闭环——把 self-play 目标推导成一个有唯一全局最优(\(p_\theta=p_{data}\))的凸损失,并证明它是 DPO 的一个"自博弈 + 隐式奖励"表亲。真正的杠杆是:SFT 数据里其实还藏着没被榨干的监督信号,用"判别自己 vs 人类"这个自监督代理任务能把它逼出来。
tags: #自我改进 #self-play #self-training #weak-to-strong #alignment #DPO #GAN #synthetic-data
related: [[ref05_self-rewarding-language-models]](并行工作:LLM 当自己的奖励模型 + iterative DPO)· [[ref04_absolute-zero]](无外部数据的自我博弈/自我对弈范式)· [[ref14_self-refine]](自我改进但走推理时精炼路线)· [[ref17_self-harness]]("系统改自己"谱系,但改的是 harness 而非权重)· [[ref09_meta-harness]]
摘要
通过 SFT 利用人类标注数据是推进 LLM 的关键。本文研究不获取额外人类标注数据、把弱 LLM 养成强 LLM 的可能。我们提出 Self-Play fIne-tuNing (SPIN),从一个 SFT 模型出发;其核心是一个自我博弈机制——LLM 通过与自身的多个实例对打来精炼能力。具体地,LLM 用它前几轮迭代生成自己的训练数据,通过区分这些自生成回答与人类标注回答来精炼策略。
理论上,作者证明训练目标的全局最优当且仅当 LLM 策略与目标数据分布对齐时取得。实验上在 Open LLM Leaderboard、MT-Bench、Big-Bench 上,SPIN 显著提升性能,甚至超过用额外 GPT-4 偏好数据做 DPO 的模型——这揭示了 self-play 在"不需要专家对手就能达到人类级表现"上的前景。
1 介绍:能不能不靠外部数据,让弱 LLM 自己变强?
论文的动机链条很清晰。LLM 对齐(把预训练模型调成更符合人类期望的行为)主要靠两条路:SFT(基于人类示范的监督微调)和 RLHF(基于人类偏好的强化学习)。这两条路都吃"大量人类标注数据"——SFT 要示范、RLHF 要偏好标注,都很贵。于是自然的问题是:能不能只用已有的 SFT 数据、不再引入任何新人类数据,把模型继续往上推?
作者把这个问题接到一条更古老的机器学习母题上——"弱转强"(weak-to-strong):能否在没有额外训练数据的前提下,把弱学习器变成强学习器?这可以追溯到 boosting(Schapire 1990;Freund & Schapire 1997)和 self-training(自训练,Vapnik 1999)。作者的答案是:借助 self-play(自我博弈)——就像 AlphaGo Zero / AlphaZero 靠"自己和自己下棋"从零变强一样,让 LLM 也"和自己对打"来自我提升。
[!TIP] 什么是 self-play(自我博弈)? Self-play 指算法通过与自身的副本对弈来学习,是多智能体强化学习(MARL)里的经典范式。它的魔力在于:对手会随着自己一起变强,从而自动提供一条难度递增的课程(curriculum)——你永远在跟"和你旗鼓相当、且在进步的对手"过招,不会太简单也不会太难。里程碑是 AlphaGo Zero(Silver et al. 2017b):不用任何人类棋谱,纯靠自我对弈就打败了人类顶尖棋手。SPIN 把这个思路首次搬到 LLM 微调:主玩家(新模型)与对手(旧模型)都是"同一个 LLM 的不同迭代版本",对弈的"胜负"被定义为"能否区分人类回答与旧模型回答"。随着旧模型越来越像人类,这个判别任务越来越难,逼着新模型不断精进,直到"分不清自己和人类"为止。
核心机制概述:记上一轮模型为 \(p_{\theta_t}\),用它对 SFT 数据里的 prompt \(x\) 生成回答 \(y'\)。目标是训练一个新模型 \(p_{\theta_{t+1}}\),让它能把 \(p_{\theta_t}\) 生成的 \(y'\) 和人类生成的 \(y\) 区分开。这可以看成一个两人博弈:主玩家(新 LLM)想分辨"对手 \(p_{\theta_t}\) 的回答"和"人类回答";对手(旧 LLM)想生成尽量像人类 SFT 数据的回答。新 LLM 通过微调偏好 \(p_{data}\) 的回答、压低 \(p_{\theta_t}\) 的回答,得到一个更贴近 \(p_{data}\) 的分布。下一轮,新模型又成为对手去生成回答……最终收敛到 \(p_{\theta^*} = p_{data}\)——此时最强的 LLM 也无法区分"上一版自己"和"人类"生成的回答。
论文用 Figure 1 直观展示了"为什么还有提升空间":

Figure 1 逐元素解读(这张图是"质量差距"的存在性证明,也是 SPIN 训练数据的构造示意): - 左上蓝框「Chosen: ground truth completion」:人类真值回答。对"南安普顿最流行的通勤方式"这个问题,人类回答诚实地说"我没有当前数据",然后定性地说历史上主要是公交,也有火车、出租车网络。 - 右上红框「Rejected: model generation @Iter 0」:iter0 模型(即基座 SFT 模型 zephyr-7b-sft)的生成。它虽然流畅,却编造了精确到百分比的数字——"55% 开车、23% 公共交通、12% 骑车、10% 步行",这些很可能是幻觉。在 SPIN 里它被当作负样本(Rejected)。 - 下方蓝框「Model generation @Iter 1」:iter1(经过一轮 SPIN)模型的生成。它回到了"我没有最新数据"的诚实姿态,但在保持定性的同时补充了更多细节(公交/火车/渡轮、自行车基础设施、私家车出租车),橙色高亮部分是相对 iter0 增加的合理内容,整体更贴近人类真值。 - 闭环含义:iter0 的负样本"编数字"→ 训练主玩家学会"人类回答不编数字"这一区分 → iter1 的生成就纠正了这个毛病。这正是"用自生成的差回答当负样本、把模型往人类分布拉"的可视化。
论文还明确对比了两个并行/相关工作,以厘清 SPIN 的独特性:
[!TIP] SPIN vs 两个并行工作(作者在 §1 末尾专门澄清) - Singh et al. 2023(ReST^EM / "Beyond human data"):用带二元反馈的合成数据做自训练来减少对人类数据的依赖。→ SPIN 靠 self-play 机制,连二元反馈 / 额外奖励模型都不需要。 - Burns et al. 2023(Weak-to-Strong Generalization):用一个弱 LLM 当监督者去训练更强的 LLM。→ 它需要"弱监督者 + 强模型"两个模型;SPIN 只用一个 LLM(自己既当生成器又当判别器)。
2 相关工作:self-play + 合成数据 + GAN + weak-to-strong 的交叉
[!TIP] ① Self-Play(自我博弈) - TD-Gammon(Tesauro et al. 1995):self-play 的历史起点,用时序差分学习自我对弈玩西洋双陆棋。 - AlphaGo Zero(Silver et al. 2017b):self-play 的里程碑,不用人类棋谱纯自对弈战胜人类。SPIN 明确说自己"take the self-play approach akin to AlphaGo Zero"。 - AlphaZero / AlphaStar(星际2)等:把 self-play 推广到更多博弈/游戏。
共同点:都在 MARL / 博弈场景验证了 self-play"把弱模型变强、无需额外人类数据"的能力。SPIN 的贡献:据作者所知,首次把 self-play 用到 LLM 的增强上。
[!TIP] ② LLM 的合成数据(Synthetic Data) - 主流做法:用更先进的模型(如 GPT 系列)当"老师"生成高质量数据,再拿来 SFT 目标模型(Alpaca、Vicuna、Synthie 等)。 - 也有工作探索 LLM 的改写能力(Rephrase-and-Respond、RaR 等)来增强合成数据。
SPIN 的差异:以往合成数据靠更强的外部模型生成;SPIN 直接从目标模型自己生成合成数据——不需要更强的老师。
[!TIP] ③ 生成对抗网络(GAN)与积分概率度量(IPM)(附录 A 详述,与 SPIN 的目标函数直接同源) - GAN(Goodfellow et al. 2014):生成器 vs 判别器的对抗博弈。 - Wasserstein GAN(Arjovsky et al. 2017):用 IPM(积分概率度量)设计损失,把判别器约束到某个函数类,防止它"压垮"生成器、提升训练稳定性。 - Relativistic GAN(Jolicoeur-Martineau 2018):引入"相对论判别器",估计"真数据比假数据更真实的概率"。SPIN 的目标 (4.2) 在形式上与 Relativistic GAN 相似,用线性 loss 时退化为 Wasserstein GAN 的 IPM 框架。
SPIN 与 GAN 的关键区别:GAN 里判别器和生成器是两个不同网络;SPIN 里判别器(主玩家)和生成器(对手)是同一个 LLM 的相邻两次迭代——这是它"self-play"的本质。
| 方法 | 生成器 / 对手 | 判别器 / 主玩家 | 是否需要外部数据 | 迭代性 |
|---|---|---|---|---|
| GAN | 独立生成网络 | 独立判别网络 | 真实数据分布 | 交替训练 |
| DPO | —(无生成对抗) | 策略 = 隐式奖励 | 需要偏好对 \((x,y_w,y_l)\) | 单轮(原生非迭代) |
| Self-Rewarding LM [[ref05_self-rewarding-language-models]] | LLM 自己生成 | LLM 自己当奖励模型 | 只需种子 SFT | 迭代 DPO |
| SPIN(本文) | 旧版自己 \(p_{\theta_t}\) | 新版自己 \(p_{\theta_{t+1}}\) | 只需 SFT 数据 | 自然迭代 |
[!TIP] ④ Weak-to-Strong / Boosting / Self-Training 血统 - Boosting(Schapire 1990; Freund & Schapire 1997):把一堆"弱学习器"组合成"强学习器"的经典理论,是"弱转强"的思想源头。 - Self-Training(Vapnik 1999; Lee 2013 pseudo-label):用模型自己的预测当伪标签迭代训练;已被证明能在混合模型里把弱学习器转成强学习器(Frei et al. 2022)。 - Curriculum Learning(课程学习,Bengio et al. 2009):按"由易到难"的顺序喂数据能提升训练效果。SPIN 与之神似——训练数据随迭代演化:一开始是"容易和人类区分"的差回答,逐渐变成"越来越难区分"的好回答,天然形成一条课程。
3 问题设定与预备知识
3.1 记号与自回归分解
LLM \(p_\theta\) 接受 prompt \(x = [x_1,\dots,x_n]\),生成回答 \(y = [y_1,\dots,y_m]\),\(y\) 是从条件分布 \(p_\theta(\cdot|x)\) 采样的。自回归模型逐 token 生成,构成一个马尔可夫过程:
其中 \(y_{<1}\) 为空,\(y_{<j} = [y_1,\dots,y_{j-1}]\)。
3.2 SFT 与它的天花板
SFT(监督微调) 最小化人类高质量回答的负对数似然:
| 符号 | 含义 |
|---|---|
| \(q(\cdot)\) | prompt 的分布 |
| $p_{data}(\cdot | x)$ |
| $p_\theta(y | x)$ |
\(L_{\text{SFT}}\) 在 \(p_\theta(y|x)\) 完全对齐 \(p_{data}(y|x)\) 时取最小。
[!IMPORTANT] SFT 的天花板 —— SPIN 的直接动机。给定一个已经 SFT 好的 \(p_{\theta_0}\),再在同一份 SFT 数据 \(S_{SFT}\) 上继续跑 (3.1) 是无效的、甚至会更差(论文附录 Table 5:zephyr-7b-sft 再 SFT 一个 epoch,均分从 58.14 掉到 57.23)。原因直觉上是:SFT 的负对数似然只"拉高正确答案的概率",当模型已经能较好拟合训练答案时,梯度信号趋于饱和,无法再提供有效改进方向。但作者观察到:SFT 模型自己生成的回答 \(y'\) 与人类真值 \(y\) 之间仍有明显质量差距(见 Figure 1)——这说明 SFT 数据里还有没被榨干的信号,只是需要换一种"利用方式"。SPIN 就是这种新利用方式。
3.3 RL 微调(及其对偏好数据的依赖)
RL 微调最大化带 KL 正则的奖励:
其中 KL 正则把新模型 \(p_\theta\) 约束在参考模型 \(p_{\text{ref}}\)(通常初始化为 SFT 模型)附近,\(\lambda>0\) 控制偏离程度,防止 mode collapse(模式坍缩)。RL 微调的主要难点是找一个好的奖励函数 \(r(x,y)\)——这通常要在偏好数据集上训练,而偏好数据要么靠人类标注(RLHF)、要么靠强 AI 标注(RLAIF),都很贵。SPIN 正是要绕开这个偏好数据依赖。
4 方法:SPIN 的两步博弈与端到端目标
[!TIP] SPIN 一图流(信息流) ``` 第 t 轮结束 → 得到模型 p_{θt} │ ├─(生成)用 p_{θt} 对 SFT 里每个 prompt x 采样合成回答 y' ← 负样本 │ 人类真值 y(来自 SFT 数据) ← 正样本 │ ├─(训练主玩家)学一个 f_{t+1},让 f(x,y) 高、f(x,y') 低 │ ("y 来自人类而非旧模型"的信念度) │ ├─(更新对手)把 f_{t+1} 反解成新模型参数 θ_{t+1} │ → p_{θt+1} 更偏好人类回答、更贴近 p_data │ └─ θ_{t+1} 直接复制成下一轮对手 → 回到顶部,t←t+1
收敛:p_θ = p_data 时,f 无法区分,博弈停止 ```
4.1 训练主玩家:从 IPM 到 logistic loss
主玩家的目标受积分概率度量(IPM)启发——让主玩家 \(f_{t+1}\) 最大化"人类分布 \(p_{data}\) 与对手分布 \(p_{\theta_t}\)"之间的期望值差距:
期望在 \(x\sim q(\cdot),\ y\sim p_{data}(\cdot|x),\ y'\sim p_{\theta_t}(\cdot|x)\) 上取。\(f_{t+1}(x,y)\) 反映主玩家"相信 \(y\) 来自 \(p_{data}\) 而非 \(p_{\theta_t}\)"的程度——人类回答应给高值、旧模型回答应给低值。
更一般地,可以写成带损失函数 \(\ell\) 的最小化:
其中 \(\ell(\cdot)\) 单调递减且凸。
[!TIP] 为什么最终选 logistic loss \(\ell(t)=\log(1+e^{-t})\)?(讲透 + 举例) - 若取线性 loss \(\ell(t)=-t\),(4.2) 就退化成 (4.1) 的最小化版本。但线性 loss 的目标值无界——训练中会把对手回答上的 \(f(x,y')\) 推到 \(-\infty\),数值发散。 - 选 logistic loss 是因为它非负、光滑、且尾部指数衰减(\(t\to\infty\) 时 \(\ell(t)\to 0\)),能阻止 \(f\) 的绝对值无限增长,稳定训练。 - 数值举例:设某样本上人类回答得分 \(f(x,y)=2.0\)、旧模型回答得分 \(f(x,y')=0.5\),则 margin \(t=1.5\),\(\ell(1.5)=\log(1+e^{-1.5})\approx0.201\)(损失小,说明已分得较开);若 margin \(t=-1\)(模型把负样本打得比正样本还高),\(\ell(-1)=\log(1+e^{1})\approx1.313\)(损失大,梯度强,逼模型纠正)。可以看到 logistic loss 对"分错"惩罚重、对"分对"惩罚趋零,正是我们想要的判别式行为。 - 与 GAN 的联系:这个"logistic + 值差"结构,正是把 GAN 判别器损失搬到"相对论判别器"(比较两个样本相对真实性)上的形式。
4.2 更新对手:闭式解 + 反解出函数类 \(\mathcal{F}_t\)
给定训练好的主玩家 \(f_{t+1}\)(它能区分 \(p_{data}\) 和 \(p_{\theta_t}\)),对手要找一个新 LLM,使其生成的回答对主玩家而言和 \(p_{data}\) 难以区分,即最大化 \(\mathbb{E}_{y\sim p(\cdot|x)}[f_{t+1}(x,y)]\),同时加 KL 正则稳定 self-play:
(4.3) 有闭式解:
但 \(\widehat{p}\) 不保证落在 LLM 参数化空间 \(\{p_\theta(\cdot|x)\mid\theta\in\Theta\}\) 内。作者的关键一步:希望这个闭式解能被一个 LLM 实现,即 \(p_\theta(y|x)=\widehat{p}(y|x)\),反解得 \(f_{t+1}(x,y)=\lambda\cdot\log\frac{p_\theta(y|x)}{p_{\theta_t}(y|x)}\)。这倒推出主玩家应该在的函数类:
即 \(f_{t+1}(x,y) = \lambda\cdot\log\frac{p_{\theta_{t+1}}(y|x)}{p_{\theta_t}(y|x)}\)(式 4.6)。把 (4.6) 代回 (4.4),正好得到 \(\widehat{p}(y|x)=p_{\theta_{t+1}}(y|x)\)——主玩家的最优解 \(\theta_{t+1}\) 恰恰就是理想对手的参数。这是 SPIN 能把"训主玩家"和"更新对手"合成一步的数学关键。
[!TIP] 什么是"隐式判别器 = 对数似然比"?(这一步的精髓) SPIN 没有像 GAN 那样显式训一个独立判别器网络,而是把判别器直接参数化成"两个策略的对数似然比" \(\lambda\log\frac{p_\theta}{p_{\theta_t}}\)。直觉:如果新模型 \(p_\theta\) 在某个回答 \(y\) 上比旧模型 \(p_{\theta_t}\) 给了更高概率,那这个比值就大,意味着"新模型认为 \(y\) 更像人类该说的话"。于是判别(是不是人类回答)和生成(要不要提高这个回答的概率)被同一组参数 \(\theta\) 统一了——这正是 DPO"你的语言模型其实偷偷是个奖励模型"的同款思想(\(r(x,y)\propto\log\frac{p_\theta}{p_{\text{ref}}}\))。这也解释了为什么 SPIN 与 DPO 形式上如此像。
4.3 端到端训练目标 \(L_{\text{SPIN}}\)
把 (4.5) 代入 (4.2),得到 SPIN 每轮的更新规则 \(\theta_{t+1}=\arg\min_\theta L_{\text{SPIN}}(\theta,\theta_t)\),其中:
期望在 \(x\sim q(\cdot),\ y\sim p_{data}(\cdot|x),\ y'\sim p_{\theta_t}(\cdot|x)\) 上取。
| 符号 | 含义 |
|---|---|
| \(p_\theta\) | 当前正在优化的新模型(主玩家) |
| \(p_{\theta_t}\) | 上一轮模型(对手 + 参考模型,冻结) |
| \(y\) | 人类真值回答(正样本,来自 SFT 数据) |
| \(y'\) | 旧模型 \(p_{\theta_t}\) 生成的合成回答(负样本) |
| \(\lambda\) | KL 正则强度(论文中 \(\beta\),控制偏离旧模型的幅度) |
| \(\ell(t)=\log(1+e^{-t})\) | logistic loss |
[!TIP] 把 \(L_{\text{SPIN}}\) 讲透 + 数值举例 逐项理解:括号里是两个对数似然比之差——"新旧模型在人类回答 \(y\) 上的 logit 变化" 减去 "在自生成回答 \(y'\) 上的 logit 变化"。 - 若这个差 \(>0\):说明新模型相对旧模型,更抬高了人类回答、更压低了自生成回答——这正是我们想要的,\(\ell\) 值小、梯度小。 - 若这个差 \(<0\):新模型反而抬高了自生成的差回答,\(\ell\) 值大、梯度强,逼它反向调整。
数值举例:某 prompt 上,人类回答 \(y\)、旧模型采样出的 \(y'\)(比如 Figure 1 那个"编 55% 数字"的回答)。设 \(\lambda=0.1\): - 人类回答项:\(\log\frac{p_\theta(y|x)}{p_{\theta_t}(y|x)} = 0.8\)(新模型把人类回答概率提上去了); - 自生成项:\(\log\frac{p_\theta(y'|x)}{p_{\theta_t}(y'|x)} = -1.2\)(新模型把"编数字"回答概率压下去了); - margin \(= 0.1\times0.8 - 0.1\times(-1.2) = 0.08+0.12 = 0.20\);\(\ell(0.20)=\log(1+e^{-0.20})\approx0.598\)。 - 训练就是最小化这个损失的期望,效果 = 系统性地提高人类回答、压低自生成回答的相对概率。 - 和 SFT 的本质区别:SFT 只有"提高 \(y\) 的概率"这一半(式 3.1),SPIN 多了"压低自生成 \(y'\)"这另一半,且 \(y'\) 会随迭代越来越像人类——这就是它能突破 SFT 天花板的原因。
迭代过程可总结为:
即:用第 \(t\) 轮对手训第 \(t{+}1\) 轮主玩家 → 直接把 \(\theta_{t+1}\) 复制成新对手 → 训第 \(t{+}2\) 轮主玩家……
[!NOTE] Algorithm 1|Self-Play Fine-Tuning(伪代码复述)
输入: SFT 数据 {(x_i, y_i)}_{i∈[N]}, 初始 LLM p_{θ0}, 迭代数 T for t = 0, ..., T-1 do for i = 1, ..., N do 用旧模型生成合成负样本 y'_i ~ p_{θt}(·|x_i) # 生成步 end for θ_{t+1} = argmin_θ Σ_i ℓ( λ log[p_θ(y_i|x_i)/p_{θt}(y_i|x_i)] # 训练步 − λ log[p_θ(y'_i|x_i)/p_{θt}(y'_i|x_i)] ) end for 输出: θ_T注意:每轮只需 (1) 用当前模型生成一批 \(y'\),(2) 在 (人类 \(y\) vs 自生成 \(y'\)) 上做一次判别式微调。没有奖励模型、没有偏好标注、没有额外人类数据。
4.4 SPIN vs DPO:像但根本不同
\(L_{\text{SPIN}}\) (4.7) 和 DPO(直接偏好优化)的损失长得很像,但作者强调本质不同。DPO 基于 Bradley-Terry 模型 \(p(y_1\succ y_2|x)=\frac{\exp(r^*(x,y_1))}{\exp(r^*(x,y_1))+\exp(r^*(x,y_2))}\),直接优化偏好对的对数似然、无需显式奖励估计。
[!TIP] 什么是 DPO(Direct Preference Optimization)? DPO(Rafailov et al. 2023)是 RLHF 的一个简化替代。传统 RLHF 要先训奖励模型、再跑 PPO;DPO 用一个数学技巧证明——最优策略与奖励之间有闭式对应 \(r(x,y)=\beta\log\frac{p_\theta(y|x)}{p_{\text{ref}}(y|x)}+\text{const}\),于是可以跳过奖励模型,直接在偏好对 \((x,y_w,y_l)\)(\(y_w\) 胜、\(y_l\) 负)上用一个类似 logistic 的损失优化策略。它把"RL + 奖励建模"压成"一个监督式分类损失",极大简化了对齐流程。核心口号是"你的语言模型其实偷偷是个奖励模型"。
三点关键区别(论文 §4.2):
| 维度 | DPO | SPIN |
|---|---|---|
| 迭代性 | 原生非迭代——一轮内把偏好概率对齐 \(p_{data}\) | 自然迭代——self-play 逐轮把 \(p_\theta\) 拉向 \(p_{data}\) |
| 数据需求 | 偏好数据集 \((x, y_w, y_l)\) | 只需 SFT 数据 \((x, y)\);可插在 SFT 与 RL 之间 |
| loss 灵活性 | 绑定 logistic(BT 模型) | 任意凸且递减的 \(\ell\)(correlation / hinge / logistic 均可);只有取 logistic 时才与 DPO 相似 |
| 负样本来源 | 人类/AI 标注的"被拒回答" | 模型自己上一版生成的回答(自监督、无需标注) |
论文还提到两个相关方向:Xu et al. 2023 的 Pairwise Cringe Loss(PCO) 把 DPO 推广成迭代 DPO;并行工作 [[ref05_self-rewarding-language-models]](Yuan et al. 2024)让 LLM 自己当奖励模型提供偏好反馈再跑迭代 DPO。SPIN 与它们的核心差别:SPIN 的"自我评估是隐式的"——不需要任何中间奖励或偏好反馈,判别信号直接藏在对数似然比里。
5 理论分析:全局最优当且仅当 \(p_\theta = p_{data}\)
作者在 loss 的单调 + 凸假设下,给出了 SPIN 的收敛性保证。
[!NOTE] Assumption 5.1:损失 \(\ell(t):\mathbb{R}\to\mathbb{R}\) 单调递减(\(\forall t,\ \ell'(t)\le0\) 且 \(\ell'(0)<0\))且凸。 —— 涵盖常见损失:correlation loss \(\ell(t)=1-t\)、hinge loss \(\ell(t)=\max(0,1-t)\)、exponential loss \(\ell(t)=e^{-t}\)、logistic loss \(\ell(t)=\log(1+e^{-t})\)。
Theorem 5.2(全局最优刻画):在 Assumption 5.1 下,若存在 \(p_\theta(\cdot|x)=p_{data}(\cdot|x)\),则: - (充分性) 若 \(p_{\theta_t}(\cdot|x)=p_{data}(\cdot|x)\),则 \(\theta_t\) 是 (4.7) 的全局最小值(对任意 \(\lambda\ge0\)); - (必要性) 若 \(p_{\theta_t}(\cdot|x)\ne p_{data}(\cdot|x)\),则存在适当的 \(\lambda\),使 \(\theta_t\) 不是全局最小值。
[!IMPORTANT] Theorem 5.2 的含义(Remark 5.3):SPIN 的优化过程恰好在 \(p_\theta=p_{data}\) 处自然停止,且只有到达全局最优(LLM 分布与目标数据分布对齐)时才停止。 这是一个漂亮的"不动点"性质——不会提前卡死在次优点,也不会越过 \(p_{data}\) 漂走。证明思路(附录 C.1):用 \(y,y'\) 的对称性把 \(2L_{\text{SPIN}}\) 写成 \(\ell(t)+\ell(-t)\) 形式,再用 Jensen 不等式(\(\ell\) 凸)得 \(L_{\text{SPIN}}(\theta,\theta_t)\ge\ell(0)=L_{\text{SPIN}}(\theta_t,\theta_t)\);必要性则通过构造 \(g(\lambda)\) 并算 \(g'(0)=\ell'(0)[\mathrm{KL}(p_{data}\|p_{\theta_t})+\mathrm{KL}(p_{\theta_t}\|p_{data})]<0\),说明只要两分布不等就能找到 \(\lambda\) 让 \(\theta_t\) 被超越。
Theorem 5.4(对手更新的精确刻画,logistic loss 下):取 \(\ell(t)=\log(1+e^{-t})\),若 \(p_{\theta_t}(y|x)\big(p_{data}(y|x)/p_{\theta_t}(y|x)\big)^{1/\lambda}\) 落在 LLM 空间内、且 \(\theta_{t+1}\) 是全局最优,则:
[!TIP] Theorem 5.4 讲透 + \(\lambda\) 的作用(Remark 5.5) 这个更新式非常直观——新模型的概率 = 旧模型概率 × (人类/旧模型的比值)^(1/λ): - 当 \(p_{\theta_t}(y|x) < p_{data}(y|x)\)(旧模型低估了某个人类会说的回答)→ 比值 \(>1\) → 新模型提高该回答概率; - 当 \(p_{\theta_t}(y|x) > p_{data}(y|x)\)(旧模型高估了,比如那些流畅但幻觉的回答)→ 比值 \(<1\) → 新模型降低该回答概率。 - 所以更新天然把 \(p_\theta\) 往 \(p_{data}\) 推,再次印证收敛到 \(p_\theta=p_{data}\)。 - \(\lambda\)(=实现里的 \(\beta\))的角色:指数 \(1/\lambda\) 控制每步更新幅度。\(\lambda\) 小 → 更新步子大(\(1/\lambda\) 大,比值被放大);\(\lambda\) 大 → 更新步子小、更稳。因此随着 \(p_\theta\) 接近 \(p_{data}\),增大 \(\lambda\) 能提升训练稳定性——这正是论文实现里"最后一轮 iter3 把 \(\beta\) 从 0.1 猛增到 5.0"的理论依据。这与 (4.3) 里 \(\lambda\) 作为 KL 正则参数、控制偏离旧模型的角色完全一致。 - 附录 C.2 进一步用 Jensen-Shannon 散度(JSD) 给出 (4.2) 的闭式解 \(f^*(x,y)=Z(x)+\log\frac{p_{data}(y|x)}{p_{\theta_t}(y|x)}\),把 SPIN 目标与"最小化 \(p_+\) 和 \(p_-\) 的 JSD"联系起来——这与 GAN 判别器最优时逼近 JSD 的经典结论同构。
6 实验
6.1 设置
- 基座模型:
zephyr-7b-sft-full(基于 Mistral-7B,由 HuggingFace 在 SFT 数据集 Ultrachat200k 上微调而来)。 - 数据:从 Ultrachat200k 随机采 50k prompt,用基座模型生成合成回答。多轮迭代时累积合成数据——iter0 用 50k,iter1/2/3 用 100k(当前轮 50k + 上一轮 50k)。每轮训 2 epoch。
- 评估:HuggingFace Open LLM Leaderboard(6 数据集:Arc、HellaSwag、Winogrande 测常识推理,MMLU 测多任务理解,TruthfulQA 测"是否模仿人类谬误",GSM8k 测数学);另加 MT-Bench、Big-Bench、OpenBookQA。
- 实现要点(附录 B):Alignment Handbook + DeepSpeed ZeRO-3 + FlashAttention-2;RMSProp,全局 batch 64,峰值学习率 iter0/1 为 5e-7、iter2/3 衰减到 1e-7;\(\beta=0.1\)(iter3 增到 5.0),max seq len 2048。prompt 模板
### Instruction: {prompt}\n\n### Response:;多轮对话只取第一轮。
6.2 SPIN 显著提升 benchmark 性能

Figure 2 逐元素解读:横轴是训练阶段(SFT → SPIN iter0/1/2/3),纵轴是 Open LLM Leaderboard 6 数据集的平均准确率(%)。红色折线从 SFT=58.14 起,iter0 跳到 60.80(+2.66),iter1=62.12(+1.32),iter2=62.97(+0.85),iter3=63.16(+0.19)。关键观察:曲线单调上升但增量递减——iter0 涨得最猛(尤其 GSM8k +10%+、TruthfulQA +5%+),后续每轮的提升自然小于前一轮,到 iter3 已趋近饱和(+0.19),说明模型已接近 \(p_{data}\) 这个天花板,与理论预测(收敛到 \(p_\theta=p_{data}\))一致。
各数据集详细分数(附录 Table 4)
| Model | Arc | TruthfulQA | Winogrande | GSM8k | HellaSwag | MMLU | **Average** | |---|---|---|---|---|---|---|---| | zephyr-7b-sft-full | 60.41 | 43.73 | 74.19 | 26.76 | 82.85 | 60.92 | 58.14 | | SPIN iter 0 | 63.40 | 49.18 | 72.69 | 35.10 | 84.38 | 60.03 | 60.80 (+2.66) | | SPIN iter 1 | 65.19 | 55.17 | 72.30 | 35.78 | 84.96 | 59.34 | 62.12 (+1.32) | | SPIN iter 2 | 65.96 | 54.91 | 73.56 | 38.06 | 85.41 | 59.93 | 62.97 (+0.85) | | SPIN iter 3 | 65.87 | 54.90 | 73.72 | 38.97 | 85.54 | 59.99 | 63.16 (+0.19) | 注意 GSM8k(26.76→38.97,+12.2)和 TruthfulQA(43.73→54.90,+11.2)提升最大;Winogrande/MMLU 略有波动但整体稳定。6.3 只用 SFT 数据,追平/超过用了 62k 偏好数据的 DPO

Figure 3 逐元素解读:分组柱状图,横轴是 6 个数据集 + Average,每组从浅到深依次是 Zephyr-SFT、Zephyr-DPO、SPIN-iter0/1/2/3。对照对象 zephyr-7b-beta 是从同一 SFT checkpoint 用 62k UltraFeedback 偏好数据(GPT-4 评判的 chosen/rejected 对) 做 DPO 得到的。关键信息:
- SPIN-iter0(仅用 50k SFT 数据、零额外偏好数据)的 Average 已与 Zephyr-DPO 相当;
- 从 iter1 起,SPIN 在多数数据集上超过 DPO(Average 柱明显更高);
- 尤其 GSM8k、Arc 上 SPIN 后期迭代把 DPO 甩开。
- 意义:DPO 需要昂贵的 GPT-4 偏好标注 + 新数据源,SPIN 只用已有 SFT 数据自产自销就打平/超过——这是全文最有冲击力的对比。
[!NOTE] SPIN + DPO 可叠加(附录 B.3, Table 3):在 SPIN iter3 之上再用 62k 偏好数据做 2 epoch DPO,均分从 63.16 再涨到 64.05(+0.89),TruthfulQA 单项 +5%。说明 SPIN 不是 DPO 的替代品而是"前置增强"——它可以榨干 SFT 数据后,再把 RL 微调的收益叠上去,坐实了"SPIN 可插在 SFT 与 RL 之间"的定位。
6.4 消融:迭代训练是必需的,不能靠"多训几个 epoch"替代

Figure 4 逐元素解读:三个子图((a) Arc Challenge、(b) TruthfulQA、(c) Average),横轴是 iter0 内的训练 epoch 数(0~5),蓝色实线是"iter0 一直多训 epoch"的表现,灰色虚线是"iter1(epoch2)"能达到的水平。关键观察: - iter0 内主要提升发生在前 2 个 epoch,之后基本走平——多训 epoch 达到一个上限就上不去了; - SPIN 表现出稳健性:延长训练不会掉分,但也不会突破单轮上限; - 决定性证据:三个子图里,灰色虚线(iter1)都在蓝色实线的上方——无论 iter0 训多少 epoch 都够不到 iter1 的水平。 - 结论:"换一批新的自生成数据、进入下一轮 self-play"(iter1)比"在旧数据上死磕更多 epoch"(iter0 多训)更有效。这直接证明了 SPIN 的迭代性是不可或缺的组件,也呼应了 §3.2"SFT 多训会饱和"的观察——单纯拉长训练时间无法突破,必须靠"对手随迭代变强"带来的新课程。
训练规模消融(附录,Figure 5):iter0 用 14k/26k/50k 数据训 1 epoch,SPIN 均随规模上升(58.14→59.04→59.82→60.16…直到 50k 时 60.83);而 SFT 在 Ultrachat200k 上继续训 epoch 2、3 涨不过 1%。训练开销(附录 B.2,8×A100):生成时间远小于训练时间(每 64 例生成 6.69s、训练 10s),SPIN 的额外成本主要是合成数据生成,微调本身与 SFT/DPO 等价。
更多任务(附录 Table 6):MT-Bench 5.94→6.78(超 vicuna-13b 的 6.57);Big-Bench 的 causal/formal/sports、OpenBookQA 均稳步提升、无明显退化。且高迭代的生成通常比 iter0 更简洁、更贴近真值(附录 Table 7/8 的生成样例佐证)。
7 结论与讨论
- 核心贡献:SPIN 是一个把弱 LLM 转成强 LLM 的新微调方法,通过 self-play 机制充分释放人类标注数据的潜力——主玩家学着把对手(旧模型)回答与目标数据分布区分开,逐轮把 LLM 对齐到 \(p_{data}\)。相比 SFT/RL 微调,SPIN 无需额外人类数据或更强 LLM 的反馈就能自我提升。
- 局限与未来工作(作者自陈): 1. 理论上 SPIN 收敛当且仅当 \(p_\theta\) 对齐 \(p_{data}\)——因此研究的是固定的人类目标分布,这本身给微调后的 LLM 设了一个性能天花板(它最多学到"像人类 SFT 数据",无法超越)。探索动态变化的目标分布以突破天花板、甚至达到超人水平,是重要方向。 2. 合成数据生成有资源开销,减少所需合成数据量是另一条值得探索的路。
个人思考
与本项目其他论文的关联(放进"自我改进"坐标系)
- 对 [[ref05_self-rewarding-language-models]](几乎同期、同一 arXiv 批次):这两篇是"无外部人类偏好数据的自我改进"的双子星,但机制正交——
- Self-Rewarding:LLM 自己当奖励模型给自己的多个采样打分,生成偏好对,再跑 iterative DPO。它需要模型有"判断质量"的能力(LLM-as-judge),信号是显式偏好。
- SPIN:LLM 把人类 SFT 回答当正、自生成回答当负做判别式微调,信号是隐式对数似然比,不需要模型会打分。
- 判断:SPIN 的前提更弱(连"会判断好坏"都不要求),但天花板也更低(被 \(p_{data}\) 死死封顶);Self-Rewarding 有机会超越 SFT 数据(因为奖励是模型自评、可漂移),但依赖模型的自评质量。二者其实可以合流——用 SPIN 榨干 SFT、再用 Self-Rewarding 突破天花板。
| 维度 | SPIN | Self-Rewarding LM |
|---|---|---|
| 自监督信号 | 人类 vs 自生成的判别(隐式) | LLM 自评的偏好分数(显式) |
| 底层优化器 | 自研 self-play 目标(logistic loss) | iterative DPO |
| 对模型能力的前提 | 只需能生成 | 需具备 LLM-as-judge 能力 |
| 能否超越 SFT 数据 | 否(\(p_{data}\) 封顶) | 有可能(奖励可漂移) |
- 对 [[ref04_absolute-zero]]:Absolute Zero 把"无外部数据的自我博弈"推到极致(自己出题自己解、零人类数据)。SPIN 是这条谱系里更"温和保守"的一员——仍然锚定在人类 SFT 数据这个固定目标上,用 self-play 只是为了更充分地利用它,而非完全甩开人类数据。可以把 SPIN 看成"锚定式 self-play",Absolute Zero 是"开放式 self-play"。
- 对 [[ref14_self-refine]]:都叫"自我改进"但层次完全不同——Self-Refine 是推理时(不改权重,靠自我批评+重写迭代改单次输出),SPIN 是训练时(改权重、改分布)。一个改"这次答案",一个改"模型本身"。
- 对 [[ref17_self-harness]] / [[ref09_meta-harness]]:同属"系统自我改进"大谱系,但 SPIN 改的是模型权重(参数化的策略分布),后者改的是 harness(非参数化的外壳代码)。SPIN 证明了"权重层的自博弈"可行;self-harness 证明了"harness 层的自改进"可行——两条是自我改进的互补切面。
方法论启示(可迁移的通用思路)
- "判别自己 vs 目标"是一个通用的自监督代理任务:当你有一批高质量目标数据、且模型已经能大致拟合它,与其继续做最大似然(会饱和),不如构造"目标样本 vs 模型自采样"的判别任务——这个 margin 信号在 MLE 饱和后依然存在。这个 trick 可迁移到任何"有目标分布 + 模型已初步拟合"的场景。
- 把博弈压成单损失的数学套路值得学:SPIN 的 §4.2 是范本——先写"训判别器"和"更新生成器"两步,各自有闭式解,再用一步的最优解恰好等于另一步的理想输入这个巧合把两步合一。这种"闭式解反解函数类"的推导,是把双层优化降成单层的通用技巧。
- 理论上锁死收敛点 = 免费的安全护栏:Theorem 5.2 保证 SPIN 不会漂过 \(p_{data}\),这让"自我训练"这件本可能失控的事变得可预测。任何自我改进系统,如果能证明"不动点恰是目标",就能极大降低失控风险。
- \(\beta\) 调度(后期增大)的工程直觉:Remark 5.5 给了"越接近目标、越该增大 KL 正则"的理论依据,实现里 iter3 把 \(\beta\) 从 0.1 拉到 5.0——这是"理论指导超参调度"的好例子,可迁移到其他迭代式对齐方法。
在我的工作中能怎么用
- 我们的
pdf-paper-readerskill 若要"自我改进",SPIN 的权重层思路不直接适用(我们不训模型),但它的"判别式自监督"哲学可借鉴:可以收集"高质量人工笔记(正)vs skill 当前产出的笔记(负)",用它们的差异去反推 skill 提示词该补什么——这本质是把 SPIN 的"人类 vs 自生成"判别搬到 prompt 优化上。 - 复现成本参考:SPIN 是本项目里少数给了完整训练开销的论文(8×A100、50k 数据、每轮 2 epoch、生成 1.45h + 训练 4~8h)。若要动手,最小切入是"单轮 iter0 + 小模型 + 小数据集",就能验证"SPIN > 继续 SFT"这个核心命题。
开放问题 / 疑问
- \(p_{data}\) 天花板到底有多低? 作者诚实承认 SPIN 无法超越人类 SFT 数据分布。但 Open LLM Leaderboard 上它涨了 5 分——这说明基座 SFT 远没有拟合到 \(p_{data}\)(还有很大 gap)。问题是:对已经"训得很透"的强模型(gap 很小),SPIN 还有多少空间?论文只在一个 7B 模型上验证。
- 合成数据的分布偏移风险:iter1+ 用的是"上一轮模型生成的数据",若某轮模型有系统性偏差(如某类问题总答错),这个偏差会不会被 self-play 放大?论文的"累积数据"(新旧各半)可能是缓解手段,但没做针对性分析。
- loss 选择的实证空缺:理论允许 correlation/hinge/logistic 等多种 loss,但实验只跑了 logistic(因为要对标 DPO)。其他 loss 会不会训练动力学不同、天花板不同?这是个未探索的自由度。
- 只在"目标分布固定且已知"时成立:SPIN 的整套理论建立在"存在 \(p_\theta=p_{data}\)"上。若目标数据本身有噪声/矛盾(真实 SFT 数据常有),"收敛到 \(p_{data}\)"是否还是我们想要的?向"带噪目标分布"的鲁棒性是开放问题。
局限性(总结)
- 性能被 \(p_{data}\) 封顶——只能"逼近人类 SFT 数据",结构上无法超人(作者明确承认,也是与 Self-Rewarding/Absolute Zero 的关键差异)。
- 合成数据生成有算力开销,且随迭代累积数据、训练时间翻倍。
- 只在单一 7B 模型 + 单一数据配方上验证,跨模型规模、跨数据分布的普适性未充分检验。