harness_evolve/notes/ref06_spin-self-play-finetuning.md

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


TL;DR 速览

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: 人类真值 vs 微调模型在 iter0 / iter1 的生成对比

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 生成,构成一个马尔可夫过程:

\[ p_\theta(y|x) = \prod_{j=1}^{m} p_\theta(y_j \mid x, y_{<j}) \]

其中 \(y_{<1}\) 为空,\(y_{<j} = [y_1,\dots,y_{j-1}]\)

3.2 SFT 与它的天花板

SFT(监督微调) 最小化人类高质量回答的负对数似然:

\[ L_{\text{SFT}}(\theta) = -\mathbb{E}_{x\sim q(\cdot),\, y\sim p_{data}(\cdot|x)}\big[\log p_\theta(y|x)\big] \tag{3.1} \]
符号 含义
\(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 正则的奖励:

\[ L_{\text{RL}}(\theta) = \mathbb{E}_{x\sim q(\cdot),\, y\sim p_\theta(\cdot|x)}\big[r(x,y)\big] - \lambda\,\mathbb{E}_{x\sim q(\cdot)}\,\mathrm{KL}\big(p_\theta(\cdot|x)\,\|\,p_{\text{ref}}(\cdot|x)\big) \]

其中 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}\)"之间的期望值差距:

\[ f_{t+1} = \arg\max_{f\in\mathcal{F}_t}\ \mathbb{E}\big[\, f(x,y) - f(x,y')\,\big] \tag{4.1} \]

期望在 \(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\) 的最小化:

\[ f_{t+1} = \arg\min_{f\in\mathcal{F}_t}\ \mathbb{E}\big[\, \ell\big(f(x,y) - f(x,y')\big)\,\big] \tag{4.2} \]

其中 \(\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:

\[ \arg\max_{p}\ \mathbb{E}_{x\sim q(\cdot),\, y\sim p(\cdot|x)}[f_{t+1}(x,y)] - \lambda\,\mathbb{E}_{x\sim q(\cdot)}\mathrm{KL}\big(p(\cdot|x)\,\|\,p_{\theta_t}(\cdot|x)\big) \tag{4.3} \]

(4.3) 有闭式解

\[ \widehat{p}(y|x) \propto p_{\theta_t}(y|x)\,\exp\big(\lambda^{-1} f_{t+1}(x,y)\big) \tag{4.4} \]

\(\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)}\)。这倒推出主玩家应该在的函数类:

\[ \mathcal{F}_t = \left\{\ \lambda\cdot\log\frac{p_\theta(y|x)}{p_{\theta_t}(y|x)}\ \Big|\ \theta\in\Theta\ \right\} \tag{4.5} \]

\(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)\),其中:

\[ L_{\text{SPIN}}(\theta,\theta_t) = \mathbb{E}\left[\ \ell\!\left(\lambda\log\frac{p_\theta(y|x)}{p_{\theta_t}(y|x)} - \lambda\log\frac{p_\theta(y'|x)}{p_{\theta_t}(y'|x)}\right)\right] \tag{4.7} \]

期望在 \(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 天花板的原因。

迭代过程可总结为:

\[ \cdots \to \underbrace{p_{\theta_t}(\cdot|x)}_{\text{对手}@t} \to \underbrace{\lambda\log\tfrac{p_{\theta_{t+1}}(\cdot|x)}{p_{\theta_t}(\cdot|x)}}_{\text{主玩家}@t+1} \to \underbrace{p_{\theta_{t+1}}(\cdot|x)}_{\text{对手}@t+1} \to \cdots \]

即:用第 \(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}\) 是全局最优,则:

\[ p_{\theta_{t+1}}(y|x) \propto p_{\theta_t}(y|x)\,\Big(\frac{p_{data}(y|x)}{p_{\theta_t}(y|x)}\Big)^{1/\lambda} \]

[!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 设置

6.2 SPIN 显著提升 benchmark 性能

Figure 2: SPIN 各迭代在 Open LLM Leaderboard 上的均分

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: SPIN 各迭代 vs 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: iter0 内多训 epoch vs iter1 的对比(Arc / TruthfulQA / Average)

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 Self-Rewarding LM
自监督信号 人类 vs 自生成的判别(隐式) LLM 自评的偏好分数(显式)
底层优化器 自研 self-play 目标(logistic loss) iterative DPO
对模型能力的前提 只需能生成 需具备 LLM-as-judge 能力
能否超越 SFT 数据 否(\(p_{data}\) 封顶) 有可能(奖励可漂移)

方法论启示(可迁移的通用思路)

  1. "判别自己 vs 目标"是一个通用的自监督代理任务:当你有一批高质量目标数据、且模型已经能大致拟合它,与其继续做最大似然(会饱和),不如构造"目标样本 vs 模型自采样"的判别任务——这个 margin 信号在 MLE 饱和后依然存在。这个 trick 可迁移到任何"有目标分布 + 模型已初步拟合"的场景。
  2. 把博弈压成单损失的数学套路值得学:SPIN 的 §4.2 是范本——先写"训判别器"和"更新生成器"两步,各自有闭式解,再用一步的最优解恰好等于另一步的理想输入这个巧合把两步合一。这种"闭式解反解函数类"的推导,是把双层优化降成单层的通用技巧。
  3. 理论上锁死收敛点 = 免费的安全护栏:Theorem 5.2 保证 SPIN 不会漂过 \(p_{data}\),这让"自我训练"这件本可能失控的事变得可预测。任何自我改进系统,如果能证明"不动点恰是目标",就能极大降低失控风险。
  4. \(\beta\) 调度(后期增大)的工程直觉:Remark 5.5 给了"越接近目标、越该增大 KL 正则"的理论依据,实现里 iter3 把 \(\beta\) 从 0.1 拉到 5.0——这是"理论指导超参调度"的好例子,可迁移到其他迭代式对齐方法。

在我的工作中能怎么用

开放问题 / 疑问

局限性(总结)