人类的教育方式,对大模型而言也很适用。
养育孩子时,古往今来人们都会谈到一种重要方式:以身作则。也就是让自己成为孩子师法进修的范例,而不是单纯地告诉他们应该怎么做。在训练大语言模型(LLM)时,我们或许也能采用这样的方式 —— 向模型进行示范。
近日,斯坦福大学杨笛一团队提出了一种新框架 DITTO,可通过少量示范(用户提供的期望行为示例)来将 LLM 与特定设置对齐。这些示例可以从用户现有的交互日志获取,也能通过直接编辑 LLM 的输出获得。这样就可以让模型针对不同的用户和任务高效地理解并对齐用户偏好。
论文标题:Show, Don’t Tell: Aligning Language Models with Demonstrated Feedback
论文地址:https://arxiv.org/pdf/2406.00888
DITTO 可基于少量示范(少于 10)自动创建一个包含大量偏好较为数据的数据集(这个过程被称为 scaffold),其具体做法是默认这一点:相比于原始 LLM 及早期迭代版本的输出,用户更偏好示范。然后,将示范与模型输出组成数据对,获得增强数据集。之后便可以运用 DPO 等对齐算法来革新语言模型。
此外,该团队还发现,DITTO 可被视为一种在线师法进修算法,其中从 LLM 采样的数据会被用于区分大师行为。从这一角度出发,该团队证明 DITTO 可通过外推实现超越大师的表现。
该团队也通过实验验证了 DITTO 的效果。
DITTO 框架
为了对齐 LLM,此前的各类方式往往需要运用成千上万对较为数据,而 DITTO 仅需运用少量示范就能修改模型的行为。这种低成本的快速适应之所以能实现,主要得益于该团队的核心见解:可通过示范轻松获取在线较为数据。
符号和背景
语言模型可被视为一个战略 π(y|x),这会获得 prompt x 和完成结果 y 的一个分布。RLHF 的目标是训练 LLM 以最大化一个奖赏函数 r (x, y),其评估的是 prompt – 完成结果对 (x, y) 的质量。通常来说,还会添加一个 KL 散度,以防止革新后的模型偏离基础语言模型(π_ref)太远。总体而言,RLHF 方式优化的目标为:
这是最大化在 prompt 分布 p 上的预期奖赏,而 p 则受 α 调节的 KL 约束的影响。通常而言,优化这一目标运用的是形式为 {(x, y^w, y^l )} 的较为数据集,其中「获胜」的完成结果 y^w 优于「失败」的完成结果 y^l,记为 y^w ⪰ y^l。
另外,这里把小型大师示范数据集记为 D_E,并假设这些示范是由大师战略 π_E 生成的,其能最大化预测奖赏。DITTO 能直接运用语言模型输出和大师示范来生成较为数据。也就是说,不同于合成数据的生成范式,DITTO 无需在给定任务上已经表现很好的模型。
关键思路
DITTO 的关键见解在于语言模型本身,再加上大师示范,可以获得用于对齐的较为数据集,这样就无需收集大量成对的偏好数据了。这会获得一个类似对比的目标,其中大师示范是正例。
生成较为。假定我们从大师战略采样了一个完成结果 y^E ∼ π_E (・|x) 。那么可以认为,从其它战略 π 采样的样本对应的奖赏都低于或等于从 π_E 采样的样本的奖赏。基于这一观察,该团队构建了较为数据 (x, y^E, y^π ),其中 y^E ⪰ y^π。尽管这样的较为数据源自战略而不是各个样本,但之前已有钻研证明了这种方式的有效性。对 DITTO 来说,一个很自然的做法就是运用这个数据集以及一个现成可用的 RLHF 算法来优化 (1) 式。这样做能在晋升大师响应的概率同时降低当前模型样本的概率,这不同于标准微调方式 —— 只会做前者。关键在于,通过运用来自 π 的样本,可运用少量示范就构建出无边界的偏好数据集。但是,该团队发现,通过考虑进修过程的时间方面,还能做到更好。
从较为到排名。仅运用来自大师和单个战略 π 的较为数据,可能不足以获得优良功能。这样做只会降低特定 π 的可能性,导致过拟合问题 —— 这也困扰着少数据情况下的 SFT。该团队提出还可以考虑 RLHF 期间随时间而进修到的所有战略所生成的数据,这类似于强化进修中的 replay(重放)。
令第一轮迭代时的初始战略为 π_0。通过采样该战略可获得一个数据集 D_0。然后可以基于此生成一个用于 RLHF 的较为数据集,可记为 D_E ⪰ D_0。运用这些导出的较为数据,可以对 π_0 进行革新而获得 π_1。根据定义,也成立。之后,继续运用 π_1 生成较为数据,并且 D_E ⪰ D_1。继续这一过程,不断运用之前的所有战略生成越来越多样化的较为数据。该团队将这些较为数据称为「重放较为数据(replay comparisons)」。
尽管这种方式理论上说得通,但如果 D_E 较小,却可能出现过拟合。但是,如果假设每一轮迭代后战略都会获得晋升,则也可在训练期间考虑战略之间的较为。不同于与大师的较为,我们并不能保证每一轮迭代之后战略都更好,但该团队发现模型每次迭代后总体依然是晋升的,这可能是是因为奖赏建模和 (1) 式都是凸的。这样便可以依照以下的排名来采样较为数据:
通过添加这些「模型间」和「重放」较为数据,获得的效果是早期样本(比如 D_1 中的样本)的似然会比后期的(如 D_t 中的)压得更低,从而使隐含的奖赏图景变得平滑。在实践实现中,该团队的做法是除了运用与大师的较为数据,也聚合了一些这些模型间较为数据。
一个实践算法。在实践中,DITTO 算法是一个迭代过程,其由三个简单的组件构成,如算法 1 所示。
首先,在大师示范集上运行监督式微调,执行数量有限的梯度步骤。将这设为初始战略 π_0. 第二步,采样较为数据:在训练过程中,对于 D_E 中的 N 个示范中的每一个,通过从 π_t 采样 M 个完成结果而构建一个新的数据集 D_t,然后根据战略 (2) 式将它们添加到排名中。当从 (2) 式采样较为数据时,每一批 B 都由 70% 的「在线」较为数据 D_E ⪰ D_t、20% 的「重放」较为数据 D_E ⪰ D_{i<t} 以及 10% 的「模型间较为数据」D_{i≤t} ⪰ D_{j<i}。最后,运用 RLHF 革新该战略。具体来说,该团队的做法是运用 DPO 损失函数,通过前述流程采样的数据批来革新 π_t,从而获得 π_{t+1}:
其中 σ 是来自 Bradley-Terry 偏好模型的 logistic 函数。在每次革新期间,来自 SFT 战略的参考模型都不会革新,以避免偏离初始化过远。
将 DITTO 推导成在线师法进修
DITTO 可通过在线师法进修角度推导出来,其中组合运用大师示范和在线数据来同时进修奖赏函数和战略。具体来说,战略玩家会最大化预期奖赏 𝒥 (π, r),而奖赏玩家则会最小化在在线数据集 D^π 上的损失 min_r L (D^π , r) 更具体而言,该团队的做法是运用 (1) 式中的战略目标和标准的奖赏建模损失来实例化该优化问题:
推导 DITTO,简化 (3) 式的第一步是解决其内部战略最大化问题。幸运的是,该团队基于之前的钻研发现战略目标 𝒥_KL 有一个闭式解,其形式为,其中 Z (x) 用于归一化分布的配分函数。值得注意的是,这会在战略和奖赏函数之间建立一种双射关系,这可以被用于消除内部优化。通过重新排列这个解,可将奖赏函数写成:
此外,之前有钻研表明这种重新参数化可以表示任意奖赏函数。于是,通过代入到 (3) 式,可以将变量 r 变成 π,从而获得 DITTO 目标:
请注意,类似于 DPO,这里是隐式地估计奖赏函数。而不同于 DPO 的地方是 DITTO 依赖一个在线的偏好数据集 D^π。
为什么 DITTO 比仅运用 SFT 好?
DITTO 表现更好的一个原因是:通过生成较为数据,其运用的数据量远多于 SFT。另一个原因是在某些情况下,在线师法进修方式的表现会超过示范者,而 SFT 只能师法示范。
实验结果
该团队也进行了实证钻研,证明了 DITTO 的有效性。实验的具体设置请参阅原论文,我们这里仅关注实验结果。
基于静态基准的钻研结果
静态基准的评估运用了 GPT-4,结果见表 1。
平均而言,DITTO 胜过其它所有方式:在 CMCC 上平均胜率为 71.67%,在 CCAT50 上平均胜率为 82.50%;总体平均胜率为 77.09%。在 CCAT50 上,对于所有作者,DITTO 仅在其中一个上没有取得全面优胜。在 CMCC 上,对于所有作者,DITTO 全面胜过其中一半基准,之后是 few-shot prompting 赢得 3 成。尽管 SFT 的表现很不错,但 DITTO 相较于其的平均胜率晋升了 11.7%。
用户钻研:测试泛化到自然任务的能力
总体而言,用户钻研的结果与在静态基准上的结果一致。DITTO 在对齐示范的偏好方面优于对比方式,如表 2 所示:其中 DITTO (72.1% 胜率) > SFT (60.1%) > few-shot (48.1%) > self-prompt (44.2%) > zero-shot (25.0%)。
DITTO 在什么时候有用?
在运用 DITTO 之前,用户必须考虑一些前提条件,从他们有多少示范到必须从语言模型采样多少负例。该团队探索了这些决定的影响,并重点关注了 CMCC,因为其覆盖的任务超过 CCAT。此外,他们还分析了示范与成对反馈的样本效率。
算法扰动
该团队对 DITTO 的组件进行了消融钻研。
如图 2(左)所示,增加 DITTO 的迭代次数通常可以晋升功能。
可以看到,当迭代次数从 1 次晋升到 4 次,GPT-4 评估的胜率会有 31.5% 的晋升。这样的晋升是非单调的 —— 在第 2 次迭代时,功能稍有降低(-3.4%)。这是因为早期的迭代可能会获得噪声更大的样本,从而降低功能。另一方面,如图 2(中)所示,增加负例数量会使 DITTO 功能单调晋升。此外,随着采样的负例增多,DITTO 功能的方差会下降。
另外,如表 3 所示,对 DITTO 的消融钻研发现,去掉其任何组件都会导致功能下降。
比如如果放弃在线方式的迭代式采样,相比于运用 DITTO,胜率会从 70.1% 降至 57.3%。而如果在在线过程中持续革新 π_ref,则会导致功能大幅下降:从 70.1% 降至 45.8%。该团队猜想其原因是:革新 π_ref 可能会导致过拟合。最后,我们也能从表 3 中看到重放和战略间较为数据的重要性。
样本效率
DITTO 的一大关键优势是其样本效率。该团队对此进行了评估,结果见图 2(右);同样,这里报告的是归一化后的胜率。
首先可以看到,DITTO 的胜率一开始会快速晋升。在示范数量从 1 变成 3 时,每次增加都会让归一化功能大幅晋升(0% → 5% → 11.9%)。
但是,当示范数量进一步增加时,收益增幅降低了(从 4 增至 7 时为 11.9% → 15.39%),这说明随着示范数量增加,DITTO 的功能会饱和。
另外,该团队猜想,不止示范数量会影响 DITTO 的功能,示范质量也会,但这还留待未来钻研。
成对偏好与示范相比如何?
DITTO 的一个核心假设是样本效率源自于示范。理论上讲,如果用户心中有一套完美的示范集合,通过标注许多成对的偏好数据也能实现类似的效果。
该团队做了一个近似实验,运用从指令遵从 Mistral 7B 采样的输出,让一位提供了用户钻研的示范的作者也标注了 500 对偏好数据。
总之,他们构建了一个成对的偏好数据集 D_pref = {(x, y^i , y^j )},其中 y^i ≻ y^j。然后他们计算了采样自两个模型的 20 对结果的胜率情况 —— 其一是运用 DITTO 在 4 个示范上训练的,其二是仅运用 DPO 在 {0…500} 偏好数据对训练的。
当仅从 π_ref 采样成对偏好数据时,可以观察到生成的数据对位于示范的分布外 —— 成对的偏好不涉及用户示范的行为(图 3 中 Base policy 的结果,蓝色)。即使当他们运用用户示范对 π_ref 进行微调时,仍然需要超过 500 对偏好数据才能比肩 DITTO 的功能(图 3 中 Demo-finetuned policy 的结果,橙色)。