前言

模型训练结束后,训练数据是不是就安全了?如果训练发生在客户端,而服务器只收到参数更新,隐私是不是已经得到了保护?

这些问题的答案取决于攻击者能看到什么。原始数据可能没有被直接发送,但预测概率、模型参数和梯度,仍然可能包含与训练数据有关的信息。

这篇从具体攻击目标出发,介绍深度学习中的几类隐私泄露,并解释它们需要什么条件、如何评价,以及常见防御到底保护了哪一部分。下面的数值例子仅使用人工构造的数据,不涉及真实个人信息。

先建立威胁模型

至少需要明确四件事:攻击者是谁,能观察什么,知道哪些辅助信息,以及希望恢复哪个秘密。

场景攻击者的观察可能额外知道什么
分类服务的用户最终标签、置信度或完整概率向量候选样本及其真实标签、同分布数据
获得模型文件的人参数、结构、中间表示或梯度训练流程、预处理方式、部分训练数据
联邦学习服务器各轮模型、客户端更新或聚合结果客户端身份、参与记录、优化器配置
参与协作的客户端收到的全局模型与自己的本地更新自己持有的数据、部分其他公开信息

黑盒、白盒并不是二选一的全部情形。只返回一个标签的 API,与提供概率向量的 API,虽然都可能被称为黑盒,信息量却不同。

还应区分诚实但好奇的攻击者与主动恶意的攻击者:前者按协议执行后分析观察结果,后者可能改变发送的模型、参与者选择或其他协议步骤。针对前者成立的结论,不能直接扩展到后者。

几类攻击分别在问什么?

攻击类型目标不应混淆的对象
成员推断(Membership Inference)判断一个候选样本是否参与训练不等于恢复该样本的全部内容
属性推断(Attribute Inference)推断样本、用户或训练集合的敏感属性不一定需要知道精确的成员身份
模型反演 / 梯度重建从模型输出、表示或梯度恢复输入信息类别代表性图像不一定是真实训练样本
训练数据提取(Training Data Extraction)从模型中获得实际训练内容普通生成、相似内容与逐字复现需要区分

模型窃取主要关注模型能力或参数的复制,与个人数据隐私是不同目标;对抗样本主要关注预测是否被操纵,也不能直接当作隐私攻击指标。

成员推断:为什么预测能暴露训练身份?

一个简单的损失阈值攻击

设候选样本为 $(x,y)$,攻击者可以得到目标模型的预测,并知道其标签。最简单的思路之一是计算损失,并按阈值判断:

$$ \widehat m(x,y)=\mathbf 1\{\ell(f_w(x),y)\le\tau\}, $$

其中 $m=1$ 表示训练集成员。这个攻击依赖一个经验信号:模型往往对训练样本拟合得更好,所以成员的损失可能较低。

但“低损失”与“成员身份”不是同一件事。容易分类的非成员也可能损失很低,困难的训练样本也可能损失很高。阈值应在独立校准数据上选择;如果把用于最终报告的测试数据同时拿来调阈值,就会高估攻击能力。

Shokri 等人的工作使用影子模型及攻击分类器来学习成员与非成员的预测差异。它展示了黑盒输出中的隐私风险,但并不意味着每个模型、每个数据集都同样容易被攻击。1

平均准确率为什么不够?

定义

$$ \operatorname{TPR}=P(\widehat m=1\mid m=1), \qquad \operatorname{FPR}=P(\widehat m=1\mid m=0). $$

TPR 是真正成员被识别出来的比例,FPR 是非成员被误判为成员的比例。若候选样本中真正成员的比例为 $\pi$,那么一个“成员”判断的精确率为

$$ P(m=1\mid\widehat m=1)= \frac{\pi\operatorname{TPR}} {\pi\operatorname{TPR}+(1-\pi)\operatorname{FPR}}. $$

例如,$\pi=1%$、TPR 为 80%、FPR 为 1% 时,精确率只有约 44.7%。在 10,000 个候选中,约有 80 个真正成员被识别出来,却也会有 99 个非成员被误报。

因此,只在成员与非成员各占一半的测试集上报告一个准确率,不能完整反映实际场景。Carlini 等人的 LiRA 工作强调应考察低误报率下的识别能力,例如 TPR@0.1% FPR。2

低误报率本身也需要足够的非成员样本来估计。在一个只有几百个非成员的测试集上观察到零次误报,不能据此宣称实际 FPR 为 0,更不能稳定评价千分之一量级的误报率。

过拟合不是唯一解释

过拟合可以提供成员推断信号,但训练与测试平均损失接近,并不能证明每个样本都安全。平均值还可能掩盖少数被强烈记忆的样本,尤其是重复、稀有或异常的内容。

