跳转到内容

Shokri MIA 2017 — 判断一条数据是否被模型见过

待复核

Membership Inference Attack(成员推断攻击,简称 MIA)解决的是一个很具体的问题:给定一条记录和一个只能查询的模型,判断这条记录是不是出现在模型训练集中。

日常类比:像你拿着一张照片去问门卫”这个人是不是办过这里的员工卡”。门卫不会把员工名单给你,但他看照片时的反应、犹豫和回答细节,可能暴露这个人是不是内部员工。

放到机器学习里,“门卫反应”就是模型返回的预测向量。比如一个购物分类模型说某用户属于第 17 类的概率是 0.93,其他类都很低;如果模型对训练过的人更自信,攻击者就能从这种差异里猜成员身份。

这篇论文第一次把这个问题系统化:攻击者不需要模型参数,不需要下载模型,只要能像普通用户一样调用 API,就能训练一个攻击模型来回答”在不在训练集”。

不理解 MIA,下面这些事都没法解释:

  • 为什么”我只是开放一个预测 API”也可能泄漏训练数据里的个人隐私。
  • 为什么过拟合不只是准确率问题,还会变成隐私问题。
  • 为什么只做加密传输、权限控制、隐藏模型结构,仍然挡不住某些黑盒攻击。
  • 为什么 abadi-dpsgd-2016 这类差分隐私训练后来变成机器学习隐私里的基础防线。

MIA 的思路可以拆成 三步

  1. 看模型的表情:攻击者先拿目标记录去查询模型,得到每个类别的概率。类比:不是只听门卫说”是/不是”,还观察他说得有多确定。

  2. 训练影子模型:攻击者自己造一些和目标模型相似的 shadow models。类比:你不知道真门卫的规则,就训练几个模拟门卫,观察他们对熟人和陌生人的反应差别。

  3. 把隐私问题变成二分类:对 shadow model 来说,攻击者知道哪些数据进过训练集,哪些没进过,于是能标注 in/out,再训练一个攻击模型去识别目标模型的输出模式。

关键洞见是:模型常常对训练样本和没见过的样本表现不同。过拟合会放大这种差异,但论文也强调,模型结构、类别数、每类样本量都会影响泄漏。

案例 1:攻击者真正拿到的输入长什么样

Section titled “案例 1:攻击者真正拿到的输入长什么样”
record = {"age": 37, "symptom": "x", "label": "procedure_12"}
probs = target_model.predict(record)
attack_input = [record["label"], *probs]
member_score = attack_model.predict(attack_input)

逐部分解释

  • record 是攻击者已经知道的一条记录,不是攻击从模型里偷出来的。
  • probs 是目标模型返回的概率向量,例如 100 个类别各自的概率。
  • attack_input 把真实标签和概率向量放在一起,因为不同真实类别的概率形状本来就不同。
  • member_score 才是攻击结论:这条记录像不像训练成员。

案例 2:shadow model 怎么产生 in/out 标签

Section titled “案例 2:shadow model 怎么产生 in/out 标签”
for shadow in shadow_models:
for x, y in shadow.train_set:
attack_rows.append((y, shadow.predict(x), "in"))
for x, y in shadow.test_set:
attack_rows.append((y, shadow.predict(x), "out"))
attack_model.fit(attack_rows)

逐部分解释

  • shadow.train_set 是模拟模型见过的数据,所以输出标成 in
  • shadow.test_set 是同分布但没训练过的数据,所以输出标成 out
  • 攻击模型学的不是原始业务任务,而是”概率向量是否带有见过数据的痕迹”。

案例 3:为什么只隐藏低概率类别还不够

Section titled “案例 3:为什么只隐藏低概率类别还不够”
def top1_label_only(probs):
return probs.index(max(probs))
def rounded_probs(probs):
return [round(p, 1) for p in probs]

逐部分解释

  • top1_label_only 只返回最高概率类别,看起来信息最少。
  • rounded_probs 把概率变粗,减少小数细节。
  • 论文发现这些办法能降低泄漏,但不能彻底消除;即使只返回标签,训练成员和非成员被错分到哪些类也可能不同。
  1. 把 MIA 理解成”还原训练样本”:MIA 的输入已经包含目标记录,它回答的是”这条记录有没有被用过”,不是生成原始记录。

  2. 以为黑盒模型就安全:论文攻击的重点正是黑盒 API;shadow model 让攻击者不需要知道目标模型参数。

  3. 把过拟合当成唯一原因:同样的训练/测试差距下,不同平台和模型结构泄漏程度不同,说明输出形态也会贡献信号。

  4. 觉得只返回 top-1 就万事大吉:只返回标签会减少概率细节,但成员和非成员的错误类别分布仍可能不同,所以只能缓解。

适用

  • 评估开放预测 API 是否泄漏训练数据成员身份。
  • 比较不同模型、不同训练配置的隐私风险。
  • 解释为什么医疗、位置、购物这类数据训练出的模型要额外做隐私审计。
  • 作为差分隐私训练前后的攻击强度对照。

不适用

  • 证明某条训练记录的全部内容是什么;那更接近模型反演或数据提取。
  • 攻击完全没有查询入口、也没有输出可观察的模型。
  • 只靠一个平均准确率判断所有样本风险;后续研究指出低误报率下的指标更关键。
  • 把一次实验结果直接泛化到所有模型;类别数、训练集大小、输出接口都会改变风险。
  • 2015 年前后:社区已经看到模型反演和模型抽取问题,但它们主要问”能不能推出属性或复制模型”。
  • 2016 年:这篇论文的 arXiv 版本出现,同一年 abadi-dpsgd-2016 把 DP-SGD 推到深度学习训练。
  • 2017 年:论文发表于 IEEE Symposium on Security and Privacy,把 MIA 变成机器学习隐私的标准威胁模型。
  • 2020 年以后:MIA 从”攻击展示”变成”隐私审计工具”,研究者开始关注低误报率、逐样本风险和更强的参考模型攻击。
  • 2022 年:LiRA 一类方法强调在很低 false positive rate 下评估攻击,修正了只看平均准确率的粗糙做法。
  1. 隐私泄漏可以来自输出行为:模型不用吐出训练数据,只要对训练数据更自信,就可能泄漏成员身份。
  2. 攻击也可以训练出来:shadow training 把难以手写规则的问题变成普通监督学习。
  3. 泛化能力和隐私有关:过拟合越重,训练样本和新样本的输出差异通常越大。
  4. 防御要进入训练过程:限制输出有帮助,但真正稳的方向是正则化、审计和差分隐私训练。
  • 论文入口:IEEE S&P DOI;开放版本:arXiv PDF
  • abadi-dpsgd-2016 —— DP-SGD 是这类成员推断风险的核心训练期防御。
  • model-inversion-attacks-2015 —— 模型反演问”能推出什么属性”,MIA 问”这条记录是否进过训练集”。
  • carlini-mia-first-principles-2022 —— 后续把 MIA 评估推进到低误报率和 likelihood ratio attack。
  • mironov-renyi-dp-2017 —— RDP accountant 常用于跟踪 DP-SGD 多轮训练后的隐私预算。
  • abadi-dpsgd-2016 —— 用加噪和裁剪给训练过程加可证明隐私保护,直接回应 MIA 风险。
  • mironov-renyi-dp-2017 —— 更方便计算组合隐私预算,是 DP-SGD 工程化的重要工具。
  • duchi-local-dp-2013 —— 本地差分隐私把保护前移到用户侧,与模型训练期防护互补。
  • kairouz-advances-fl-2019 —— 联邦学习场景下,成员推断和梯度泄漏说明”不上传原始数据”仍不等于安全。
  • mcmahan-fedavg-2017 —— FedAvg 只定义协同训练方式,隐私还需要 DP 或安全聚合补上。
  • erlingsson-rappor-2014 —— RAPPOR 展示本地随机响应路线,和黑盒模型泄漏形成另一条隐私保护脉络。

(暂无反向链接)