奖励模型数据经 RLHF 后仅 0.9% 被记住,IPO 直接对齐升到 18%

Measuring memorization in RLHF for code completion

Aneesh Pappu, Billy Porter, Ilia Shumailov, Jamie Hayes

cs.LG, cs.CL, cs.SE

2024-06-18

Google DeepMind 在代码补全上拆开对齐各阶段的记忆风险:奖励数据经 RLHF 后仅 0.9% 被记住,直接微调是 17.6%;换 IPO 在 Gemma 2B/7B 上分别升到 18.2% 和 19.5%。

这篇在解决什么

监督微调阶段的记忆化已经有大量研究:给模型一段前缀,看它会不会把训练样本的后半截吐出来。但上线的代码补全模型几乎都要再走 RLHF,先微调,再训奖励模型,再用强化学习把策略往奖励上推。这一轮会不会把用户偏好数据写进最终模型,此前几乎没人按阶段拆开测过。

奖励模型用的数据往往来自真实用户交互,里面会有文件路径、密钥、内部库名。如果对齐后的模型还能把这些字符串吐出来,就是隐私和合规问题,不是排行榜脚注。Google DeepMind 把实验钉在代码补全上,既因为这是 LLM 落地最广的场景之一,也因为代码结构性强,「模型会写代码」很容易被误判成「模型背过这条样本」。

方法

主模型是 Gemini Nano-1(1.8B)。为了把记忆和补全能力拆开,他们用 Gemini Ultra 合成了 6554 条 Python 样本,全部调用一个预训练里不存在的假库 legitimatecrypto。模型如果写出这个库名,来源只能是这次训练。

数据拆成两块:

记忆判定用 0.1-近似反事实记忆:贪心解码,归一化编辑距离 ≤0.1 算匹配,同时要求没见过该样本的对照模型距离 >0.1。编辑距离沿生成串滑窗取最小,防止记忆片段被前后无关 token 包住。目标短于 10 个 token、或 prompt 和 target 本身太像(距离 <0.5)的样本直接丢掉,否则补全一个括号也会被算成记忆。

对照有两条轴。一条是把同一批数据直接微调,给出记忆率上限;另一条换成 ΨPO 的特例 IPO,在 Gemma 2B/7B 上直接从偏好对学习,不再经过奖励模型。RL 微调里的 KL 系数 α 也做了扫描:α 越大,策略越不敢离开初始化。

结果

微调阶段记住的东西,后面的 RL 大多擦不掉。过滤后的 SD.Base 上,微调记住 3526 条里的 319 条;再做 RLHF,其中 43%–47% 仍然满足记忆标准。α 越小,策略越敢漂移。SD.Links 上 PII 路径吐出率从 α=0.5 的 54.8% 降到 α=0.005 的 12.6%。降是降了,多数样本还在。

奖励模型里的数据几乎传不过去:

设置SD.Base 记忆率SD.Links PII 吐出
直接微调17.6%50%
数据只进奖励模型,再 RL 微调0.9%0%
IPO(Gemma 2B / 7B)18.2% / 19.5%0.6% / 0.6%

RL 阶段只用 prompt、丢掉 target。70 个 epoch、α 放到 0.005,prompt 记忆率仍低于 0.5%。

把奖励模型从 T5-Base(220M)换到 Gemini Nano-1、策略从 Nano-1 换到 Gemini Pro,再换 CodeXGLUE 行级补全、LIMA 和 Anthropic HH 自然语言,结论不变:奖励数据几乎不被最终模型记住,RL prompt 记忆始终低于 1%。

奖励信号是一个标量,信息量太低;KL 项又把策略按在初始化附近。两件事叠在一起,记忆很难从奖励模型渗到策略。IPO 直接在偏好文本上做梯度,记忆率回到微调量级。

想靠把 α 拧得很小来冲掉微调记忆,会付出对齐税:RLFT.1 在 α=0.005 时,HumanEval 单行 infilling 从微调的 0.507 掉到 0.217。记不住和学崩了,在极端超参下是缠在一起的。

为什么重要

手里有贵、敏感、又想用来对齐的数据时,放进奖励模型,不要直接微调,也不要用 IPO 这类直接偏好学习,这篇测到的反刍风险差了大约一个数量级。对代码补全产品很具体:用户接受或拒绝补全的日志可以喂奖励模型,而不必默认这些字符串会出现在之后的补全里。

这不是「RLHF 在所有任务上都更安全」的证明,是代码补全、合成敏感数据和 Gemini/Gemma 尺度上的对照。DPO 没测,只测了 IPO。方向仍然清楚:对齐算法的记忆风险,不能从「目标函数等价」直接推过来。

局限与存疑

敏感字符串是实验里造出来的,路径模板固定 100 条。真实用户日志不会提前标好什么算敏感,也没有这种受控重复。反事实定义按样本重训对照模型贵到做不起,实验用的是完全没见过这批数据的固定对照,假阳性会松一档。

IPO 对照换了模型家族(Gemma 对 Gemini Nano-1),18% 对 0.9% 里混进了架构和训练配方差异。α=0.005 且奖励模型在 SD.Base 上训练时,策略会塌成只会输出 #,因为注释占了 40%–50% 的行且全部标成正例。

代码必须用反事实过滤,否则「补全能力强」会把记忆率抬上去。这套过滤和滑窗编辑距离换到聊天、长文档或多轮对话要不要重调,论文没有给出答案。

术语

原文与代码

社区讨论

相关论文

全部论文解读