47 个 checkpoint 的数字漂移:unlearning 评测中一个没人记录的变量

假设你是 GDPR 审计员。某公司声称已经"遗忘"了用户 A 的数据,并提交了一份模型评测报告:遗忘集准确率 d_f = 0.02,保留集准确率 d_r = 0.95,差距 d_f - d_t = 0.0414,低于 0.05 阈值——通过。

bn_stale_not_surviving.svg

一个审计员的手记

假设你是 GDPR 审计员。某公司声称已经"遗忘"了用户 A 的数据,并提交了一份模型评测报告:遗忘集准确率 d_f = 0.02,保留集准确率 d_r = 0.95,差距 |d_f - d_t| = 0.0414,低于 0.05 阈值——通过。

你签字放行。

但等一下。你手里的模型,除了权重,还附带了一组 batch normalization 的 running mean / running var 统计量。这组统计量是训练过程中在线累积的,没人记录它是用哪些数据累积的,也没人检查它是否还匹配当前的权重。你拿到的报告里,这组数字就那么静静地躺在 checkpoint 文件里,像一个没人查的账本。

Junlong Shen 和 Xingyu Li(阿尔伯塔大学)在 arXiv 2609.11490 做了一件简单但没人做过的事:把 263 个公开发布的 unlearning checkpoint 的 BN 统计量,在权重完全不动(bit-identical)的前提下,用保留集数据重新拟合一遍,然后看发布的数字会不会变。

结果:221 个 checkpoint 中,47 个的遗忘准确率漂移超过了 ±1.2pp 的边界。其中 12 个的 pass/fail 判决直接翻转——8 个原本通过的变成了不通过,4 个原本不通过的变成了通过。

这不是 bug,是 feature。或者说,是一个整个领域都没记录的变量。

核心问题:数字动了,但为什么动?

unlearning 评测的基本逻辑很简单:训练一个模型,删掉某些数据后重新训练(unlearned),和从头只在保留集上训练的参考模型(retrained reference)对比。如果两者在遗忘集上表现接近,就认为遗忘成功。

但这里有个隐藏的变量。两个模型都携带 BN 统计量,这些统计量是在训练过程中在线累积的。unlearned 模型的 BN 统计量是在遗忘过程中累积的,retrained reference 的 BN 统计量是在保留集上从头累积的。两者的 BN 统计量是在不同数据上拟合的,但没人记录这个差异

论文做了一个关键实验来区分两种解释:

解释 A(直觉版):BN 统计量里还残留着被删除数据的信息,所以重新拟合后数字会变。

解释 B(实际版):BN 统计量在遗忘过程中没有跟上权重的变化,变成了"过期"统计量。重新拟合只是把它"校准"回当前权重应该匹配的状态。

实验设计很精巧:固定权重、固定估计器、固定图像变换、固定拟合池大小,只改变拟合池中 k 个记录的来源——一组来自保留集,一组来自被删除集。

结果:

拟合池来源遗忘准确率漂移 (pp)
部署份额的删除数据+0.015
全部用删除数据+0.057
1.2pp 边界1.2
被删除数据的"幽灵"几乎不存在。即使把所有被删除记录都塞进拟合池,漂移也只有 0.057pp,远低于 1.2pp 边界。没有任何一个 checkpoint 超过 0.5pp。

但另一个测量却显著:checkpoint 携带的 BN 统计量距离任何"保留集重新拟合"的状态有多远。20 个 checkpoint 全部通过了"距离超过零假设带"的检验,中位数距离是 provenance 距离的 5.43 倍。

换句话说:数字动了,不是因为被删除的数据还活着,而是因为 BN 统计量在权重移动的过程中没跟上,变成了过期的东西

"Stale, not surviving":一个关键区分

这是这篇论文最锋利的洞察。

整个 unlearning 领域的隐含假设是:如果遗忘后数字还动,说明被删除的数据"还存活"在模型里。这篇论文说:不,数字动可能只是因为一个统计量过期了,和数据存活无关

这就像你换了一把锁,但门框上还留着旧锁的钥匙印记。你以为有人还能用旧钥匙开门(数据存活),其实只是门框没换(统计量过期)。换门框(重新拟合 BN)不需要换锁(重新训练权重),但门框的状态确实会影响"门能不能关紧"(评测数字)。

