Programming Differential Privacy 阅读参考(part 4)
Programming Differential Privacy 阅读参考(part 4)
Programming Differential Privacy 链接
ch10 指数机制
拉普拉斯机制和高斯机制都针对数值型回复,直接对回复的结果添加噪声。如果希望得到一个准确的结果(即结果中没有添加噪声),并同时保证DP,可以使用指数机制(exponential mechanism)。分析者定义一个备选的回复集合,以及一个评分函数(scoring function)可以输出set中每个element的分数。指数机制通过返回得分接近最大的结果来实现DP保护(即可能不是分数最高的那个结果)
指数机制满足ε-DP:
- 分析者选择一个可能的输出集合R
- 分析者指定一个全局敏感度为Δu的评分函数 u: D*R(set)->R(实数)
- 指数机制输出r∈R的概率与 exp( εu(x,r) / 2Δu )成正比
指数机制总是会输出集合R中的一个menber,特别适用于结果属于一个有限集合,或者添加噪声的结果不可用/没有意义(e.g. 选择冲突最少的会议日期)的场景
指数机制的一些特殊性质:
- 隐私消耗ε与R的大小无关(无论R中有多少备选结果)
- 无论R是有限集合还是无限集合,都可以使用指数机制
- 指数机制代表了ε-DP的基本机制:通过选择合适的评分函数u,所有其他的ε-DP机制都可以用指数机制定义
有限集合(finite set)的指数机制
value_counts()
函数返回一个series,序列中包含每个值的count,可参考value_counts()的使用
def score(data, option):
return data.value_counts()[option]/1000
# 在本例中,对Marital Status进行分析
# 不妨假设data.value_counts()返回的是:
Be_married 19824
Never_married 10683
Diversed 5469
# 那么data.value_counts()[Never-married]的值为10683
np.random.choice(a, size=None, replace=True, p=None)
:
- 从一维数组a中随机抽取,组成指定size的数组
- replace=True:默认可以取相同的值,False则不允许取相同的值
- 数组p与数组a对应,表示取数组a中每个元素的概率。默认取每个元素的概率相同
进行指数机制的函数流程:
- 计算集合R中每个回复的分数
- 根据分数计算每个回复的输出概率
- 对概率进行归一化处理(概率和为1)
- 根据概率分布,选取结果
报告噪声最大值
当R是有限集合时,指数机制的基本思想是在R中进行选择的过程保证DP,可以用拉普拉斯机制实现此思想:
- 对每个r∈R,计算噪声分数(noisy score)u(r,x)+Lap(Δu / ε)
- 输出噪声分数最大的元素r
Δu是评分函数u的全局敏感度,与拉普拉斯机制的定义对比,可得第一步中每个噪声分数的计算都满足ε-DP,如果R中有n个元素,则由串行组合性可知,上述算法满足nε-DP
报告噪声最大值(report noisy max)算法: 只发布具有最大噪声分数的元素,不会发布最大噪声分数本身,也不会发布其他元素的噪声分数。所以不管R有多大,该算法总是满足ε-DP:
- 计算集合R中每个回复的分数
- 为每个分数添加拉普拉斯噪声
- 找到最大分数对应的index
- 返回该index对应的元素
np.argmax()
:获取array的某一个维度中,数值最大的那个元素的索引
当R为有限集合时,可以用报告噪声最大值机制代替指数机制;当R是无限集合时,因为在无限的score set中为每个分数添加拉普拉斯噪声是困难的,所以只能使用指数机制。但实际应用中,在无限集合上应用指数机制也非常困难,甚至是不可能的
指数机制是DP的基本机制
可以应用指数机制实现拉普拉斯机制,并得到相同的概率分布(可能相差一个常数因子)
通过仔细选择评分函数u,我们可以用指数机制重定义任何ε-DP机制
指数机制通常用于证明理论下界(通过证明差分隐私算法的存在性),在实际中,一般会用一些其他的算法来复现指数机制(e.g. 上述的报告噪声最大值的例子)
ch14 本地差分隐私
中心模型(central model):敏感数据被汇总到单个数据集中。这个场景中,我们假设分析者是恶意的,但存在可信的数据管理者,持有数据集并执行差分隐私机制
但很多场景下,数据管理者和分析者是同一个人,且可信的第三方管理者实际上并不存在
本地模型(local model):数据在离开数据主体的控制之前,就已经满足差分隐私(e.g. 用户在自己的设备上对自己的数据添加噪声)。所以不需要可信的数据管理者,数据主体不需要相信除自己之外的任何人
但对同一个查询,在相同的隐私消耗下,本地模型查询结果的准确性比中心模型低几个数量级,这意味着只有较少类型的查询适用于本地DP,且只有当数据量较大(即参与者数量较多时)时,准确率才能满足实际需求
随机响应/应答(Randomized Response)
一种随机响应的变体:
投一枚硬币:
正面朝上,如实回答问题
反面朝上,再投一枚硬币:
正面朝上,回答“是”
反面朝上,回答“否”
在这个算法中,硬币抛掷结果的随机性为真实结果引入了不确定性,不确定性是DP算法提供隐私保护的来源
该算法满足 ε=ln(3) 的ε-DP,证明过程可参考第二节 随机响应或RAPPOR,如果不理解为什么是ln,可参考下图:
虽然实验是在真实数据集上进行的随机响应,但实际的系统中,每个回复者是在本地执行随机响应,提交随机响应的结果给数据收集者
通过随机响应的结果,估计真实值:例如“是否从事销售”问题中,在得到的response中,有1/4是fake yes,从响应中的yes里去掉这些fake yes之后,得到的数值*2(因为我们认为第一枚硬币将真实的销售者平均分到truth组和random组中),就可以得到真实yes数量的估计
当总人数相对比较大时,我们可以得到错误率可接受的统计结果,但错误率会随着总人数的降低而快速增大
本地模型存在天生的限制:必须在提交数据前增加噪声,所以本地模型算法的准确率总是比最好的中心模型算法低
一元编码
随机应答允许我们基于LDP回答”yes or no”问题,但我们可能还希望满足生成一个直方图的查询
一元编码是一种简单的实现方法,首先我们定义响应域,即直方图中的标签(e.g. 职位分布查询中,各个职位的名称),随后用三个函数实现一元编码:
encode
:对响应进行编码。如果响应域大小为k(e.g. 有k种不同的职位),则应答值被编码为k位向量,除了对应位=1之外,其余所有位都=0perturb
:扰动应答值以保证DP。对每一位进行随机的翻转(1以概率p保留,0以概率q变为1)aggregate
:根据扰动后的响应,重构最终结果(对每一位都进行真实值的估计)