成员推断
成员推断
本文适合
已经理解 模型文件与推理流程,并需要判断某个样本是否属于训练集的学习者。学完你能:用 loss、置信度、预测熵或影子模型构造成员推断实验,选择阈值,并用成员/非成员对照集验证推断结论
一句话判断
如果题目问“这个样本是否在训练集中出现过”,就是成员推断;如果问“训练样本长什么样”,才是 模型反演。
成员推断利用的是模型对训练样本往往更自信、loss 更低、输出分布更尖锐。
题目中常见信号
说明:要判断是否训练过
第一反应:计算 loss/置信度
说明:可建阈值
第一反应:画分布或求最佳阈值
说明:黑盒成员推断可行
第一反应:用置信度和熵
说明:白盒信息更多
第一反应:用 loss、梯度、激活
说明:成员差异更大
第一反应:比较 train/test 性能
核心概念
常用信号:
成员样本常见表现:更低
说明:模型见过,拟合更好
成员样本常见表现:更高
说明:输出更确定
成员样本常见表现:更低
说明:概率分布更尖锐
成员样本常见表现:更大
说明:第一名和第二名差距更大
成员样本常见表现:可能更小
说明:白盒条件下可用
成员推断不能只看单个样本的绝对值,最好用对照集确定阈值。
最小分析流程
- 确认输出信息量:label、probability、logits、loss、梯度。
- 准备对照集:已知 member、已知 non-member、候选样本。
- 计算特征:loss、置信度、熵、margin。
- 选择阈值:用对照集找最好区分点。
- 验证阈值:报告准确率、TPR/FPR 或至少列分布范围。
- 判断候选:给出候选分数和阈值的关系。
最小验证示例
基于 loss 的推断
import torch
import torch.nn.functional as F
def per_sample_loss(model, x, y):
model.eval()
with torch.no_grad():
logits = model(x)
loss = F.cross_entropy(logits, y, reduction="none")
return loss.cpu()
member_loss = per_sample_loss(model, member_x, member_y)
non_loss = per_sample_loss(model, non_x, non_y)
candidate_loss = per_sample_loss(model, cand_x, cand_y)
threshold = (member_loss.mean() + non_loss.mean()) / 2
print("member_mean", float(member_loss.mean()))
print("non_mean", float(non_loss.mean()))
print("threshold", float(threshold))
print("candidate", candidate_loss.tolist())判断:
candidate_loss < threshold -> 更像成员
candidate_loss > threshold -> 更像非成员
member/non 分布重叠严重 -> 单一 loss 不可靠,需要多信号或影子模型黑盒置信度特征
import numpy as np
def entropy(p):
p = np.clip(np.asarray(p), 1e-12, 1.0)
return -np.sum(p * np.log(p))
prob = target_api(sample)["prob"]
features = {
"confidence": float(np.max(prob)),
"entropy": float(entropy(prob)),
"margin": float(np.sort(prob)[-1] - np.sort(prob)[-2]),
}
print(features)成员样本通常 confidence 更高、entropy 更低、margin 更大,但必须用对照集确认。
常见利用 / 解题路线
路线总览:
路线一:阈值攻击
- 用已知成员/非成员计算 loss 或 confidence。
- 选择能最大化区分度的阈值。
- 对候选样本计算同一特征。
- 输出成员判断和证据。
路线二:影子模型攻击
- 构造与目标任务相近的数据集。
- 训练多个影子模型。
- 收集影子模型对训练样本和非训练样本的输出。
- 训练一个二分类攻击器判断 member/non-member。
路线三:多信号融合
- 同时计算 loss、confidence、entropy、margin。
- 用简单逻辑回归或投票融合。
- 对阈值附近样本降低置信度。
- 报告不确定样本,而不是硬编结论。
路线四:过拟合利用
- 比较训练样本和测试样本性能差距。
- 如果模型明显过拟合,成员推断成功率通常更高。
- 若模型正则强或输出被截断,要转向更多查询或影子模型。
常见失败原因
可能原因:不确定性高
排查动作:增加特征或标记低置信判断
可能原因:模型泛化好或输出截断
排查动作:用影子模型、多信号、更多样本
可能原因:对照集分布不同
排查动作:确认样本来源和预处理一致
可能原因:某些简单样本天然高置信
排查动作:必须和同类非成员对照
迷你案例
题目给 20 个已知训练样本、20 个非训练样本和 5 个候选样本。对目标模型计算 loss 后,已知成员平均 loss 为 0.08,非成员平均 loss 为 0.74,取阈值 0.41。
候选样本 loss 为:
A: 0.05 -> member
B: 0.62 -> non-member
C: 0.39 -> 边界样本,需结合 confidence再算 confidence 后,C 的置信度接近成员分布,最终判为 member。WP 中要写阈值来源、分布范围、候选分数和不确定性处理。