Machine Unlearning
机器遗忘会移除特定训练数据对已训练模型的影响。了解精确和近似方法、如何测试效果以及相关局限。
机器遗忘是从经过训练的机器学习模型中移除特定训练数据影响的过程,使模型表现得仿佛从未见过这些样本。目标是在计算开销远低于完整重训的情况下,达到与不含这些数据、从头重训的模型相当的效果。要求遗忘数据的原因包括数据隐私法律,例如通用数据保护条例(GDPR)第 17 条规定的删除权、版权主张、后来发现数据标签错误或受到投毒,以及从大型语言模型(LLM)中剔除有害知识的努力。
为什么仅删除数据还不够#
梯度下降会将模型从每个样本中学到的内容分散到模型权重中,因此从存储中删除原始图像或文档并不能消除这些学习结果。模型也可能保留可恢复的个体样本痕迹:成员推断攻击会测试某条特定记录是否在训练集中,而大型语言模型可能逐字复现记忆的段落。监管机构将模型本身视为数据的产物。2021 年的一项和解协议中,美国联邦贸易委员会要求照片应用开发商 Everalbum 删除其未经适当同意、利用用户照片构建的人脸识别模型和算法;这种补救措施如今称为算法性剥离。
精确遗忘与近似遗忘#
精确遗忘生成的模型与不含待遗忘数据、重新训练所得模型服从相同分布。从头重训是基准方法,而 Bourtoule 等人提出的 SISA 框架通过以下步骤降低成本:将训练集分片(Sharding)、在每个分片上训练隔离模型(Isolated)、将每个分片切分为带检查点的阶段(Slicing),以及聚合(Aggregating)各分片模型的预测结果。收到删除请求后,只需重新训练包含该样本的分片:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# SISA: split the training set into isolated shards and train one model per shard
shards = np.array_split(np.arange(len(X_train)), 5)
models = [LogisticRegression(max_iter=5000).fit(X_train[s], y_train[s]) for s in shards]
# Honor a deletion request for training sample 123 by retraining only the shard that held it
k = next(i for i, s in enumerate(shards) if 123 in s)
shards[k] = shards[k][shards[k] != 123]
models[k] = LogisticRegression(max_iter=5000).fit(X_train[shards[k]], y_train[shards[k]])
# Aggregate the shard models by majority vote
votes = np.stack([m.predict(X_test) for m in models])
pred = np.array([np.bincount(v).argmax() for v in votes.T])
print(f"Retrained {len(shards[k])} of {len(X_train)} samples, test accuracy {(pred == y_test).mean():.3f}")脚本会打印 Retrained 251 of 1257 samples, test accuracy 0.957:被遗忘的数字从未进入重训后的分片模型,删除操作的成本仅为完整重训的五分之一。代价需要提前承担,因为每个分片模型看到的数据更少:在 ImageNet 分类任务中,论文测得重训速度提升 1.36 倍,准确率略有下降;而在更简单的 Purchase 数据集上,速度提升达到 4.63 倍。
近似遗忘会修改现有模型,并接受结果只是与重训模型相似。常见方法包括对遗忘集执行梯度上升以提高其损失、在保留数据上进行微调以修复附带损害,以及根据影响力估算每个样本对权重的影响并据此更新。对于 LLM,微软研究人员通过约一个 GPU 小时的微调,从 Llama 2 7B 中消除了哈利·波特相关知识,同时常见基准上的分数几乎没有变化。
如何测试模型是否已遗忘#
有说服力的评估会将遗忘后的模型与不含相关数据、重新训练的模型进行比较。遗忘集上的准确率应降至重训模型的水平,而不是降到零,因为如果模型恰好在被删除的样本上明显失效,就会暴露哪些样本被删除了。保留数据和测试数据上的准确率应维持不变,而且针对被遗忘样本的成员推断攻击不应比随机猜测表现更好。TOFU(基于虚构作者简介)和 WMDP(衡量有害的生物、化学和网络安全知识)等基准会用这些测试评估 LLM。
近似方法往往只是隐藏知识,而非将其移除。一项对抗性研究发现,只需用 10 个无关样本进行微调,就能恢复 RMU(一种领先的 LLM 遗忘方法)所抑制的大部分有害能力。只有精确方法才能从构造上保证移除。
机器遗忘与相关术语#
- 灾难性遗忘:模型在新数据上训练时,无意中丢失早先学到的知识。遗忘则是有意移除选定的知识。
- 持续学习:随着时间推移添加新知识,同时不丢失旧知识。遗忘则朝相反方向进行。
- 模型编辑:更改特定事实或行为,例如更新某个职位的任职者。遗忘针对特定训练样本的影响,其成效通过与重训模型比较来评判。
- 差分隐私:一种训练阶段的保证,用于限制任何单个样本对模型的影响程度,从而限制攻击者能够获知后来需要遗忘的记录的哪些信息。
实践中的遗忘#
每次删除都要先找出哪些模型曾使用该数据进行训练:
对于从未接触过待删除数据的预训练权重微调而来的计算机视觉模型,完整重训通常成本可控,远低于预训练 LLM 的工作量。在 Ultralytics Platform 中,每个数据集的 Models 选项卡会列出所有基于该数据集训练的模型;对于保存了不可变数据集版本的运行记录,还会列出相应版本。因此,删除请求可以追溯到看过某张图像的 YOLO26模型,然后在不含该图像的新版本上重新训练。同样的追踪和重训步骤也适用于撤回已授权扫描数据使用许可的患者,以及模型所有者同意删除的安全摄像头拍摄的人脸或车牌(用于医学图像分析的情形)。