评估时应尽量让成员与非成员来自匹配的数据分布,并控制类别、预处理和采集来源等差异。否则攻击器可能只是区分了两个数据集,而不是成员身份。

属性推断与模型反演

属性推断不必恢复整条样本。比如攻击者已经知道一个人的部分特征,希望通过模型输出推断另一个属性;或者通过客户端更新推断该客户端的数据分布特征。

这里需要区分两种信息:模型学到的总体规律,以及某条训练记录特有的信息。一个模型根据公开特征推断出敏感属性,已经可能带来现实隐私影响,但不能仅凭推断成功就断言它记住了这个人的训练记录。

模型反演通常尝试寻找能解释某个模型输出或中间表示的输入。一个被分类器高置信度识别为某人的图像,可能只是模型偏好的代表性模式。若要声称恢复了真实训练数据,需要与训练记录核对,并报告匹配标准和重建质量,而不是只展示“看起来像”的结果。

梯度为什么可能泄露输入?

单样本线性模型的解析例子

先看一个最简单的模型:

$$ f_{w,b}(x)=w^{\mathsf T}x+b, \qquad \ell=\frac12(f_{w,b}(x)-y)^2. $$

令残差 $r=f_{w,b}(x)-y$,则

$$ g_w=\nabla_w\ell=rx, \qquad g_b=\frac{\partial\ell}{\partial b}=r. $$

如果攻击者看到这两个单样本梯度,且 $g_b\ne0$,便可以逐坐标相除:

$$ x=\frac{g_w}{g_b}. $$

原始输入没有被上传,但梯度已经足以恢复它。下面仅用三个维度的人工数据验证这一点:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import numpy as np

x = np.array([0.2, 0.7, -0.4])
w = np.array([0.3, -0.2, 0.5])
b, y = 0.1, 1.0

residual = w @ x + b - y
weight_gradient = residual * x
bias_gradient = residual
assert bias_gradient != 0

reconstructed = weight_gradient / bias_gradient
assert np.allclose(reconstructed, x)
print(reconstructed)

这不是所有模型、所有批量设置都成立的公式。如果 $g_b=0$,相除不可用;如果看到的是多个样本的平均梯度,分子与分母分别变成加权和,通常不能用这个比值恢复每一个输入。

从解析恢复到梯度匹配

对于神经网络,可以把重建理解为寻找一组候选输入,使其产生的梯度与观察到的梯度接近:

$$ \min_{\widetilde x,\widetilde y} \left\|\nabla_w\ell(f_w(\widetilde x),\widetilde y)-g_{\mathrm{obs}}\right\|^2 +\lambda R(\widetilde x). $$

其中 $R$ 表示先验或正则项,这个表达式只是单样本情形的示意。Deep Leakage from Gradients 展示了通过梯度匹配恢复训练输入的可能性;后续 Inverting Gradients 使用方向相关的目标与更强优化策略,进一步研究了图像重建。3、4

实际难度会受到批量大小、模型结构、参数状态、标签知识、预处理、归一化信息以及观测是否包含多步更新等条件影响。一个设置下重建失败,只说明该攻击实现没有成功;扩大 batch、压缩或裁剪梯度也不自动构成严格隐私保证。

训练数据提取:模型真的会复述原文吗?

成员推断问的是“这条数据是否用过”,训练数据提取问的是“能否把实际用过的内容拿出来”。语言模型可能生成与训练内容相同的片段,但需要区分一般知识、常见表达、可从公开来源获得的内容,以及可验证的训练样本复现。

Carlini 等人的研究从语言模型中提取并核对了训练文本,展示了模型记忆与训练数据恢复的风险。5

研究这类风险时,可以使用人工生成、唯一且不含真实敏感信息的 canary 作为受控对象,记录其是否加入训练、重复次数和模型生成结果。但 canary 实验衡量的是指定实验条件下的记忆行为,并不能完整替代对真实数据的风险评估。

模型没有直接复述内容,也不意味着成员身份、属性或其他信息没有泄露。不同攻击目标需要分别评价。

联邦学习为何不能自动解决隐私问题?

联邦学习改变了数据处理的位置:原始数据留在客户端,本地训练后发送更新。这个架构可以减少原始数据集中收集,但更新本身仍然可能是敏感信息的载体。

如果服务器能看到单个客户端的更新,可以直接分析这些更新;如果只看到多个客户端的聚合结果,攻击面会改变,但仍需要考虑参与者数量、串通、跨轮信息,以及服务器能否主动改变训练条件。

