Membership Inference Attacks
成员推理攻击通过利用过拟合造成的损失差距,测试某条特定记录是否属于模型的训练数据。
成员推断攻击试图判断某条特定数据记录是否属于某个机器学习模型的训练数据。攻击者已经持有这条记录,例如患者的扫描图像或某人的照片,然后通过查询模型判断它是“成员”还是“非成员”。仅仅知道某人属于成员就可能泄露敏感信息,因此这类攻击是数据隐私的核心风险:如果模型只使用某种特定疾病患者的数据训练,那么确认某人的扫描图像在训练集中就会泄露其诊断结果。Reza Shokri、Marco Stronati、Congzheng Song 和 Vitaly Shmatikov 于 2017 年提出了针对机器学习模型的成员推断攻击,并在 Google 和 Amazon 的商业机器学习即服务平台上演示了这类攻击。
模型为何会泄露成员信息#
模型对训练数据的表现与对其他数据的表现不同。与未见过的样本相比,它们通常会对训练样本分配较低的损失和较高的置信度,而过拟合会扩大这一差距。会记住罕见样本、重复图像或离群值的大型模型泄露风险最高;生成式 AI模型,包括大型语言模型(LLM),可能会近乎逐字重现训练图像或文本,从而泄露成员信息。
最简单的攻击方法是对损失设置阈值:如果模型在某条记录上的损失异常低,就猜测它是“成员”。下面的代码片段使用 PyTorch 训练一个小型神经网络分类器,在 100 条带随机标签的随机记录上进行训练;这些标签只能通过记忆学会,然后再对其中一部分成员和模型从未见过的 100 条记录发起攻击:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
x, y = torch.randn(200, 20), torch.randint(0, 2, (200,))
is_member = torch.arange(200) < 100 # the first 100 records form the training set
# Train a small classifier on the members only, long enough to memorize them
model = torch.nn.Sequential(torch.nn.Linear(20, 256), torch.nn.ReLU(), torch.nn.Linear(256, 2))
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
for _ in range(300):
optimizer.zero_grad()
F.cross_entropy(model(x[is_member]), y[is_member]).backward()
optimizer.step()
# Loss-threshold attack: guess "member" for every record with below-median loss
with torch.no_grad():
losses = F.cross_entropy(model(x), y, reduction="none")
guess = losses < losses.median()
print(f"attack accuracy: {(guess == is_member).float().mean():.2f}")该攻击正确标记了 85% 的记录,而随机猜测的正确率为 50%。每个成员的损失都接近零,但有 15 个非成员的随机标签恰好被模型以更高置信度预测,因此其损失低于中位数阈值,并导致 16 个成员的损失高于该阈值。泛化能力更强的模型会缩小损失差距,从而降低攻击准确率,但通常无法彻底消除风险。
更强的攻击及其评估方法#
- 影子模型:2017 年的原始攻击会在成员身份已知的相似数据上训练多个模型,然后利用这些模型的输出训练一个分类器,以识别成员的表现特征。
- 校准攻击:Nicholas Carlini 及其同事于 2022 年发表了似然比攻击(LiRA),该方法会将一条记录的损失与分别使用和不使用该记录训练的参考模型进行比较。这样可以发现单一全局阈值无法识别的记忆型离群值。
- 仅标签攻击:即使 API 只返回预测标签,也仍会泄露信息,因为成员样本通常需要更大的输入扰动才会导致预测翻转,而这正是对抗攻击会寻找的扰动。
由于整体准确率无法反映少数风险最高的个体,隐私审计会报告极低假阳性率下的真阳性率,例如 0.1%。开源隐私工具包可以生成成员推断报告,针对已训练模型运行这些攻击,并绘制模型在不同训练检查点上的脆弱程度。
相关隐私攻击#
成员推断是训练数据泄露中范围最窄的一种形式。模型反演会重建某个类别或某个人的代表性特征,属性推断会补全攻击者部分了解的记录中缺失的敏感字段,而训练数据提取则会恢复逐字内容,例如记忆下来的文本。数据投毒的方向正好相反:它会破坏训练集,而不是从中读取信息。机器遗忘方法试图在训练后移除某条记录的影响,并使用成员推断来检验这条记录是否仍留下痕迹。由于成员资格是泄露的最小单位,成员推断已成为衡量训练过程暴露了多少单条记录的标准尺度。
防御措施#
差分隐私提供了具有形式化保证的防御手段。使用 DP-SGD 训练时,这是一种随机梯度下降的变体,可通过 Opacus 用于 PyTorch。该方法会裁剪每个样本的梯度并添加经过校准的噪声,从数学上限制任何单条记录对模型造成的影响,因此也限制了所有成员推断攻击能获得的优势,但会牺牲一定准确率。以下实际措施还能进一步降低风险:正则化、数据增强和提前停止可限制过拟合;删除重复记录能避免某张图像或某份文档被多次记住;公开 API 也可以只返回标签或四舍五入后的置信度分数。
视觉模型的训练曲线是检查信息暴露最快捷的途径。使用训练模式微调 Ultralytics YOLO26检测器时,如果使用的是医学扫描图像或员工徽章等敏感图像,它会在每个 epoch 记录训练损失和验证损失。其 patience 参数默认值为 100 个 epoch;如果验证适应度在这么多个 epoch 内没有改善,就会停止训练,从而避免后期训练损失持续下降但验证结果停滞的阶段,而损失阈值攻击正是利用了这种差距。










