第二季 · 第 60 章 · 第二季终章知道很多,却不泄露任何人标记本章已读大字阅读打印本章回到上次阅读位置《算法的故事》第二季 · 第六篇:会学习的算法 · 终章——从数据库重建的隐私危机,到2006年差分隐私的数学承诺第60章配图2006年3月。美国纽约。第三届Theory of Cryptography Conference,密码学理论会议,正在举行。在这次会议的论文集中,出现了一篇题目有些特殊的研究。Calibrating Noise to Sensitivity in Private Data Analysis《在隐私数据分析中,根据敏感度校准噪声》。作者有四位。辛西娅·德沃克(Cynthia Dwork)。弗兰克·麦克谢里(Frank McSherry)。科比·尼西姆(Kobbi Nissim)。亚当·史密斯(Adam Smith)。论文发表于TCC 2006论文集,第265—284页。会议于2006年3月4日至7日在纽约举行。 [Springer Nature Link][Penn State]这四位研究者面对的难题,既不是怎样让计算机计算得更快,也不是怎样把海量数据全部压缩成一个模型。而是一个更加微妙的问题。假设有一家医院。它拥有十万名患者的记录。这些数据对医学研究非常重要。研究者希望知道:某种疾病的发生率是多少?不同年龄段的治疗效果有什么差异?哪些公共卫生干预可能有效?医院当然希望支持这些研究。但另一方面,它还必须保护每一位患者的隐私。最容易想到的办法,是删掉姓名。删掉身份证号码。再把数据表交给研究者。这样是否就安全了?不一定。因为一个人的身份,可能通过许多其他信息被间接推断。而即使医院不公开任何原始记录,只允许外部研究者反复查询统计结果,也可能出现新的隐私风险。例如:数据库里有多少名患者具有某个特征?如果排除一名特定患者,数字又变成多少?两次结果的差值,是否就泄露了这个人的情况?如果查询数量足够多,研究者是否还能从大量看似无害的统计结果中,逐步恢复数据库里的个人信息?这是一个令人不安的事实。不公开个人记录,并不必然意味着个人信息不会被泄露。更早的数据库理论研究已经发现,有些攻击甚至能够从大量带有微小误差的统计答案中,重建原始记录。所以,问题不能只停留在:“我们有没有隐藏姓名?”也不能只是:“我们往结果里随便加一点噪声,好不好?”真正需要的是一个可以严格定义、可以数学证明的目标。如果某个人的数据加入数据库,或者从数据库中退出,外部观察者看到的结果究竟会发生多大变化?这种变化是否可以被限制在一个明确的范围内?如果允许连续查询十次、百次,隐私风险又怎样累积?于是,2006年的研究提出了一项关键思想。隐私保护不应该只检查发布了什么数据,还应该比较:当一个人的记录发生变化时,整个发布机制的输出概率分布会怎样改变。这意味着,隐私不再只是一个模糊的承诺。它可以变成一条数学不等式。Pr[M(D)∈S]≤eεPr[M(D′)∈S]\boxed{ \Pr[M(D)\in S] \le e^\varepsilon \Pr[M(D')\in S] }Pr[M(D)∈S]≤eεPr[M(D′)∈S]其中,D和D'只相差一个人的数据贡献。M是一项随机化分析机制。S代表任意可能被观察到的输出事件。而:ε\varepsilonε用于控制两个输出分布允许相差多少。后来,这项研究框架获得了一个著名的名称。Differential Privacy差分隐私。但在继续之前,我们必须先解开一个历史误会。差分隐私不是2006年人类第一次尝试使用随机性保护隐私。也不是四位作者突然发现:“只要往数据里加噪声,隐私就安全了。”它真正革命性的地方在于:为隐私风险建立与单条记录变化有关的、可以组合计算的严格数学保证,并设计能够满足这项保证的随机化算法。要理解这项突破,我们还需要把时间向前拨四十年。第一幕:1965年,一枚随机指针怎样帮助人们回答敏感问题?第60章配图1965年。统计学家:斯坦利·沃纳(Stanley L. Warner)在《Journal of the American Statistical Association》发表:Randomized Response: A Survey Technique for Eliminating Evasive Answer Bias《随机应答:一种减少回避性回答偏差的调查技术》。论文刊登于第60卷第309期,第63—69页。[Taylor & Francis Online]他研究的是一项非常实际的统计问题。如果调查者询问:你是否具有某项敏感特征?受访者可能不愿意回答。即使回答,也不一定说出真实情况。这会导致统计结果出现偏差。如果调查者根本不知道受访者回答了哪个问题呢?沃纳研究了一种随机应答机制。受访者通过随机装置,决定实际回答哪一种问题。调查者只听到一个答案。却不知道受访者究竟选择了哪个问题。于是,单个回答可以保持一定程度的模糊性。但如果样本数量足够多,统计研究者仍有可能估计总体比例。这是一种非常重要的思想。用个体回答中的随机性,换取总体统计中的可用信息。一个简化的现代教学版本假设某人拥有一个私密的是非属性:x∈{0,1}x\in\{0,1\}x∈{0,1}他先抛一枚公平硬币。如果出现正面,就真实回答:xxx如果出现反面,则再抛一次公平硬币,随机回答0或1。那么,当:x=1x=1x=1时,最终回答1的概率为:12+12×12=34\frac12+\frac12\times\frac12 = \frac3421+21×21=43而当:x=0x=0x=0时,回答1的概率为:12×12=14\frac12\times\frac12 = \frac1421×21=41因此,调查者即使看到回答1,也不能直接确定受访者的真实属性。这不正是差分隐私吗?这个简化版本事实上也能够满足一项局部差分隐私保证。因为任意相同回答在两种真实输入下的最大概率比是:3/41/4=3\frac{3/4}{1/4}=31/43/4=3所以对应:ε=ln3\boxed{\varepsilon=\ln3}ε=ln3但必须区分历史。1965年沃纳的原始随机应答研究,并没有使用2006年以后形成的差分隐私术语和完整理论框架。我们是在使用后来的数学语言,重新分析一类早期随机应答思想。这段历史说明:随机性保护隐私的思想很早就已存在;2006年的关键突破,是对隐私保证的定义、一般机制及其数学分析。第二幕:1977年,一个过于美好的隐私目标为什么无法普遍实现?第60章配图1977年,统计学家Tore Dalenius在数据库隐私研究中提出了一种重要的理想目标。大意是:外部使用者不应该因为访问某份统计数据库,而学到原本无法知道的有关某个个人的信息。这听起来十分合理。如果一个数据库不会泄露任何人的私人信息,那岂不是最理想的隐私保护?但问题在于:统计数据本来就应该提供某些新知识。一个令人惊讶的反例假设某位研究者公布了一个国家成年女性的平均身高。这是群体统计量。它没有直接列出任何人的身高。但某个观察者此前已经知道:某位特定人士的身高,恰好比这个平均值低两英寸。那么,一旦平均值被公开,观察者就能够计算出这位人士的身高。即使这位人士根本不在所使用的数据库中,也可能发生这种推断。这个思想实验的具体形式,正是Dwork在2006年《Differential Privacy》论文中用来解释绝对披露预防目标的困难的例子。[Microsoft]为什么这是一个重要区别?因为我们希望数据库能够提供真实的社会规律。例如:某个地区的平均收入。某种疾病与年龄的统计关系。某项公共政策的群体效果。这些规律本身可能帮助人们预测某个个体的情况。但是:通过公开的总体规律对某个人进行推测,不一定意味着这个人的个体数据库记录被直接泄露。因此,如果隐私目标要求:任何人都不能从统计结果与外部知识中,对任何个体获得任何新的推断。那就可能与发布有用统计信息的目标发生根本冲突。差分隐私改变了问题的问法它不再承诺:任何人都绝对不会学到关于某个个体的事情。而是尝试限制:某个个体是否参与这份数据库,对发布结果的概率分布产生的额外影响。这是一项不同的隐私目标。它并不消灭总体统计中的信息。也不保证外部世界里不存在任何与该个体有关的知识。它关注的是:参与数据库这件事本身,究竟会额外改变多少可观察的信息。这种从绝对保密向参与风险约束的转变,是2006年《Differential Privacy》论文的重要论证之一。[Microsoft Research]第三幕:2003年,Dinur与Nissim发现——大量看似无害的统计答案,竟然可能拼出整个数据库第60章配图2003年6月。美国圣迭戈。第22届ACM数据库原理研讨会(PODS)发表了一篇影响深远的论文。作者是:伊丽特·迪努尔(Irit Dinur)。以及我们已经认识的:Kobbi Nissim。论文题目:Revealing Information while Preserving Privacy《在保护隐私的同时揭示信息》。发表于PODS 2003论文集,第202—210页。[数字对象标识符]这项研究提出的问题十分尖锐。假设数据库保存:nnn个人的某个二元属性。每人只有一个数字:xi∈{0,1}x_i\in\{0,1\}xi∈{0,1}比如:某个人是否具有某种特征。数据库不允许直接读取:xix_ixi却允许研究者查询某些人群子集中的:∑i∈Axi\sum_{i\in A}x_i∑i∈Axi也就是:在指定人群中,有多少人具有这种特征?每次答案还可以加入少量噪声。这样是否足够安全?一次查询可能没有问题例如:x1+x2+x3+x4x_1+x_2+x_3+x_4x1+x2+x3+x4只返回:333我们并不知道究竟是哪三个人的属性为1。但多次查询可能共同形成方程组假设允许查询:x1+x2x_1+x_2x1+x2x2+x3x_2+x_3x2+x3x1+x3x_1+x_3x1+x3并返回精确答案:1, 2, 11,\ 2,\ 11, 2, 1于是:{x1+x2=1x2+x3=2x1+x3=1\begin{cases} x_1+x_2=1\\ x_2+x_3=2\\ x_1+x_3=1 \end{cases}⎩⎨⎧x1+x2=1x2+x3=2x1+x3=1第二项告诉我们:x2=x3=1x_2=x_3=1x2=x3=1接着得到:x1=0x_1=0x1=0原本没有公开的三个私人属性,就被全部恢复出来。这只是一个三变量的教学例子。2003年论文研究的情况更加困难。它考察:大量子集求和查询。查询结果允许加入误差。攻击者仍然试图恢复原始二元数据库。研究者证明,在其特定的查询与噪声模型中,如果噪声幅度低于相应规模阈值,就可能出现强烈的数据库重建风险;论文的重要量级涉及:n\sqrt nn而非简单要求每个查询完全准确。[SSL]这项研究为什么如此重要?因为它说明:隐私泄露可能来自多个统计答案的联合信息,而不是某一次查询本身明显暴露了个人。研究者必须认真分析:可以查询多少次?每次允许多大误差?所有查询之间有什么关联?攻击者拥有哪些额外计算能力?以及这些答案联合起来,是否足以恢复隐藏数据?这为后来差分隐私的研究提出了一项关键要求。不能只评价单条统计答案的隐私风险,还要考虑多次查询的联合输出。第四幕:2006年,四位研究者把“隐私风险”变成了一条可证明的不等式第60章配图2006年的TCC论文,延续了此前几年的数据库隐私研究。当时:Cynthia Dwork与Frank McSherry在微软研究院硅谷实验室工作。Kobbi Nissim来自以色列本-古里安大学。Adam Smith来自以色列魏茨曼科学研究所。这些机构与作者关系,可以在论文首页直接核查。[MIT CSAIL]他们考虑一个基本场景。有一台受信任的服务器。它保存敏感数据库:DDD外部研究者提交一个统计查询:fff服务器可以计算真实答案:f(D)f(D)f(D)但是,直接返回这个真实答案,可能暴露单条记录的影响。于是,服务器不直接发布:f(D)f(D)f(D)而是发布某项随机化结果:M(D)\boxed{M(D)}M(D)为什么必须引入随机性?我们先考虑一个简单问题。假设数据库中具有某种特征的人数是:636363另一个数据库只多出一位具有该特征的人。所以,人数是:646464如果发布机制每次都准确返回人数,那么:M(D)=63M(D)=63M(D)=63而:M(D′)=64M(D')=64M(D′)=64只要观察输出,攻击者就能够区分这两个数据库。这意味着:单条记录的改变,产生了完全不同的可观察结果。能否让两个数据库的输出发生重叠?如果:M(D)=63+ZM(D)=63+ZM(D)=63+ZM(D′)=64+ZM(D')=64+ZM(D′)=64+Z其中:ZZZ是随机噪声。那么,即使两个数据库的真实人数不同,它们也可能输出相同或相近的结果。例如:对于真实人数63,发布64.2是可能的。对于真实人数64,发布64.2也可能发生。攻击者不能仅凭一次输出就完全区分数据库。但还有一个困难。让两个输出分布有所重叠,并不足以保证强隐私。因为:它们可能只重叠很小一部分。某些结果在一个数据库下出现的概率极高。而在另一个数据库下出现的概率极低。如果攻击者反复观察,就可能利用这些概率差异。因此,2006年的研究不只是要求:两个分布发生重叠。而是进一步限制:对于任意可能观察到的事件,两个相邻数据库产生该事件的概率不能相差过大。这就是差分隐私形式化定义的起点。2006年有两篇重要论文这里需要特别区分。2006年3月,Dwork、McSherry、Nissim和Smith在TCC发表:Calibrating Noise to Sensitivity in Private Data Analysis。该研究系统分析:统计查询的敏感度。适当噪声分布。以及基于输出不可区分性的隐私保证。2006年7月,Cynthia Dwork又在ICALP发表:Differential Privacy《差分隐私》。论文第1—12页,进一步讨论隐私定义的动机,并明确解释为什么完全阻止有关个人的一切推断,并不是可普遍实现的目标。[Microsoft Research: Publications][dblp]这两篇论文与此前多项研究共同构成了差分隐私的发展过程。因此,不能把差分隐私的历史简化成:“2006年某一个人突然想到给统计结果添加随机数。”它是一条逐步形成了严格定义与一般机制的研究路线。第五幕:差分隐私的定义——如果你不在数据库里,世界会有多大不同?第60章配图现在,我们开始推导本章最重要的公式。首先,准备两份数据库。第一份:DDD第二份:D′D'D′二者几乎相同。唯一的区别是:一个人的数据贡献发生了变化。我们称它们为:Adjacent Datasets(相邻数据集)。相邻数据集的两种常见定义第一种是:Add/Remove Adjacency(增加或删除邻接关系)。一份数据库比另一份多一位个体的数据。第二种是:Replace-One Adjacency(替换一条记录邻接关系)。两份数据库记录数相同,但某一位个体的记录被另一条记录替换。这两种定义并不完全相同。在计算敏感度、噪声规模和组合保证时,必须明确使用哪一种。本章的计数实验,默认采用增加或删除一位个体的邻接关系。而且我们假设:每个人至多贡献一条记录。如果一个人可以贡献几十条订单或事件,必须在设计中额外控制其总贡献,否则简单的单行记录保护不一定等于个人级隐私保护。差分隐私的标准形式设:MMM是一个随机化机制。它接收数据库,输出某项统计结果。对于任意相邻数据库:D∼D′D\sim D'D∼D′以及任意可测的输出事件:SSS如果满足:Pr[M(D)∈S]≤eεPr[M(D′)∈S]\boxed{ \Pr[M(D)\in S] \le e^\varepsilon \Pr[M(D')\in S] }Pr[M(D)∈S]≤eεPr[M(D′)∈S]我们就称:MMM满足:ε\varepsilonε-Differential Privacy。即:ε\varepsilonε差分隐私。由于相邻关系是对称的,同一保证也适用于交换D和D'后的比较。这个公式到底在说什么?左边是:真实数据库为D时,观察到某个输出事件的概率。右边是:真实数据库为D'时,观察到相同事件的概率,乘以:eεe^\varepsiloneε两者之间的概率比,受到限制。例如:如果:ε=ln2\varepsilon=\ln2ε=ln2则:eε=2e^\varepsilon=2eε=2意味着:某个观察事件在两份相邻数据库下的概率,最多相差一个2倍的乘法因子。注意:这并不意味着:某个个体被识别的概率一定低于50%。也不意味着:攻击者猜错的概率至少为50%。它约束的是:相邻数据库对应的输出概率分布。不是某个特定攻击者的最终分类准确率。ε越小,意味着什么?如果:ε\varepsilonε较小,那么:eεe^\varepsiloneε更接近1。两个相邻数据库对应的输出分布,被要求更加相似。如果:ε\varepsilonε较大,允许的概率差异就更大。因此,在相同邻接定义和机制解释下:较小的ε通常对应较强的隐私保证。但不能脱离系统设计,只看一个ε数字,就断言整个数据产品已经安全。还需要检查:是否真的符合差分隐私定义?保护的是一条记录还是一个人?是否正确控制了重复贡献?有没有其他未经保护的输出?以及隐私预算是否被其他查询消耗?ε是不是可以取0?从定义上看:ε=0\varepsilon=0ε=0要求:eε=1e^\varepsilon=1eε=1也就是所有相邻数据库的输出分布完全相同。对于连通的邻接数据库空间,这将极大限制机制能够提供的数据依赖信息。例如,想要精确发布某个个人特征计数,就无法同时满足:ε=0\varepsilon=0ε=0的纯差分隐私。这说明:隐私与统计效用之间存在真实的数学权衡。第六幕:敏感度——为什么有的统计量只需要少量噪声,有的却可能需要很多?第60章配图现在,假设我们已经决定:希望机制满足:ε=1\varepsilon=1ε=1是不是只要在全部统计结果上加入相同数量的噪声就可以?不是。还需要知道:改变一个人的数据,究竟可能使真实统计结果改变多少?这就是:Sensitivity(敏感度)。全局敏感度的定义对于一个标量统计函数:f(D)f(D)f(D)定义:Δf=maxD∼D′∣f(D)−f(D′)∣\boxed{ \Delta f = \max_{D\sim D'} |f(D)-f(D')| }Δf=D∼D′max∣f(D)−f(D′)∣这称为:Global Sensitivity(全局敏感度)。它不是在当前数据库上随便观察某一条记录的影响。而是在指定的数据域与邻接关系下,考虑所有可能的相邻数据库。第一个例子:计数查询假设:f(D)f(D)f(D)表示某个群体中,具有指定特征的人数。如果每个人至多贡献一条记录,且使用增加或删除一个人的邻接定义。那么:增加一个人,最多使计数增加1。删除一个人,最多使计数减少1。所以:Δf=1\boxed{\Delta f=1}Δf=1这是一项十分重要的结果。无论数据库有:100人。10,000人。还是1,000,000人。对于这样的单个特征计数,敏感度都为1。第二个例子:年龄平均值现在,我们希望计算平均年龄。假设年龄被限制在:0≤xi≤1000\le x_i\le1000≤xi≤100并且数据库人数:nnn固定。使用替换一人记录的邻接关系。平均值:xˉ=1n∑i=1nxi\bar x=\frac1n\sum_{i=1}^{n}x_ixˉ=n1∑i=1nxi如果将某人的年龄从0替换为100,平均值最多改变:100n\frac{100}{n}n100所以:Δxˉ=100n\boxed{ \Delta\bar x=\frac{100}{n} }Δxˉ=n100例如:n=1000n=1000n=1000那么:Δxˉ=0.1\Delta\bar x=0.1Δxˉ=0.1但这里必须强调:这是固定人数、年龄范围已知、采用替换邻接关系下的结论。如果人数本身是私有而且会变化,或者年龄没有预先设定上下界,就不能直接套用这个公式。第三个例子:没有限制范围的最大值假设数据库保存某项数值。我们希望发布:f(D)=maxixif(D)=\max_i x_if(D)=maxixi如果数值允许任意大,那么改变一条记录,就可能使最大值发生任意大的变化。例如:原来的最大值是100。新增一条记录:101210^{12}1012那么最大值突然变为:101210^{12}1012如果数据域完全无界,则相应查询的全局敏感度可能无界。这意味着:不能直接选择某个有限噪声规模,套用标准全局敏感度拉普拉斯机制,获得我们希望的保证。因此,在实际差分隐私系统中,数据范围约束、记录贡献限制和查询设计都非常重要。图60-1:统计函数的敏感度比较统计函数条件全局敏感度特征人数一人一条,增删邻接1年龄总和年龄在0—100,增删邻接100年龄平均值固定n,替换邻接100/n无界数值最大值没有数值范围限制可能无界2006年论文的真正突破之一Dwork等人的研究指出:可以根据查询函数的全局敏感度,校准添加的噪声规模。这种方法不再局限于简单求和查询。还能够分析一些向量统计函数,以及其他更复杂的计算对象。原始论文专门讨论了:直方图。列联表。协方差矩阵。以及某些网络统计等函数的敏感度性质。[MIT CSAIL]因此,这项研究最重要的思想之一是:要控制隐私风险,不需要先随意决定“噪声应该多大”;可以先分析单人数据变化对查询结果的最大影响,再据此推导所需噪声规模。第七幕:拉普拉斯噪声——为什么不是随便加一个随机数?第60章配图现在,我们终于来到本章的算法核心。假设我们希望发布:f(D)=63f(D)=63f(D)=63即:数据库中有63个人符合某项条件。我们已经知道:这个计数查询的全局敏感度是:Δf=1\Delta f=1Δf=1我们也已经选择:ε=0.5\varepsilon=0.5ε=0.5那么,该添加什么样的噪声?噪声规模应该有多大?拉普拉斯分布2006年的研究给出一项经典方法:Laplace Mechanism(拉普拉斯机制)。它使用:Laplace Distribution(拉普拉斯分布)。对于中心为0、尺度为:b>0b>0b>0的拉普拉斯噪声:Z∼Laplace(0,b)Z\sim\operatorname{Laplace}(0,b)Z∼Laplace(0,b)其概率密度为:p(z)=12bexp(−∣z∣b)\boxed{ p(z)=\frac1{2b}\exp\left(-\frac{|z|}{b}\right) }p(z)=2b1exp(−b∣z∣)与正态分布相比,拉普拉斯分布在中心附近更加尖锐,并具有指数衰减的两侧尾部。它的噪声尺度由什么决定?对于标量查询,经典拉普拉斯机制设置:b=Δfε\boxed{ b=\frac{\Delta f}{\varepsilon} }b=εΔf然后发布:M(D)=f(D)+Z\boxed{ M(D)=f(D)+Z }M(D)=f(D)+Z其中:Z∼Laplace(0,Δfε)Z\sim\operatorname{Laplace} \left(0,\frac{\Delta f}{\varepsilon}\right)Z∼Laplace(0,εΔf)对于当前计数查询:Δf=1\Delta f=1Δf=1而:ε=0.5\varepsilon=0.5ε=0.5所以:b=2\boxed{b=2}b=2即:M(D)=63+Laplace(0,2)\boxed{ M(D)=63+\operatorname{Laplace}(0,2) }M(D)=63+Laplace(0,2)为什么ε越小,噪声越大?因为:b=Δfεb=\frac{\Delta f}{\varepsilon}b=εΔf在敏感度固定时:ε↓\varepsilon\downarrowε↓意味着:b↑b\uparrowb↑因此,要求较强的隐私保证,就需要让输出分布对单人数据变化更加不敏感。添加较大尺度的噪声,是实现这一目标的一种方式。为什么ε不能单独决定噪声大小?因为:Δf\Delta fΔf同样重要。如果某个查询的敏感度为:100100100那么:ε=1\varepsilon=1ε=1时:b=100b=100b=100而对于敏感度为1的计数查询,同样的ε只需要:b=1b=1b=1所以,不能说:“ε等于1,就意味着给所有统计结果加上标准差为1的噪声。”噪声必须结合实际查询敏感度计算。而且,拉普拉斯分布的尺度参数:bbb也不等于标准差。对于:Z∼Laplace(0,b)Z\sim\operatorname{Laplace}(0,b)Z∼Laplace(0,b)有:E[Z]=0E[Z]=0E[Z]=0Var(Z)=2b2\operatorname{Var}(Z)=2b^2Var(Z)=2b2因此:Std(Z)=2b\boxed{ \operatorname{Std}(Z)=\sqrt2b }Std(Z)=2b以及:E[∣Z∣]=b\boxed{ E[|Z|]=b }E[∣Z∣]=b最后一项非常有用。因为它直接描述:添加噪声以后,统计结果的期望绝对误差是多少。一张误差比较表对于敏感度:Δf=1\Delta f=1Δf=1的计数查询:隐私参数ε噪声尺度b期望绝对误差0.11010人0.522人1.011人2.00.50.5人这些是数学期望。并不是说:每次添加的噪声绝对值都恰好等于表中数字。拉普拉斯噪声可能为正。也可能为负。多数时候接近0,但也可能产生较大的偏差。因此,单次发布的结果可能高于真实人数,也可能低于真实人数。2006年论文的关键成果在其定义和假设下,Dwork等人证明:根据全局敏感度设置适当的指数型噪声,可以实现相邻数据库输出分布的规定不可区分性。对于标量查询,这项机制就是我们现在使用的拉普拉斯机制。[Microsoft Research]但“它能够满足差分隐私”还只是结论。接下来,我们真正把证明写出来。第八幕:为什么拉普拉斯机制真的满足差分隐私?——一次完整的数学证明第60章配图现在,我们不依赖故事比喻。只使用概率论与代数推导。我们的目标是证明:对于任意相邻数据库:D∼D′D\sim D'D∼D′如果:M(D)=f(D)+ZM(D)=f(D)+ZM(D)=f(D)+Z且:Z∼Laplace(0,b)Z\sim\operatorname{Laplace}(0,b)Z∼Laplace(0,b)其中:b=Δfεb=\frac{\Delta f}{\varepsilon}b=εΔf那么:MMM满足:ε\varepsilonε差分隐私。第一步:写出输出概率密度对于数据库D,如果发布结果为:yyy它的概率密度为:pD(y)=12bexp(−∣y−f(D)∣b)\boxed{ p_D(y)= \frac1{2b} \exp\left( -\frac{|y-f(D)|}{b} \right) }pD(y)=2b1exp(−b∣y−f(D)∣)对于相邻数据库D':pD′(y)=12bexp(−∣y−f(D′)∣b)\boxed{ p_{D'}(y)= \frac1{2b} \exp\left( -\frac{|y-f(D')|}{b} \right) }pD′(y)=2b1exp(−b∣y−f(D′)∣)两个分布使用相同的噪声尺度:bbb但中心可能不同。第二步:计算两个密度的比值pD(y)pD′(y)=exp(−∣y−f(D)∣/b)exp(−∣y−f(D′)∣/b)\frac{p_D(y)}{p_{D'}(y)} = \frac{ \exp(-|y-f(D)|/b) }{ \exp(-|y-f(D')|/b) }pD′(y)pD(y)=exp(−∣y−f(D′)∣/b)exp(−∣y−f(D)∣/b)消去共同的:12b\frac1{2b}2b1得到:pD(y)pD′(y)=exp(∣y−f(D′)∣−∣y−f(D)∣b)\boxed{ \frac{p_D(y)}{p_{D'}(y)} = \exp\left( \frac{|y-f(D')|-|y-f(D)|}{b} \right) }pD′(y)pD(y)=exp(b∣y−f(D′)∣−∣y−f(D)∣)现在,我们需要控制指数中的差。第三步:使用三角不等式由绝对值的三角不等式:∣y−f(D′)∣≤∣y−f(D)∣+∣f(D)−f(D′)∣|y-f(D')| \le |y-f(D)|+|f(D)-f(D')|∣y−f(D′)∣≤∣y−f(D)∣+∣f(D)−f(D′)∣所以:∣y−f(D′)∣−∣y−f(D)∣≤∣f(D)−f(D′)∣|y-f(D')|-|y-f(D)| \le |f(D)-f(D')|∣y−f(D′)∣−∣y−f(D)∣≤∣f(D)−f(D′)∣因此:pD(y)pD′(y)≤exp(∣f(D)−f(D′)∣b)\frac{p_D(y)}{p_{D'}(y)} \le \exp\left( \frac{|f(D)-f(D')|}{b} \right)pD′(y)pD(y)≤exp(b∣f(D)−f(D′)∣)第四步:代入全局敏感度由于:D∼D′D\sim D'D∼D′所以按照敏感度定义:∣f(D)−f(D′)∣≤Δf|f(D)-f(D')|\le\Delta f∣f(D)−f(D′)∣≤Δf因此:pD(y)pD′(y)≤exp(Δfb)\frac{p_D(y)}{p_{D'}(y)} \le \exp\left( \frac{\Delta f}{b} \right)pD′(y)pD(y)≤exp(bΔf)而:b=Δfεb=\frac{\Delta f}{\varepsilon}b=εΔf所以:Δfb=ε\frac{\Delta f}{b}=\varepsilonbΔf=ε得到:pD(y)pD′(y)≤eε\boxed{ \frac{p_D(y)}{p_{D'}(y)} \le e^\varepsilon }pD′(y)pD(y)≤eε即:pD(y)≤eεpD′(y)\boxed{ p_D(y)\le e^\varepsilon p_{D'}(y) }pD(y)≤eεpD′(y)第五步:从概率密度推广到任意输出事件对于任意可测集合:SSS在两边同时积分:∫SpD(y) dy≤eε∫SpD′(y) dy\int_Sp_D(y)\,dy \le e^\varepsilon \int_Sp_{D'}(y)\,dy∫SpD(y)dy≤eε∫SpD′(y)dy于是:Pr[M(D)∈S]≤eεPr[M(D′)∈S]\boxed{ \Pr[M(D)\in S] \le e^\varepsilon \Pr[M(D')\in S] }Pr[M(D)∈S]≤eεPr[M(D′)∈S]证毕。这正好是:ε\varepsilonε差分隐私的定义。这项证明最惊人的地方是什么?它完全没有依赖:当前数据库究竟有多少人。具体哪一个人具有敏感属性。攻击者是否知道其中99%的记录。也没有只检查某个固定的输出结果。它直接证明:对于所有满足邻接定义的数据库。以及所有输出事件。概率关系都受到统一控制。当然,证明成立还有前提:敏感度计算正确。噪声分布正确。输出机制没有额外未经保护的数据泄露。而实际软件实现,还必须认真处理随机数生成、浮点计算和系统接口等问题。因此,数学机制有证明,不等于任意随手编写的软件实现天然满足生产级隐私要求。但从算法理论角度说,这项证明建立了一种非常清晰的关系。单人数据能改变多少统计结果,决定噪声应该有多大;而噪声的数学分布,保证相邻数据库的输出概率不会相差过大。第九幕:互动实验室——把一个人放进数据库,观察两个输出分布怎样变化现在,我们把刚才的数学证明变成一张可以操作的概率图。我们有两份人工数据库。第一份符合条件的人数:636363第二份只多一位符合条件的人:646464所以:Δf=1\Delta f=1Δf=1你可以改变:隐私参数:ε\varepsilonε观察对应的拉普拉斯分布怎样变化。还可以改变:连续查询次数。观察最基本的隐私预算如何累积。图60-2:相邻数据库的拉普拉斯输出分布蓝色分布中心为63,橙色分布中心为64。两者代表两个假设下分别运行同一随机机制的输出概率密度,而不是同一次运行同时公开两份结果。单次查询隐私参数 ε0.563644353637484可能发布的带噪声人数为了突出分布形状,两条曲线在每次改变ε时统一按峰值归一化显示;图中的纵坐标不是原始概率密度数值。横向宽度反映噪声尺度的变化。拉普拉斯尺度 b=1/ε2.00单次分布最大概率比上界1.649×期望绝对误差 E|Z|2.00 人误差在±2人以内的概率63.2%对同一数据集重复进行多少次独立预算的查询1每次查询ε0.50简单顺序组合的总隐私预算0.50如果这1次各自满足ε=0.50的纯差分隐私,那么基本组合定理给出总隐私参数至多0.50。这只是通用上界,具体机制可能能够得到更紧的分析。更强隐私较小噪声连续十次查询恢复实验只计算理论密度、误差概率与基本预算上界,不访问真实个人数据,也不实际执行私有查询。图像交互本身不属于一套经过审计的差分隐私发布系统。第一次实验:把ε设为0.1此时:b=10b=10b=10两个输出分布相当平缓。中心虽然相差1,但相对于噪声尺度,差别较小。单次概率比上界:e0.1≈1.105e^{0.1}\approx1.105e0.1≈1.105这对应较强的隐私限制。但是,统计结果的期望绝对误差也达到了:101010人。第二次实验:把ε设为2此时:b=0.5b=0.5b=0.5输出更集中于真实计数附近。统计精度通常更好。但允许的概率比上界也更大:e2≈7.389e^2\approx7.389e2≈7.389因此,隐私保证较弱。第三次实验:增加查询次数将:ε=0.5\varepsilon=0.5ε=0.5并选择:10次查询。那么,基本顺序组合给出的总隐私参数上界是:εtotal=10×0.5=5\boxed{ \varepsilon_{\text{total}}=10\times0.5=5 }εtotal=10×0.5=5这意味着:即使每次查询单独都受到差分隐私保护,全部查询联合起来仍然需要分析累积风险。这正是下一幕的核心内容。第十幕:隐私预算——为什么查询十次,比查询一次更加危险?第60章配图现在,我们重新思考2003年Dinur与Nissim的数据库重建问题。他们发现,大量统计查询的联合结果,可能泄露远超单条答案的信息。差分隐私同样需要面对:多次发布之间的累积风险。假设一个数据库每次查询都满足:ε=0.1\varepsilon=0.1ε=0.1如果外部研究者只调用一次,得到一项随机化统计结果。那么,这一次机制具有对应的隐私保证。可是,如果研究者连续调用100次,会怎样?一个直观例子:反复查询同一人数假设真实人数为:636363每次查询返回:Yi=63+ZiY_i=63+Z_iYi=63+Zi其中各次使用新生成的独立拉普拉斯噪声:Zi∼Laplace(0,b)Z_i\sim\operatorname{Laplace}(0,b)Zi∼Laplace(0,b)如果研究者将100次结果取平均:Yˉ=1100∑i=1100Yi\bar Y=\frac1{100}\sum_{i=1}^{100}Y_iYˉ=1001∑i=1100Yi那么:Yˉ=63+1100∑i=1100Zi\bar Y=63+\frac1{100}\sum_{i=1}^{100}Z_iYˉ=63+1001∑i=1100Zi因为噪声均值为0:E[Yˉ]=63E[\bar Y]=63E[Yˉ]=63而每次噪声的方差为:2b22b^22b2如果100次噪声独立,那么平均噪声的方差是:Var(Yˉ−63)=2b2100\boxed{ \operatorname{Var}(\bar Y-63) = \frac{2b^2}{100} }Var(Yˉ−63)=1002b2标准差则变为:2b10\boxed{ \frac{\sqrt2b}{10} }102b因此,反复查询并取平均,可以逐渐抵消一部分随机误差。这说明:如果服务器无限次地对同一统计查询重新生成独立噪声,攻击者就有机会用多次结果估计真实答案。所以,差分隐私系统需要管理查询的累积隐私代价。基本组合定理假设有:kkk项发布。第i项满足:εi\varepsilon_iεi纯差分隐私。在适当的顺序组合条件下,即使后续查询根据之前的输出自适应选择,整个发布过程仍然可以由基本组合定理保证:εtotal=∑i=1kεi\boxed{ \varepsilon_{\text{total}} = \sum_{i=1}^{k}\varepsilon_i }εtotal=i=1∑kεi例如:第一次:ε1=0.2\varepsilon_1=0.2ε1=0.2第二次:ε2=0.3\varepsilon_2=0.3ε2=0.3第三次:ε3=0.5\varepsilon_3=0.5ε3=0.5那么:εtotal=1.0\boxed{ \varepsilon_{\text{total}}=1.0 }εtotal=1.0这是一个通用的上界。某些情况下,更精细的隐私分析能够得到比简单求和更好的界限。隐私预算像什么?可以将:ε\varepsilonε理解成一种隐私损失的记账尺度。每次发布,消耗一部分预算。当累计预算达到预先设定的限制以后,系统就需要停止继续发布,或者采用其他能够符合总体预算约束的分析策略。这并不是说:隐私泄露是一种可以像银行账户余额一样被精确测量的物理量。而是说:差分隐私通过数学定理,为一系列随机机制的联合输出提供一个可计算的最坏情况保证。如果只是重复显示同一个已发布结果呢?这里有一项非常重要的区别。假设服务器第一次查询产生:Y=63+ZY=63+ZY=63+Z然后,把这同一个Y缓存起来。此后研究者反复请求相同结果,服务器只是返回完全相同的Y。那么,这种纯粹重新显示同一输出的操作,不需要因为显示次数增加就重新叠加同样的隐私预算。因为:它没有引入新的数据依赖随机化信息。这属于:Post-processing(后处理)的重要情形之一。但是:如果每次请求都重新生成新噪声,并且使用数据库计算新的随机结果,那么它就是新的发布行为,需要重新分析预算。同时查询很多人的统计图,是不是每个柱子都要花一份ε?也不一定。假设一张直方图有十个类别。每人恰好属于其中一个类别。我们可以将整个直方图看作:一个向量查询。然后分析整个向量的敏感度。对于增加或删除一个人的邻接关系,只有一个类别计数会改变1。因此,整个直方图的:L1L_1L1全局敏感度仍然是:111于是,可以对整个向量使用适当的拉普拉斯机制,以一次:ε\varepsilonε预算发布全部类别。这与分别独立申请十次:ε\varepsilonε查询,不是同一种预算设计。这也说明:怎样组织统计任务,本身就影响差分隐私系统能够提供的效用。第十一幕:直方图与后处理——为什么发布一整张统计表,不一定要为每个数字分别付费?第60章配图 · 来源假设一家学校希望发布学生的兴趣类别分布。为简单起见,每名学生只登记一个主要兴趣。数据库统计如下:兴趣类别真实人数编程40音乐25绘画20运动15总人数:100100100我们希望发布这四个类别的计数。把统计表表示成向量f(D)=[40252015]\boxed{ f(D)= \begin{bmatrix} 40\\25\\20\\15 \end{bmatrix} }f(D)=40252015如果新增一名主要兴趣是编程的学生,那么:f(D′)=[41252015]f(D')= \begin{bmatrix} 41\\25\\20\\15 \end{bmatrix}f(D′)=41252015两者的:L1L_1L1距离为:∥f(D)−f(D′)∥1=∣40−41∣+0+0+0\|f(D)-f(D')\|_1 = |40-41|+0+0+0∥f(D)−f(D′)∥1=∣40−41∣+0+0+0得到:1\boxed11其他类别同理。因此,在每人只贡献一个类别的前提下:Δ1f=1\boxed{\Delta_1 f=1}Δ1f=1对每个分量加入拉普拉斯噪声设:ε=1\varepsilon=1ε=1那么:b=Δ1fε=1b=\frac{\Delta_1f}{\varepsilon}=1b=εΔ1f=1我们可以发布:M(D)=f(D)+[Z1Z2Z3Z4]\boxed{ M(D)=f(D)+ \begin{bmatrix} Z_1\\Z_2\\Z_3\\Z_4 \end{bmatrix} }M(D)=f(D)+Z1Z2Z3Z4其中各个:Zi∼Laplace(0,1)Z_i\sim\operatorname{Laplace}(0,1)Zi∼Laplace(0,1)独立采样。这整个向量机制,就能够满足:ε=1\varepsilon=1ε=1的纯差分隐私。而不是简单地将四个:ε=1\varepsilon=1ε=1逐项相加成4。关键就在于:我们把整个统计表看成一个向量函数,并计算它的整体:L1L_1L1敏感度。如果每个人同时属于多个类别呢?情况就不同了。例如,每人最多可以选择三个兴趣。新增一个人后,可能有三个类别计数同时增加1。于是:Δ1f\Delta_1fΔ1f可能达到3。如果仍然错误地假设敏感度为1,就可能添加不足的噪声。因此,必须先定义每个人允许贡献多少数据,再计算统计函数的敏感度。发布以后出现负数怎么办?拉普拉斯噪声是连续分布。它可能产生负数。例如,某个类别真实人数为0。加上噪声以后可能得到:−1.4-1.4−1.4但人数不能为负。怎么办?可以将已发布的带噪声结果进行:非负截断。例如:c^=max(0,M(D))\boxed{ \hat c=\max(0,M(D)) }c^=max(0,M(D))这属于一种确定性的后处理。后处理不增加差分隐私损失差分隐私有一项非常有价值的性质。如果:M(D)M(D)M(D)已经满足:ε\varepsilonε差分隐私。而:ggg是一个不额外访问原始私有数据库的后处理函数。那么:g(M(D))\boxed{ g(M(D)) }g(M(D))也满足相同的:ε\varepsilonε差分隐私保证。这叫作:Post-processing Immunity(后处理不损害隐私保证)。例如:将带噪声人数四舍五入。将负数截断为0。把带噪声数据制作成图表。在不重新接触私有数据的前提下,这些操作不会额外增加由原始机制产生的隐私损失。但请注意:后处理不增加隐私损失,不意味着它一定提高统计准确性。例如,负值截断可能引入系统性的向上偏差。如果为了让各个类别加总等于一个私有且未经保护的真实总人数,再次读取并使用该真实人数,就不能简单地声称这还是纯粹的后处理。因为它引入了新的私有数据信息。只有使用:公开常数。或者已经受到适当隐私保护的输出。进行计算,才能按照相应后处理规则分析。这项性质为什么如此重要?它使差分隐私机制与数据呈现环节能够分开设计。我们可以先建立受保护的发布结果。再根据需要:绘制统计图。计算比例。整理报表。或者提供不同界面。只要这些操作不重新依赖未经保护的私有数据,就可以保持原有的隐私保证。这种模块化设计,是差分隐私具有实际工程价值的重要原因之一。第十二幕:本地差分隐私——如果连服务器也不应该看到原始回答呢?第60章配图前面的拉普拉斯机制,都假设:服务器拥有原始数据库。外部研究者只能看到经过保护的统计结果。这种模式通常称为:Central Differential Privacy(中心式差分隐私)。它有一个重要前提。用户必须信任数据收集者,至少相信它能够妥善保管和处理未经扰动的原始记录。但是,假设用户根本不愿意把真实属性交给服务器呢?有没有可能:每个人在自己设备上先随机化信息。然后,只发送已经受保护的结果?答案是:可以。这就是:Local Differential Privacy(本地差分隐私,LDP)。重新观察随机应答假设一个用户的真实属性是:x∈{0,1}x\in\{0,1\}x∈{0,1}我们设计机制:以概率:ppp真实回答。以概率:1−p1-p1−p将答案翻转。也就是说:M(x)={x,概率 p1−x,概率 1−pM(x)= \begin{cases} x,&\text{概率 }p\\ 1-x,&\text{概率 }1-p \end{cases}M(x)={x,1−x,概率 p概率 1−p现在,我们希望它满足:ε\varepsilonε本地差分隐私。对于任意两个可能的输入:x,x′x,x'x,x′以及任意输出:yyy要求:Pr[M(x)=y]≤eεPr[M(x′)=y]\Pr[M(x)=y] \le e^\varepsilon\Pr[M(x')=y]Pr[M(x)=y]≤eεPr[M(x′)=y]怎样选择p?对于二元翻转机制,最大概率比是:p1−p\frac{p}{1-p}1−pp假设:p≥12p\ge\frac12p≥21那么只需选择:p1−p=eε\frac{p}{1-p}=e^\varepsilon1−pp=eε解得:p=eε1+eε\boxed{ p=\frac{e^\varepsilon}{1+e^\varepsilon} }p=1+eεeε例如:ε=ln3\varepsilon=\ln3ε=ln3那么:p=34p=\frac34p=43这与第一幕中的简化随机应答例子具有相同的条件概率结构。服务器还能估计真实比例吗?可以。假设全部用户真实回答1的比例为:qqq但服务器只看到随机化后的回答:YYY那么:Pr[Y=1]=pq+(1−p)(1−q)\Pr[Y=1] = pq+(1-p)(1-q)Pr[Y=1]=pq+(1−p)(1−q)整理:Pr[Y=1]=(1−p)+(2p−1)q\boxed{ \Pr[Y=1]=(1-p)+(2p-1)q }Pr[Y=1]=(1−p)+(2p−1)q因此,如果我们从大量随机化回答中估计:Yˉ\bar YYˉ就可以反推:q^=Yˉ−(1−p)2p−1\boxed{ \hat q= \frac{\bar Y-(1-p)}{2p-1} }q^=2p−1Yˉ−(1−p)这里要求:p>12p>\frac12p>21否则分母为0或没有有用的正相关信号。在有限样本下,估计值可能因为随机误差落在0到1范围之外。研究者可以根据任务需要进行相应后处理。本地差分隐私有什么优势?用户不必先将原始二元属性直接提交到服务器,再由服务器统一加噪。每个人可以先在本地执行随机化。服务器收集到的就是随机应答。但这并不等于:服务器不需要任何其他安全措施。例如:设备身份。网络传输。重复上报。恶意客户端。以及长期报告关联。仍然需要单独分析。2014年:RAPPOR2014年,Úlfar Erlingsson、Vasyl Pihur和Aleksandra Korolova发表:RAPPOR: Randomized Aggregatable Privacy-Preserving Ordinal Response该研究将随机应答思想用于客户端统计信息收集,并讨论了其隐私保证、聚合分析与实际实现。[Google Research]这是差分隐私从理论研究走向实际数据收集系统的重要案例之一。中心式与本地式有什么根本区别?图60-3:两种不同的信任模型中心式DP原始可信服务器统计发布前随机化原始记录由受信任方收集,查询结果再经过隐私机制发布。本地式DP设备端随机化收集服务器原始属性先在本地扰动用户在数据离开设备前执行随机化,服务器通常看不到未经扰动的该项原始回答。一般来说,在可比的任务与隐私设定下,本地差分隐私往往需要更大的样本量,才能获得与中心式差分隐私相近的统计精度。因为中心式机制可以先对大量原始记录做聚合,再给聚合结果添加噪声。而本地式机制中,每个人的回答已经先被随机化。因此,两者各自适合不同的信任与数据收集场景。第十三幕:Python实战——从零写出一个带隐私预算的统计查询服务第60章配图现在,我们将本章最重要的数学思想变成程序。只使用Python标准库。实现:拉普拉斯噪声采样。受保护的人数查询。固定人数条件下的平均值查询。分类直方图。以及一个简单的隐私预算账本。最后,我们还会用数值方法检查拉普拉斯机制的概率比。本节是一套:用于理解公式的教学原型。它没有经过完整的安全审计,不应直接作为真实医疗、人口或商业敏感数据的生产级差分隐私服务。第一步:实现拉普拉斯噪声Python标准库没有必须依赖第三方科学计算库才能实现的拉普拉斯采样需求。我们可以利用:Inverse Transform Sampling(逆变换采样)。设:U∼Uniform(−0.5,0.5)U\sim\operatorname{Uniform}(-0.5,0.5)U∼Uniform(−0.5,0.5)那么:Z=−b sgn(U)ln(1−2∣U∣)\boxed{ Z= -b\,\operatorname{sgn}(U) \ln(1-2|U|) }Z=−bsgn(U)ln(1−2∣U∣)就服从尺度为b的拉普拉斯分布。在实际计算中,我们可以使用:python复制代码math.log1p(...)来改善某些接近0的数值计算精度。python复制代码 import math import random import secrets def laplace_noise(scale, rng=None): """ 从Laplace(0, scale)采样。 默认使用操作系统支持的安全随机源。 重要: 这只是教学采样实现,不代表经过 完整浮点安全性审计的生产级DP机制。 """ if scale <= 0 or not math.isfinite(scale): raise ValueError("scale必须是正有限数") if rng is None: rng = secrets.SystemRandom() # 理论逆CDF要求采样点位于开区间(0,1) while True: r = rng.random() if 0 < r < 1: break u = r - 0.5 sign = 1.0 if u >= 0 else -1.0 return ( -scale * sign * math.log1p(-2.0 * abs(u)) ) 第二步:实现ε差分隐私计数对于一人一条记录的二元属性计数,在增加或删除一个人的邻接关系下:Δf=1\Delta f=1Δf=1因此:b=1εb=\frac1\varepsilonb=ε1python复制代码 def private_count(records, epsilon, rng=None): """ 对二元属性记录进行带噪声计数。 假设: 一个人至多贡献一条记录。 相邻数据库差一个人的加入或删除。 每个值只能为0或1。 敏感度: Δf = 1 """ if epsilon <= 0: raise ValueError("epsilon必须大于0") if any(x not in (0, 1) for x in records): raise ValueError("记录必须为0或1") true_count = sum(records) scale = 1.0 / epsilon return true_count + laplace_noise( scale, rng ) synthetic_records = ( [1]*63 + [0]*37 ) noisy_answer = private_count( synthetic_records, epsilon=0.5, ) print("发布结果:", noisy_answer) 每次运行可能获得不同结果。例如:真实计数虽然是63,但发布的数值可能是:62.4。64.7。或者其他值。这正是随机化机制的特征。实际差分隐私保证是对所有可能随机输出的概率分布建立的,不是对某一次抽样结果单独成立的。第三步:实现固定人数下的私有平均值假设:人数:nnn是公开且固定的。每人的数值被限制在:[0,100][0,100][0,100]使用替换一人记录的邻接关系。则:Δxˉ=100n\Delta\bar x=\frac{100}{n}Δxˉ=n100python复制代码 def private_mean_fixed_n( values, epsilon, public_n, lower=0.0, upper=100.0, rng=None, ): """ 公开固定人数条件下的私有平均值。 邻接关系: 固定大小n的数据集中替换一条记录。 假设: n事先公开,不由未经保护的私有输出泄露。 数值先按公开范围进行裁剪。 """ if epsilon <= 0: raise ValueError("epsilon必须大于0") if public_n <= 0: raise ValueError("public_n必须大于0") if len(values) != public_n: raise ValueError("教学数据长度与公开n不一致") if upper <= lower: raise ValueError("上下界错误") bounded = [ min(upper, max(lower, x)) for x in values ] true_mean = sum(bounded) / public_n sensitivity = ( upper - lower ) / public_n scale = sensitivity / epsilon return true_mean + laplace_noise( scale, rng ) ages = [20, 35, 40, 50, 55] answer = private_mean_fixed_n( ages, epsilon=1.0, public_n=5, ) print("带噪声平均年龄:", answer) 这项程序也提醒我们:同样的ε,不意味着同样的误差。平均值噪声的尺度还取决于:公开人数。以及:每条记录允许的数值范围。如果研究者事先不限制数据范围,就不能直接使用这里的有限敏感度结论。第四步:一次性发布整张分类直方图下面实现:L1L_1L1敏感度为1的直方图发布。python复制代码 def private_histogram( labels, categories, epsilon, rng=None, ): """ 一人只属于一个类别。 增删一人邻接关系下: 整个向量的L1敏感度为1。 独立地给每个类别计数加入 Laplace(0, 1/epsilon) 整个向量按一次epsilon预算发布。 """ if epsilon <= 0: raise ValueError("epsilon必须大于0") if len(set(categories)) != len(categories): raise ValueError("类别不能重复") counts = { category: 0 for category in categories } for label in labels: if label not in counts: raise ValueError("存在未知类别") counts[label] += 1 if rng is None: rng = secrets.SystemRandom() scale = 1.0 / epsilon return { category: ( counts[category] + laplace_noise(scale, rng) ) for category in categories } interests = ( ["编程"]*40 + ["音乐"]*25 + ["绘画"]*20 + ["运动"]*15 ) hist = private_histogram( interests, ["编程", "音乐", "绘画", "运动"], epsilon=1.0, ) for name, value in hist.items(): print(name, round(value, 2)) 注意:发布以后,这四个带噪声计数之和,并不一定正好等于100。这是因为各类别分别加入了随机噪声。如果确实需要进行一致性调整,可以设计仅依赖已经发布的受保护数值和公开约束的后处理。但如果为了强制总和等于100而读取了未经保护的真实私人总人数,就需要重新分析整个发布机制。第五步:实现隐私预算账本我们希望设置:εmax=1.5\varepsilon_{\max}=1.5εmax=1.5每执行一次查询,就扣除本次指定的隐私预算。python复制代码 class PrivacyBudget: """ 仅演示纯DP的基本顺序组合。 不包含完整的多用户身份管理、 贡献界定、持久化账本和并发控制。 """ def __init__(self, epsilon_limit): if epsilon_limit <= 0: raise ValueError("预算必须大于0") self.limit = float(epsilon_limit) self.spent = 0.0 @property def remaining(self): return max(0.0, self.limit - self.spent) def release_count(self, records, epsilon): if epsilon <= 0: raise ValueError("epsilon必须大于0") if self.spent + epsilon > self.limit + 1e-12: raise RuntimeError("隐私预算不足") result = private_count( records, epsilon=epsilon, ) self.spent += epsilon return result ledger = PrivacyBudget( epsilon_limit=1.5 ) for i in range(3): result = ledger.release_count( synthetic_records, epsilon=0.5, ) print( f"第{i+1}次发布:", round(result, 3), "剩余预算:", round(ledger.remaining, 3), ) try: ledger.release_count( synthetic_records, epsilon=0.5, ) except RuntimeError as error: print("第四次查询被拒绝:", error) 这样,就可以在教学意义上观察:预算怎样随查询次数减少。以及:为什么系统需要拒绝超出预算的请求。但它还远远不是完整的生产级隐私账本。实际系统还需要考虑:多个查询接口共享预算。并发请求导致的重复扣账。用户重复贡献的数据。是否采用纯DP或近似DP。以及数据库版本变化等情况。第六步:验证拉普拉斯密度的概率比最后,我们使用数值计算,检查两个相邻计数:636363和:646464的输出密度比。python复制代码 def laplace_pdf(y, center, scale): return ( math.exp(-abs(y-center)/scale) / (2*scale) ) epsilon = 0.5 scale = 1 / epsilon bound = math.exp(epsilon) for i in range(201): y = 45.0 + i*0.2 p63 = laplace_pdf( y, 63.0, scale ) p64 = laplace_pdf( y, 64.0, scale ) ratio = p63 / p64 assert ratio <= bound + 1e-12 assert ratio >= 1/bound - 1e-12 print("数值密度比检查通过") print("理论上界:", bound) 预期:text复制代码数值密度比检查通过 理论上界: 1.6487212707...这里的程序只检查了有限个采样点。它本身并不是差分隐私的完整数学证明。真正的保证,来自第八幕对所有实数输出位置及任意输出事件所作的推导。这项区分非常重要。程序测试用来发现实现错误;数学证明用于给出超越有限测试样本的普遍保证。第十四幕:2016年,差分隐私走进神经网络训练——DP-SGD的诞生第60章配图现在,我们重新回到第56章。那一章,我们研究:Stochastic Gradient Descent(SGD,随机梯度下降)。假设神经网络参数为:θ\thetaθ对训练数据计算损失:L(θ)L(\theta)L(θ)然后使用:θt+1=θt−η∇L(θt)\boxed{ \theta_{t+1} = \theta_t-\eta\nabla L(\theta_t) }θt+1=θt−η∇L(θt)不断更新参数。但现在出现了一项新的隐私问题。训练出来的模型,会不会泄露训练数据?假设一个模型使用大量私人记录训练。即使训练完成后,我们不公开原始数据,模型参数或模型输出仍然可能受到训练样本的影响。某些情况下,攻击者可能尝试判断:某个人的记录是否参与了训练。甚至设法恢复一些训练样本的特征。这种风险与:Membership Inference(成员推断)以及其他训练数据泄露研究有关。因此,研究者开始思考:能不能在训练神经网络时,就限制每条训练记录对最终模型的影响?2016年:Abadi等人的DP-SGD研究2016年,Martín Abadi、Andy Chu、Ian Goodfellow、H. Brendan McMahan、Ilya Mironov、Kunal Talwar与Li Zhang发表:Deep Learning with Differential Privacy《使用差分隐私进行深度学习》。论文发表于ACM CCS 2016,第308—318页。[Google Research]研究提出了一套用于神经网络训练的差分隐私方法,并研究怎样在多次随机梯度更新中,对隐私损失进行更精细的分析。其核心训练算法后来广泛称为:Differentially Private SGD(DP-SGD)。普通SGD的问题在哪里?假设一个批次包含三条样本。每条样本对模型参数产生一个梯度:g1,g2,g3g_1,g_2,g_3g1,g2,g3通常,我们希望将它们组合后,更新模型参数。但是:不同样本的梯度大小可能差别很大。某一条特殊样本可能产生非常大的梯度。于是,它对本轮参数更新的影响就可能特别明显。如果我们希望限制单条记录的影响,需要先控制:每条样本梯度能够有多大。第一步:逐样本梯度裁剪设:C>0C>0C>0是L2范数上限。对于第i条样本的梯度:gig_igi执行:g~i=gimin(1,C∥gi∥2)\boxed{ \tilde g_i= g_i \min\left( 1,\frac{C}{\|g_i\|_2} \right) }g~i=gimin(1,∥gi∥2C)这叫作:Per-example Gradient Clipping(逐样本梯度裁剪)。假设:gi=(3,4)g_i=(3,4)gi=(3,4)那么:∥gi∥2=5\|g_i\|_2=5∥gi∥2=5如果:C=2C=2C=2就需要将梯度缩放到长度2。因此:g~i=(3,4)×25\tilde g_i = (3,4)\times\frac25g~i=(3,4)×52得到:g~i=(1.2,1.6)\boxed{ \tilde g_i=(1.2,1.6) }g~i=(1.2,1.6)新梯度的范数:1.22+1.62=2\sqrt{1.2^2+1.6^2}=21.22+1.62=2没有超过设定上限。为什么必须逐样本裁剪?因为如果先把整个批次所有梯度相加,再统一裁剪,就不能直接控制其中某一条样本在聚合前的最大贡献。而DP-SGD需要明确:一条训练记录的变化,最多能怎样影响参与发布或参数更新的梯度统计量。因此,逐样本贡献控制具有重要作用。第二步:给聚合梯度加入高斯噪声在完成裁剪以后,模型对一批样本的梯度进行聚合。然后添加经过校准的高斯噪声:G~=∑i∈Bg~i+N(0,σ2C2I)\boxed{ \tilde G = \sum_{i\in B}\tilde g_i + \mathcal N(0,\sigma^2C^2I) }G~=i∈B∑g~i+N(0,σ2C2I)在一种常见的固定批大小写法中,再将结果除以批大小:gˉ=G~∣B∣\bar g=\frac{\tilde G}{|B|}gˉ=∣B∣G~最后:θt+1=θt−ηgˉ\boxed{ \theta_{t+1}=\theta_t-\eta\bar g }θt+1=θt−ηgˉ但请特别注意:这里的公式只是展示DP-SGD的主要计算结构。不能仅凭选择一个σ,就直接宣布训练满足某个指定的ε。因为隐私保证还取决于:数据邻接定义。逐样本或逐用户贡献界限。抽样方式。批次构造。迭代次数。以及隐私损失的累计分析方法。第三步:隐私预算跟踪神经网络不会只更新一次。它可能迭代:几千步。几万步。甚至更多。因此,研究者必须计算:经过全部训练以后,最终模型满足什么隐私参数?DP-SGD通常使用:(ε,δ)(\varepsilon,\delta)(ε,δ)形式的差分隐私保证。其中:δ\deltaδ是额外的加法松弛参数。什么是近似差分隐私?其定义为:Pr[M(D)∈S]≤eεPr[M(D′)∈S]+δ\boxed{ \Pr[M(D)\in S] \le e^\varepsilon\Pr[M(D')\in S] + \delta }Pr[M(D)∈S]≤eεPr[M(D′)∈S]+δ这称为:(ε,δ)(\varepsilon,\delta)(ε,δ)-Differential Privacy。如果:δ=0\delta=0δ=0就退回我们前面讨论的纯差分隐私。如果:δ>0\delta>0δ>0则允许一个受:δ\deltaδ控制的加法概率差异。但不要将δ不加限定地解释成:“隐私失效的概率恰好为δ。”它在定义中首先是一项对任意输出事件的加法松弛项。它与不同统计或耦合解释之间的关系,需要更加谨慎地分析。为什么DP-SGD意义重大?因为它将差分隐私从简单统计查询,推进到复杂的机器学习训练过程。我们不再只是保护:一个人数。一个平均值。或者一张直方图。还希望保护:一整套通过大量私人训练数据学习出来的模型参数。这意味着:第56章的梯度下降。第57章的反向传播。以及第60章的差分隐私。终于在同一项算法中汇合。但必须强调:DP-SGD通常需要在模型性能、训练效率和隐私保护之间作出权衡。梯度裁剪可能引入偏差。随机噪声也可能降低优化精度。对于某些任务,较强隐私保护可能需要更多训练数据或不同的模型设计。因此,它并不是免费的安全增强。它是一种可以分析隐私代价,但也必须承担统计与计算成本的训练方法。第十五幕:2020年美国人口普查——当差分隐私走出论文,进入真实公共统计第60章配图现在,我们来到差分隐私最重要的大规模应用案例之一。美国2020年人口普查。人口普查是一项极其复杂的公共数据工程。它需要收集和整理:人口数量。年龄。地理分布。住房信息。以及其他用于公共管理与统计分析的数据。这些结果具有重要公共价值。但单个人口普查回答,同样需要受到保密保护。为什么传统匿名化方法受到挑战?因为现代数据环境与几十年前已经完全不同。大量公开或商业数据可以相互关联。计算机也拥有越来越强的搜索与推断能力。即使某项统计资料没有直接公开姓名,如果不同统计表之间存在足够多的关联,外部研究者仍可能进行重建与匹配。美国人口普查局在解释其隐私保护改革时,明确指出:现代数据环境使传统披露防护方法面临新的风险。因此,人口普查局为部分2020年人口普查数据产品,采用了以差分隐私为基础的:Disclosure Avoidance System(披露防护系统,DAS)。 [Census.gov]这是不是直接给每个统计数字添加一个拉普拉斯噪声?不是。真实人口普查数据发布系统远比本章的教学例子复杂。它需要处理:地区层级。人口类别。不同统计表之间的一致性。部分法律或业务约束。以及统计效用与隐私保证之间的权衡。因此,不能用一行:python复制代码count + laplace_noise(...)来概括美国人口普查局实际采用的完整算法。人口普查局2023年的公开资料,专门解释了为什么采用差分隐私,以及相关披露防护方法怎样用于不同数据产品。[Census.gov]是否所有2020年人口普查数字都经过同样的差分隐私处理?也不是。人口普查局明确指出:某些数据产品采用了差分隐私框架下的披露防护措施。而用于国会席位分配的州级人口总数等数据,存在不同的发布要求,并没有按照普通受扰动统计表的方式进行噪声处理。因此,不能笼统地说:“2020年美国人口普查的全部公开数字都统一添加了差分隐私噪声。”具体还需要区分:数据产品。披露防护算法。以及相关制度要求。[Census.gov]这项应用说明了什么?差分隐私并不只是理论计算机科学家在论文中写出的一个公式。它已经成为公共统计机构考虑隐私风险与数据发布效用时,可以采用的重要数学框架。但是,将它用于真实社会数据,也意味着必须面对:小群体统计结果的精度。不同地理区域之间的一致性。公共政策对统计数字的依赖。以及社会公众对隐私保护的理解。在一些人口较少的地区,噪声可能对某个统计结果产生较明显的相对影响。而在大样本统计中,同等绝对规模的噪声可能相对较小。所以:差分隐私的实际部署,既是数学问题,也是统计工程和公共治理问题。2025年:NIST发布评估指南2025年3月6日,美国国家标准与技术研究院(NIST)发布:Guidelines for Evaluating Differential Privacy Guarantees《差分隐私保证评估指南》。编号:NIST SP 800-226。作者为Joseph Near、David Darais与Naomi Lefkovitz。这份指南强调,在真实系统中评价差分隐私,需要考虑多种可能破坏保证的实施风险,而不只是查看是否出现了某个ε参数。[NIST]它提醒我们:理论公式虽然重要,但生产级隐私保护需要整套可信的工程实现与评估方法。从2006年到2025年,这项研究已经走过近二十年。而最重要的实践教训之一,恰恰是:拥有一个正确的隐私定义,并不等于任意声称使用该定义的软件系统都已经获得相应保证。第十六幕:差分隐私究竟承诺了什么,又没有承诺什么?第60章配图现在,我们已经完整研究了:随机应答。数据库重建。差分隐私定义。敏感度。拉普拉斯机制。隐私预算。局部差分隐私。以及DP-SGD。最后,还需要认真讨论它的边界。因为差分隐私经常被误解成:一种只要启用,就能够保护所有个人信息的万能算法。事实并非如此。第一:差分隐私不等于加密加密主要解决:没有正确密钥的人,是否能够解读受保护的信息?差分隐私主要解决:根据某个邻接定义,改变一名个体的数据贡献,会使公开输出的概率分布发生多大变化?两者关注的问题不同。即使统计结果满足差分隐私,原始数据库仍然需要:访问控制。安全存储。传输保护。以及其他信息安全措施。第二:差分隐私不等于完全匿名一个差分隐私机制,并不是在保证:没人能够识别任何一个人。它保证的是:符合特定定义的相邻数据集,在随机机制输出上的可区分程度受到限制。某些总体规律仍然会被公开。例如:某种疾病与年龄之间存在统计关系。攻击者可能将这些总体规律,与此前掌握的个人信息相结合,形成预测。这并不自动意味着差分隐私保证被违反。第三:差分隐私不保证模型永远不会说出敏感内容如果一个模型通过未经保护的数据渠道接收到私人信息,或者在生成时直接查询某个未经保护的数据库,那么,仅仅因为它的部分训练流程曾经使用差分隐私,并不能保证整个应用系统的所有输出都受到相同保护。必须明确:差分隐私保护的是哪个机制?哪些数据输入?哪些输出?以及哪些查询过程?安全边界必须与数学保证的边界一致。第四:ε越小通常越强,但不能只看ε还需要考虑:δ\deltaδ以及:邻接定义。保护单位。重复贡献。总预算。抽样方法。与机制实现。两个系统即使都声称:ε=1\varepsilon=1ε=1也不一定具有完全可比的隐私属性。例如:一个保护的是单条交易记录。另一个保护的是一个用户的全部交易行为。两者保护单位不同。不能仅根据ε相同,就断定它们提供相同的个人级保护。第五:差分隐私不能自动保证数据分析有用假设某个群体只有:3个人。我们希望发布:符合某个条件的人数。如果采用:ε=0.1\varepsilon=0.1ε=0.1且敏感度为1。那么拉普拉斯噪声尺度:b=10b=10b=10远大于真实计数的典型范围。虽然机制可以提供相应的隐私保证,但单次输出的统计效用可能很差。因此,真实系统必须根据:样本规模。统计任务。以及可接受的误差范围。认真设计查询。有时,不发布某项过细的统计结果,反而是更适当的决定。第六:隐藏姓名,并不是差分隐私删除姓名。删除身份证号。将年龄分组。或者只公布部分字段。这些数据处理方式可能有用。但它们并不会因为叫作“匿名化”,就自动满足差分隐私定义。反过来,差分隐私也不只是“删除姓名以后再加一点随机数”。它要求对最终发布机制建立明确的数学保证。第七:一次合规的数学机制,不保证完整的软件系统没有漏洞例如:随机数生成器实现不正确。浮点计算造成可利用的分布偏差。敏感度假设与真实数据不一致。接口同时泄露未经保护的记录数。隐私预算没有在多个服务之间统一管理。这些都可能使实际系统偏离理论保证。因此,成熟的隐私保护需要:数学证明。实现测试。安全审计。统计效用分析。以及运行时的持续治理。NIST的2025年指南,正是从这种更完整的工程视角,讨论如何评价差分隐私保证。[NIST]本章标题有没有一个必须澄清的地方?有。我们把本章称为:《知道很多,却不泄露任何人》。这是一个希望表达隐私保护目标的文学化标题。但严格来说,差分隐私并不承诺:任何人永远不会获得任何有关个体的信息。它承诺的是:在明确的邻接关系、随机机制及隐私参数下,某位个体数据贡献的变化,对公开输出分布造成的额外影响受到可证明的限制。这比一句笼统的:“我们保证不会泄露任何信息。”更加精确,也更有科学价值。因为一项真正可靠的隐私技术,不应该只告诉用户:我们非常重视你的隐私。它还应该能够回答:我们究竟保证了什么?在什么假设下保证?哪些情况仍然不属于保证范围?第十七幕:再做一个实验——个人回答越难辨认,统计研究需要多少样本?第60章配图我们已经比较过:ε变小,拉普拉斯噪声变大。现在,再研究本地差分隐私中的一个问题。如果每个人先在设备上随机翻转自己的回答,服务器最终需要多少样本,才能比较准确地估计真实比例?假设总体中具有某种属性的人占:qqq我们使用第十二幕的二元随机应答机制。真实回答概率:p=eε1+eεp=\frac{e^\varepsilon}{1+e^\varepsilon}p=1+eεeε每个人以概率p报告真实值。以概率:1−p1-p1−p报告相反值。服务器只看到随机应答。最终收到的“是”会占多少?r=(1−p)+(2p−1)q\boxed{ r=(1-p)+(2p-1)q }r=(1−p)+(2p−1)q如果:ε\varepsilonε很小,那么:ppp接近:0.50.50.5于是:2p−12p-12p−1接近0。那么:rrr就会接近:0.50.50.5不论真实比例q是多少,服务器都会看到大量近似随机的回答。隐私保护较强。但统计信号也变得很弱。统计误差怎样变化?假设n名用户的真实二元属性固定,所有用户独立执行相同的随机应答机制。服务器使用:q^=Yˉ−(1−p)2p−1\hat q= \frac{\bar Y-(1-p)}{2p-1}q^=2p−1Yˉ−(1−p)估计真实比例。可以推得:E[q^]=qE[\hat q]=qE[q^]=q并且:Var(q^)=p(1−p)n(2p−1)2\boxed{ \operatorname{Var}(\hat q) = \frac{p(1-p)} {n(2p-1)^2} }Var(q^)=n(2p−1)2p(1−p)因此:Std(q^)=p(1−p)/n2p−1\boxed{ \operatorname{Std}(\hat q) = \frac{\sqrt{p(1-p)/n}} {2p-1} }Std(q^)=2p−1p(1−p)/n现在,让我们改变样本数量和ε,观察这项统计误差。图60-4:本地随机应答的隐私与统计精度固定一批拥有某个真实二元属性的用户,各用户独立随机翻转回答。图中显示理论期望,不是真实个人数据或随机生成的实际调查。本地隐私参数ε0.8参与调查人数n1,000模拟群体的真实“是”比例35%真实“是”比例35.0%服务器预期收到“是”的比例44.3%真实回答概率p69.0%反推比例的标准误差3.85个百分点按正态近似的1.96倍标准误差范围:约±7.54个百分点。它只描述这一简化随机应答估计器在独立随机化下的统计波动,不是差分隐私中的ε或δ,也不是对任何有限样本都精确成立的95%置信区间。强隐私增加样本弱隐私第一次实验:较强的本地隐私设:ε=0.2\varepsilon=0.2ε=0.2此时:p≈0.55p\approx0.55p≈0.55即:一个人有接近45%的概率报告与真实属性相反的结果。服务器收到的回答,因而非常接近随机回答。要从中恢复真实群体比例,就需要较多样本。第二次实验:增加样本量将人数从:100010001000改为:500050005000在其他参数不变时,估计标准误差按:1n\frac1{\sqrt n}n1的规律缩小。这意味着:即使每个人的回答都具有较强随机性,只要参与人数足够多,研究者仍有机会从大量回答中获得有用的总体统计。第三次实验:提高ε将:ε\varepsilonε增大。用户报告真实值的概率:ppp随之增加。服务器接收到的回答更接近真实属性。统计估计也通常更加精确。但代价是:单个用户的真实属性与上传回答之间具有更明显的统计联系。这正是本地差分隐私的核心权衡。每个人发送的信息越难辨认,往往就需要更多参与者,才能从总体中恢复同样精度的统计规律。尾声:一项成熟的算法,不只应该知道自己能做到什么,还应该知道自己不应该暴露什么第60章配图1965年。沃纳研究怎样让人们回答敏感调查,同时不必让调查者知道每个人的真实答案。他的随机应答方法,展示了一种极具价值的思想。单个人的回答可以经过随机化。但研究者仍然有机会从大量回答中,估计群体的统计规律。1977年。Dalenius提出统计数据库的隐私理想。人们希望公开有用的统计信息,却不希望这些信息伤害个人。但这个目标并不像它听起来那么容易定义。因为统计数据的作用,本来就是让人获得原先不知道的知识。有些新知识可能涉及群体规律。而群体规律,又可能结合外部信息,被用于推测个体。2003年。Dinur与Nissim研究大量统计查询的联合风险。他们发现,即使单次结果允许带有一定误差,在相应条件下,大量查询也可能使数据库记录被重建。这揭示了统计隐私的一项深刻困难。我们不能只检查某一项答案看起来是否安全。还必须分析全部查询的联合影响。2006年。Dwork、McSherry、Nissim与Smith在TCC发表关于敏感度与噪声校准的研究。同年,Dwork又发表《Differential Privacy》。隐私问题获得了新的数学表述。研究者不再尝试承诺:任何人都绝对不能从统计结果中学到任何有关个体的知识。而是提出:如果某个人的数据加入或退出数据库,外部观察者看到的随机输出分布,不应该发生超过明确界限的变化。于是,隐私成为可以形式化讨论的性质。可以证明。可以组合。可以分析误差。也可以根据不同的应用任务,设计新的随机化机制。2014年,本地随机应答技术获得新的工程应用。2016年,差分隐私研究进一步进入深度学习训练。研究者开始通过逐样本梯度裁剪、随机噪声和隐私会计,对模型训练过程中的个体贡献进行分析。到了2020年美国人口普查相关统计产品的发布,差分隐私更进一步进入大规模公共数据治理。这项技术的应用,已经远远超出一张小小的统计表。一项极其重要的思想转变过去,我们经常将算法能力理解成:速度。准确率。存储效率。预测能力。以及处理更大规模数据的能力。但隐私保护研究提醒我们:能力越强,能够推断的信息也可能越多。一项数据库系统,可以越来越高效地查询数据。一项机器学习模型,可以越来越准确地识别规律。一项统计程序,可以从越来越多的变量中恢复隐藏信息。然而,我们不应该简单地把:“能够计算出来。”等同于:“应该毫无限制地公开出来。”差分隐私为这种区分提供了一种数学工具。它尝试让系统能够回答:我们希望了解总体中的什么规律?一位个体的参与,会改变多少可能被公开的信息?我们愿意为统计准确性付出多少隐私预算?又应该怎样在多次分析中限制累积风险?这些问题不是通过让计算机少学一点,就能自动解决的。它们需要:数学定义。统计设计。安全工程。以及明确的责任边界。算法不只是让我们获得知识的方法,也可以成为限制知识获取代价的方法。第60章的五个核心公式1. 纯差分隐私的定义Pr[M(D)∈S]≤eεPr[M(D′)∈S]\boxed{ \Pr[M(D)\in S] \le e^\varepsilon\Pr[M(D')\in S] }Pr[M(D)∈S]≤eεPr[M(D′)∈S]约束相邻数据库对应的输出事件概率差异。2. 全局敏感度Δf=maxD∼D′∣f(D)−f(D′)∣\boxed{ \Delta f= \max_{D\sim D'} |f(D)-f(D')| }Δf=D∼D′max∣f(D)−f(D′)∣量化改变一个人的贡献,最多能使真实统计结果变化多少。3. 拉普拉斯机制M(D)=f(D)+Laplace(0,Δfε)\boxed{ M(D)=f(D)+\operatorname{Laplace} \left(0,\frac{\Delta f}{\varepsilon}\right) }M(D)=f(D)+Laplace(0,εΔf)根据敏感度和隐私参数,校准噪声尺度。4. 基本顺序组合εtotal=∑iεi\boxed{ \varepsilon_{\mathrm{total}} = \sum_i\varepsilon_i }εtotal=i∑εi为多次发布提供一个通用的纯差分隐私预算上界。5. 近似差分隐私Pr[M(D)∈S]≤eεPr[M(D′)∈S]+δ\boxed{ \Pr[M(D)\in S] \le e^\varepsilon\Pr[M(D')\in S]+\delta }Pr[M(D)∈S]≤eεPr[M(D′)∈S]+δ通过额外的加法松弛参数δ,表达另一类广泛使用的隐私保证。这五个公式分别回答:隐私保护的目标究竟是什么?一个人的数据最多会改变多少真实统计结果?怎样利用随机机制获得可证明的保护?当系统需要连续发布许多结果时,风险怎样累积?以及,当我们采用更加一般的随机机制时,怎样表达相应的隐私保证?而这些问题也共同提醒我们:数学保证的价值,来自它对适用范围、参数和前提条件的清晰约束。第六篇正式完结:《会学习的算法》第60章配图回顾第六篇,我们从1847年的数学研究,走到了现代机器学习与隐私保护。第二季 · 第六篇 · 第56—60章会学习的算法第56章沿着山坡寻找最低点:梯度下降从柯西到随机梯度下降,研究参数怎样根据局部梯度不断改善。第57章错误怎样穿越一层层神经元:反向传播利用链式法则和反向模式自动微分,为复杂模型中的大量参数计算梯度。第58章让机器记住昨天:循环网络与长短期记忆让隐藏状态沿时间传递,研究长期依赖、BPTT与LSTM门控记忆。第59章不必记住全部,只需找到重要的部分:注意力机制从神经机器翻译软对齐,走向QKV、多头注意力及Transformer。第60章知道很多,却不泄露任何人:差分隐私的数学承诺在利用数据发现规律的同时,以敏感度、随机化和隐私预算约束个体信息的额外暴露风险。这五章似乎来自不同领域。数值优化。自动微分。序列建模。注意力机制。数据隐私。但它们之间存在一条非常明确的思想联系。首先,我们希望机器能够根据数据不断改善参数。于是,研究梯度下降。接着,我们发现复杂模型拥有太多参数,需要一种高效的求导方法。于是,研究反向传播。然后,我们希望模型能够利用连续输入中的历史信息。于是,研究循环神经网络和LSTM。后来,我们发现,不必要求模型将所有有用信息都压缩进同一条记忆通道。于是,研究注意力机制与Transformer。最后,当模型开始能够更充分地使用大规模数据,我们也必须认真思考:这些信息的利用,会不会给个体带来新的风险?于是,研究差分隐私。前四章讨论机器怎样更有效地学习;最后一章讨论怎样为数据的使用建立可证明的限制。这使第六篇拥有了一个完整的主题。学习能力与信息责任,需要一起发展。第二季终章:算法的故事,讲到这里究竟讲述了什么?从第31章到第60章。我们已经走过整整三十章。算法不再只是某一道编程题目里的几行代码。它开始成为通信系统在噪声中恢复消息的方法。成为生物学家从分子序列中研究生命历史的方法。成为机器学习系统根据误差调整参数的方法。也成为统计机构尝试保护个人数据的方法。但这些故事所面对的问题,其实有着深刻的共同点。我们拥有的信息,往往并不完整。观测可能受到噪声干扰。过去的真实状态可能无法直接看见。数据可能太多,无法逐项穷举。可供使用的计算资源,也永远有限。于是,我们需要算法。它通过数学结构,将复杂问题拆成可以处理的部分。通过概率模型,表达不确定性。通过动态规划,避免重复求解。通过图论,组织复杂关系。通过梯度,调整模型参数。通过注意力,选择当前相关的信息。也通过隐私机制,限制某个个体的数据贡献对公开结果造成的影响。在整个过程中,最值得珍惜的并不是某个公式看起来有多神奇。而是它能够回答:为什么这样计算?为什么能够保证正确,或者在什么条件下正确?为什么这种方法能够比以前更有效?它在哪些情况下会失败?以及,当我们将它用于真实世界时,会产生什么影响?真正理解一种算法,不只是知道怎样执行它,还要理解它为什么成立、适合解决什么问题,以及它的保证在哪里结束。历史档案:差分隐私的关键研究节点年份研究者与成果历史意义1965年Stanley L. Warner,随机应答利用随机机制,使敏感调查在个体回答受到保护时仍具有统计价值1977年Tore Dalenius,统计披露控制研究提出有关个人信息披露的一项重要隐私理想2003年6月Irit Dinur与Kobbi Nissim,数据库重建揭示大量近似统计答案联合起来可能恢复私人记录2005年Blum、Dwork、McSherry、Nissim,SuLQ研究发展隐私统计查询与数据分析框架2006年3月Dwork、McSherry、Nissim、Smith,敏感度与噪声校准通过敏感度与输出不可区分性,构造并分析具有严格保证的随机机制2006年7月Cynthia Dwork,Differential Privacy系统阐述隐私定义及其相对于绝对披露预防目标的意义2014年Dwork与Aaron Roth,差分隐私算法基础专著系统整理差分隐私的定义、机制、组合定理和算法基础2014年Erlingsson、Pihur、Korolova,RAPPOR研究客户端随机应答及本地隐私统计收集2016年Abadi等,差分隐私深度学习推动DP-SGD与神经网络训练中的隐私会计研究2020—2023年美国人口普查局的差分隐私数据发布实践将差分隐私框架应用于重要公共统计产品2025年3月6日NIST SP 800-226提供评价真实差分隐私系统及其保证的实践指南主要参考文献与一手史料◇1965年 · Warner的随机应答原始研究Randomized Response: A Survey Technique for Eliminating Evasive Answer Bias《Journal of the American Statistical Association》第60卷第309期,第63—69页。随机化敏感调查回答的重要历史来源。◇2003年 · 数据库重建的原始论文Dinur & Nissim — Revealing Information while Preserving Privacy论文完整PDFPODS 2003,第202—210页。研究大量带噪声子集求和查询与数据重建之间的数学关系。◇2006年3月 · 本章最重要的机制论文Dwork、McSherry、Nissim、Smith — Calibrating Noise to Sensitivity in Private Data Analysis作者提供的完整论文PDFTCC 2006,第265—284页。重点核查敏感度、指数型噪声、输出不可区分性、交互查询及向量统计分析。◇2006年7月 · 差分隐私定义论文Cynthia Dwork — Differential Privacy原论文PDFICALP 2006,第1—12页。解释隐私参与风险、外部辅助信息,以及为什么绝对阻止个人信息推断的目标存在根本限制。◇2014年 · 差分隐私算法基础Dwork & Roth — The Algorithmic Foundations of Differential Privacy《Foundations and Trends in Theoretical Computer Science》第9卷,第211—407页。用于系统理解敏感度、拉普拉斯机制、组合性质和隐私分析。◇2014年 · RAPPOR本地隐私技术Erlingsson、Pihur、Korolova — RAPPORACM CCS 2014。讨论如何利用随机应答进行客户端数据统计收集和隐私分析。◇2016年 · 差分隐私深度学习Abadi等 — Deep Learning with Differential Privacy原始研究预印本ACM CCS 2016,第308—318页。重点研究逐样本梯度裁剪、随机噪声与深度学习训练中的隐私分析。◇2020年人口普查 · 官方实践资料美国人口普查局 — Why the Census Bureau Chose Differential Privacy人口普查局披露防护技术说明用于核查差分隐私为何被应用于部分2020年人口普查数据产品,以及相关发布范围与例外。◇2025年 · NIST差分隐私评估指南NIST SP 800-226 — Guidelines for Evaluating Differential Privacy Guarantees2025年3月6日发布。用于理解差分隐私部署中的保护单位、机制假设、参数选择与实施风险。**史实与教学重构说明:**1965年Warner随机应答、1977年Dalenius隐私目标、2003年Dinur–Nissim数据库重建、2006年差分隐私论文、2014年RAPPOR、2016年DP-SGD及人口普查局的实际应用,均有相应的原始文献或官方资料支持。本章开篇医院场景、人数为63与64的相邻数据库、各类人工统计表和问卷,均属教学重构,不是某个真实患者数据库的记录。本章的概率推导建立在明确的邻接关系、敏感度和理想随机机制假设下。互动实验使用理论密度与人工数据,不处理真实个人信息;Python程序展示基本机制,不代表通过了生产级差分隐私安全验证。差分隐私的严格目标是限制个体数据贡献对输出分布的影响,而不是承诺任何个体信息在任何场景下都绝对不可能被推断。《算法的故事》第二季 · 终卷三十章的终点,也是下一段算法历史的起点第60章配图算法的故事,并不会因为某一种技术成为时代焦点,就停止向前。在排序、搜索、图论与动态规划之后,人类仍然需要研究。在通信、密码学、生物信息学与机器学习之后,人类依然会面对新的计算问题。有些问题来自更大的数据。有些来自更加复杂的现实环境。还有些,来自我们对算法本身提出了更高的要求。我们希望它更加准确。更加高效。更加可靠。也更加清楚地知道自己的限制。或许,算法史中最值得反复研究的,不是哪一种算法最终成为最流行的技术。而是科学家在面对原本无法解决的问题时,怎样找到一种新的数学结构。怎样提出可以被检验的假设。怎样将一种直觉,转化为程序。再怎样通过实验、证明与后来的批评,让它逐渐成熟。算法的历史,是人类不断学习怎样思考复杂问题的历史。而每一个真正重要的算法,都让我们比以前多了一种理解世界的方法。——《算法的故事》第二季 · 第60章 完《算法的故事》第二季 · 全三十章(第31—60章)完结。If you want, I can:继续详解拉普拉斯机制及其数学推导讲解隐私预算及其在多次查询中的作用展示差分隐私数学不等式的具体应用示例上一章第二季目录