安全聚合(Secure Aggregation)通过密码学协议,让服务器在相应安全假设下获得聚合值,而不直接获得各个参与者的明文输入。它保护的是计算过程中的个体输入可见性,不要求聚合结果或最终模型与个体数据完全独立。6

因此,安全聚合与 DP 解决的问题不同,二者可以结合使用。还需要匹配具体协议的参与人数、掉线和串通阈值等假设;不能只写“使用了聚合”,就把普通求平均当成密码学安全聚合。

另外,客户端数据划分也会影响研究场景。通过 Dirichlet 分布构造 Non-IID 数据7 时,有些客户端可能样本很少、标签很集中;但这些统计现象本身不等于某一种攻击的成功证明,仍然需要明确观测与实验条件。

常见防御保护了什么?

手段主要作用需要保留的边界
数据最小化、敏感字段处理与去重减少训练前进入系统的敏感内容和重复记忆机会无法单独保证剩余数据不会泄露
正则化、早停等训练措施改善泛化,可能降低部分成员推断信号平均泛化良好不等于逐样本隐私保证
减少概率输出、查询限制与访问控制减少攻击者的观察与调用能力需要覆盖模型文件、日志及其他可访问输出
裁剪、量化、压缩或较大 batch改变更新中的信息及攻击难度不经隐私分析,不能直接声称达到 DP
安全聚合、加密计算或可信执行环境在指定信任与协议假设下保护计算过程合法发布的结果仍可能支持推断
差分隐私限制受保护单位改变造成的输出分布变化邻接关系、采样方式和完整隐私预算必须明确

DP-SGD 不只是给梯度加一点噪声

DP-SGD 的核心包括按样本裁剪梯度,以及在聚合后加入校准噪声。一个常见的示意写法是

$$ \overline g_i=\frac{g_i}{\max(1,\|g_i\|_2/C)}, \qquad \widetilde g=\frac1{|\mathcal B|} \left(\sum_{i\in\mathcal B}\overline g_i+\xi\right), \qquad \xi\sim\mathcal N(0,\sigma^2 C^2 I). $$

$C$ 为裁剪阈值,$\sigma$ 为噪声乘子,$\mathcal B$ 为当前批次。这展示了算法结构,具体的敏感度和 $(\varepsilon,\delta)$ 计算还取决于邻接定义、采样机制和隐私会计方法,不能由这个式子直接读出。8

只裁剪整个 batch 的梯度,不能直接沿用逐样本裁剪的敏感度或隐私会计结果;加完噪声后又向攻击者提供未加噪声的梯度,也不能靠公开输出的 DP 保证保护那份额外观察。优化器、检查点、数据依赖的调参或额外统计发布,也应纳入相应的分析。

在联邦学习中,还要区分记录级保护与用户级保护。如果一个用户贡献很多条记录,记录级 DP 的参数不能原样当作用户级 DP 的参数。用户级机制通常需要在与用户贡献匹配的层级上控制影响,并结合实际参与和发布方式分析。

DP 不要求隐藏所有群体规律,也不保证任何敏感属性都无法由已有公开信息推断。关于邻接关系、辅助信息与信息量的进一步讨论,可以参考 隐私计算中的信息论9。

怎样设计一个有说服力的隐私实验?

首先明确观测范围与受保护单位。只提供最终预测的攻击实验,不能代表发布全部训练梯度的风险;只研究一条记录,也不能直接说明一个用户的全部数据安全。

然后为不同目标选择对应的指标:成员推断报告低 FPR 下的 TPR 和先验假设;重建攻击报告与真实输入的匹配、误差及成功率;数据提取报告可验证匹配的标准与数量。不要让一张漂亮的重建图替代全体样本的统计。

校准和最终评价数据应分开,并检查成员与非成员的分布是否匹配。训练、攻击优化与划分随机种子也会影响结果,应报告波动与失败案例,而不是只挑选成功图片。

最后,用多个合理的攻击基线评价防御,并考虑攻击者是否知道防御设置。理论保证需要证明或可信实现的隐私会计,经验风险需要实际攻击评估;攻击失败是有用证据,但不能取代严格保证。

结语

深度学习中的隐私泄露不是单一问题。知道一个样本是否参与训练,推断某个敏感属性,从梯度重建输入,以及提取被记忆的训练内容,涉及不同秘密与不同攻击面。

理解这些区别之后,才能给防御找到正确的位置:哪些信息根本不应进入训练,哪些中间结果需要隐藏,哪些发布结果需要限制个体影响,以及实验结果到底证明了什么。保护隐私需要的不只是“不传原始数据”,还需要完整、明确的威胁模型。

参考资料与相关阅读