论文用了一个更精确的类比:BN 统计量是"部署状态"(deployed state),不是"训练产物"(training artifact)。它是模型部署时需要的运行时配置,和权重是分离的。但整个领域都把它当作权重的一部分,从不单独审计。

"Per-checkpoint, not per-method":方法级判决的失效

另一个关键发现:漂移是 checkpoint 级别的属性,不是方法级别的属性

论文发现,一个方法家族(family)的平均漂移可能是 +0.830pp,低于 1.2pp 边界——看起来方法本身是"安全"的。但这个家族里有 8/45 个 checkpoint 的漂移超过了 1.2pp。

这是统计学的常识:平均值不描述个体。但 unlearning 领域的所有评测都是方法级别的:论文报告方法 A 在数据集 D 上的平均遗忘准确率,读者据此判断方法 A 是否有效。

论文说:一个审计员手里拿的是 checkpoint,不是方法。方法级判决("方法 A 的平均漂移低于边界")不能告诉你手里这个具体的 checkpoint 是否可靠。这就像说"这批药的平均有效成分达标"不能保证你手里这粒药达标。

12 个判决翻转:具体例子

论文列出了所有判决翻转的 checkpoint,其中几个特别清晰:

例子 1:MU-Bench bad-teaching, 2% removal

  • 发布值:|d_f - d_t| = 0.0414(通过,< 0.05)
  • 重新拟合后:0.0573(不通过,> 0.05)
  • 判决:从"遗忘成功"翻转为"遗忘失败"
例子 2:MU-Bench random-label, 8% removal
  • 发布值:|d_f - d_t| = 0.0503(不通过)
  • 重新拟合后:0.0437(通过)
  • 判决:从"遗忘失败"翻转为"遗忘成功"
例子 3:Unlearning Comparator, SalUn, class automobile
  • 发布值:RA = 0.9497(不通过,< 0.95)
  • 重新拟合后:0.9856(通过)
  • 判决:从"遗忘失败"翻转为"遗忘成功"
注意:两个方向的翻转都有。这不是系统性偏差,而是噪声。BN 统计量的过期状态既可能让模型看起来"遗忘得不够"(数字偏高),也可能让模型看起来"遗忘得过度"(数字偏低)。

领域现状:52 篇论文,只有 4 篇提到这个变量

论文附录 K 做了一个文献审计:52 篇 unlearning 论文,42 篇通过筛选(提到 "unlearn" 至少 15 次),其中 19 篇使用带 BN 的卷积 backbone 并和 retrained reference 对比。

这 19 篇里,只有 4 篇提到 deployed normalization state。其中 3 篇只是顺带提及,没有把它当作比较变量。1 篇是同期工作(Jawandhia et al., 2026),专门研究这个通道。

换句话说:整个领域 95% 的相关论文都在一个未控制的变量上做比较

边界:这个发现到哪里为止

论文非常诚实地划定了发现的边界:

1. 只适用于 BN backbone。LayerNorm 和 RMSNorm(包括所有 LLM)不携带 running statistics,所以这个通道对它们不存在。论文在 118 个量化 checkpoint(包括 47 个 swin-base transformer)上测试了第二个"部署状态"——量化尺度(quantization scales),结果是零漂移。效应是 BN 特定的,不是所有部署状态通用

2. 是存在性结果,不是速率。12 个判决翻转是在 263 个 checkpoint 中发现的,但这不是"unlearning 评测的错误率是 4.6%"。论文明确说这是一个存在性证明:在领域自己的操作点上,在已发布的 artifact 上,判决确实会翻转。

3. census 是下限,不是估计。由于统计方法保守(要求 10 次 replicate 全部同向才判定显著),实际漂移的 checkpoint 数量可能更多。

工程洞察:审计员该怎么做

论文的结论很务实:

1. 发布时记录拟合约定。一个 checkpoint 发布时,应该说明它的 BN 统计量是用什么数据、什么变换、什么累积规则拟合的。目前没有人记录这些。

2. 在 checkpoint 级别审计,不要在方法级别审计。方法级判决不能描述你手里的 artifact。

3. 重新拟合是廉价的诊断。固定权重,用保留集重新拟合 BN 统计量,只需要几分钟。如果重新拟合后数字大幅漂移,说明这个 checkpoint 的 BN 统计量已经过期。

4. 不要把这个发现外推到 LLM。LLM 用 LayerNorm/RMSNorm,不携带 running statistics,这个通道对它们不存在。但 LLM 有其他"部署状态"(如 KV cache 的累积统计量),是否也有类似问题,是开放问题。

个人思考:三个概念谱系的交汇

这篇论文精确地落在我长期追踪的三个概念谱系的交汇处:

"评测盲区定律"再添一例:unlearning 领域 95% 的相关论文都在一个未控制的变量(BN 统计量的拟合约定)上做比较。这不是个别论文的疏忽,是整个领域的系统性盲区。和 omission blindness(LLM 法官检测不到缺失)、Moral Geometry(模型学语料不学理论)一样,都是"评测测的不是你以为的东西"。

"标量幻觉"再添一例:方法级判决是一个标量(平均漂移 +0.830pp),但实际属性是 per-checkpoint 的向量(8/45 个超过边界)。用标量管理向量,就像用温度计量血压。和"必要性 × 充分性"(CoT 是网不是线)一样,都是把高维属性压扁成一维导致的失真。

"判断-闸门解耦"再添一例:checkpoint 的权重是对的(判断通过),但 BN 统计量过期了(闸门没关)。发布的数字看起来正常,但底层状态已经不一致。和 LLM 法官能识别但不能反转、PoP 中间层知道答案错但输出层不咨询中间层一样,都是"判断不传导到执行"。

新概念:"Stale, not surviving"。这是这篇论文最原创的洞察:数字动了不等于数据还活着。unlearning 领域的隐含假设是"数字动 = 数据存活",但实际可能是"数字动 = 统计量过期"。这个区分对整个遗忘评测文献的可信度有直接影响。

新概念:"部署状态 vs 训练产物"。BN 统计量是部署状态,不是训练产物。它是模型运行时需要的配置,和权重是分离的。但整个领域都把它当作权重的一部分,从不单独审计。这个区分可能适用于其他"附带在 checkpoint 里但不是权重"的东西:量化尺度、KV cache 统计量、adapter 的初始化状态等。

一个更深的类比

这篇论文让我想到一个更深的类比:checkpoint 是一个完整的部署包,不只是权重

一个 checkpoint 文件里有什么?

  • 权重(trainable tensors)
  • BN running statistics(部署状态)
  • 优化器状态(如果有的话)
  • 量化尺度(如果量化的话)
  • 其他元数据
我们习惯把"权重"等同于"模型",但实际部署的是一个完整的包。权重是对的,不代表包是对的。BN 统计量过期了,权重也可能完全正确——但部署后的行为会变。

这就像你买了一台电脑:CPU 是对的(权重),但 BIOS 设置是出厂默认的(BN 统计量)。电脑能开机,但性能可能不对。你不能说"CPU 没问题所以电脑没问题",因为 BIOS 设置也是部署的一部分。

unlearning 领域一直在审计 CPU,没人审计 BIOS。这篇论文说:BIOS 设置会过期,而且过期了会让评测数字漂移到判决翻转的程度

结论

这篇论文做了一件简单但没人做过的事:审计 263 个公开发布的 unlearning checkpoint 的 BN 统计量。发现 47 个的数字会漂移,12 个的判决会翻转,原因是统计量过期而非数据存活。整个领域 95% 的相关论文都没记录这个变量。

这不是一个"unlearning 不工作"的结论。论文明确说:大多数 checkpoint 是稳定的,大多数方法级判决是可靠的。但"大多数"不等于"所有",而一个审计员手里拿的是具体的 checkpoint,不是方法平均值。

论文的最后一句写得很好:"A release should therefore name the fitting convention beside the number, on the batch-normalized backbones that ship one."

在数字旁边写清楚约定。这是最低要求,也是目前没人做到的。


论文:arXiv 2609.11490 — Published Unlearning Numbers Move Per Checkpoint, and Not Because the Removed Data Survives: An Audit of 263 Released Batch-Normalized Checkpoints 作者:Junlong Shen & Xingyu Li(University of Alberta) 发布日期:2026-09-10

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens