到目前为止许多机制应用在数学问题上了,直接在数字结果之类的上边添加噪声。如果我们不添加噪声捏,可用指数机制。当运行在一个set里边搜寻最好元素的时候同时阻止差分隐私。set中每个元素通过一个说明的分数方法,来定义哪个元素最好。
这种机制通过每个元素函数返回的极大估计。用其他话来说,换句话说,为了满足差分隐私,指数机制有时会从没有最高分数的集合中返回一个元素。
描述:
指数机制满足ϵ-差分隐私:
1、分析人员选择一组R 的可能输出
2、分析员指定一个具有全局敏感度Δ u 的评分函数u : D × R → R \mathcal{D} \times \mathcal{R} \rightarrow \mathbb{R} D×R→R
3、指数机制输出r ∈ R,其概率与以下值成正比:
exp ( ϵ u ( x , r ) 2 Δ u ) \exp \left(\frac{\epsilon u(x, r)}{2 \Delta u}\right) exp(2Δuϵu(x,r))
指数机制和我们之前看到的机制(例如拉普拉斯机制)之间最大的实际区别是,指数机制的输出始终是集合R 的成员。当从有限集合搜索一个元素的时候非常有用,当噪声回答没有意义的时候。
假如说为一个大会挑选日期,合理情况是根据参赛人员的每个人个人日历的时间冲突来挑选。同时为时间添加差分隐私,对时间添加噪声没啥意义。我们可以用指数机制,想起来汤普森KT一句话:他们给我钱就是让我来干这个的。For Date
特点
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import pandas as pd
import numpy as np
adult = pd.read_csv("adult_with_pii.csv")
def laplace_mech(v, sensitivity, epsilon):
return v + np.random.laplace(loc=0, scale= sensitivity / epsilon)
def pct_error(orig, priv):
return np.abs(orig - priv) * 100.0
options = adult['Marital Status'].unique()
def score(data, option):
return data.value_counts()[option] / 1000 # 10.683
def exponential(x, R, u, sensitivity, epsilon):
# Calculate the score for each element of R
scores = [u(x, r) for r in R]
# Calculate the probability for each element, based on its score
probabilities = [np.exp(epsilon * score / (2 * sensitivity)) for score in scores]
# Normalize the probabilties so they sum to 1 绝对值相加
probabilities = probabilities / np.linalg.norm(probabilities, ord=1)
# print(probabilities)
# Choose an element from R based on the probabilities
# print(np.random.choice(R, 1, p = probabilities))
return np.random.choice(R, 1, p = probabilities)[0]
r = [exponential(adult['Marital Status'], options, score, 1, 1) for i in range(200)]
pd.Series(r).value_counts()
print(pd.Series(r).value_counts())
print(pd.Series(adult['Marital Status']).value_counts())
Married-civ-spouse 177
Never-married 20
Married-AF-spouse 1
Married-spouse-absent 1
Divorced 1
dtype: int64
Married-civ-spouse 14976
Never-married 10683
Divorced 4443
Separated 1025
Widowed 993
Married-spouse-absent 418
Married-AF-spouse 23
Name: Marital Status, dtype: int64
Process finished with exit code 0
有限集合的指数机制首先要计算集合中所有元素的评估值,然后根据其评估值计算其可能性,再归一化
,再基于可能性
来选择元素。差分隐私体现在根据评估值计算可能性部分。我们可以发现其可能性计算排列顺序和元素数量排序一样的。
写到这里不禁会问我们可以使用拉普拉斯机制恢复指数机制吗?
在有限集合R的情况下,指数机制的基本思想 :从具有差分隐私的集合中进行选择 。在拉普拉斯机制方面提出了一个朴素的实现:
对于每个 r ∈ R r \in \mathcal{R} r∈R,计算一个嘈杂的分数 u ( x , r ) + Lap ( Δ u ϵ ) \mathrm{u}(\mathrm{x}, \mathrm{r})+\operatorname{Lap}\left(\frac{\Delta \mathrm{u}}{\epsilon}\right) u(x,r)+Lap(ϵΔu)
输出具有最大噪声分数的元素 r ∈ R r \in \mathcal{R} r∈R
由于评分函数u 在x 中是Δu 敏感的,因此步骤 1 中的每个"查询"都满足ϵ-差分隐私
。 因此,如果R包含n元素,则上述算法通过顺序组合满足nϵ-差分隐私.
但是,如果我们使用指数机制,则总成本将只是ϵ
!为什么指数机制要好得多?因为它发布的信息较少。
我们对上面定义的基于拉普拉斯的方法的分析是非常悲观的。在步骤 1 中计算的整组噪声分数实际上满足nϵ-差分隐私,我们可以释放整个内容。步骤 2 中的输出满足nϵ-差分隐私遵循后处理属性。
但是指数机制只释放具有最大噪声分数的元素的标识
,而不是分数本身或任何其他元素的分数。
上面定义的算法通常被称为报告噪声最大算法,它实际上满足ϵ-差分隐私
,无论集合R有多大 - 特别是因为它只释放具有最大噪声计数的元素的恒等式。
报告噪声最大值很容易实现,并且很容易看出它产生的结果与我们之前实现的有限集合的指数机制非常相似。
def resport_noisy_max(x, R, u, sensitivity, epsilon):
# Calculate the score for each element of R
scores = [u(x, r) for r in R]
noisy_scores = [laplace_mech(score, sensitivity, epsilon) for score in scores]
max_idx = np.argmax(noisy_scores)
return R[max_idx]
Married-civ-spouse 197
Never-married 3
dtype: int64
Process finished with exit code 0
因此,当集合R是有限的,但当它是无限的时呢?我们不能轻易地将拉普拉斯噪声添加到无限多的分数中
。在这种情况下,我们必须使用实际的指数机制。
然而,在实践中,对无限集使用指数机制通常是具有挑战性或不可能的。虽然很容易写下由该机制定义的概率密度函数,但通常情况下,没有有效的算法可以从中进行采样
。因此,许多理论论文呼吁指数机制来表明,存在一种具有某些理想属性的差异私有算法,但其中许多算法在实践中无法使用。
我们能从指数机制中恢复拉普拉斯机理,反过来不行
考虑一个具有敏感性Δq的查询q(x): D → R \mathcal{D} \rightarrow \mathbb{R} D→R
我们可以通过添加拉普拉斯噪声来释放一个ϵ-差分私有答案 F ( x ) = q ( x ) + L a p ( Δ q / ϵ ) F(x)=q(x)+\mathrm{Lap}(\Delta q / \epsilon) F(x)=q(x)+Lap(Δq/ϵ)
这个差异私有版本的概率密度函数为: Pr [ F ( x ) = r ] = 1 2 b exp ( − ∣ r − μ ∣ b ) = ϵ 2 Δ q exp ( − ϵ ∣ r − q ( x ) ∣ Δ q ) \begin{aligned} \operatorname{Pr}[F(x)=r] &=\frac{1}{2 b} \exp \left(-\frac{|r-\mu|}{b}\right) \\ &=\frac{\epsilon}{2 \Delta q} \exp \left(-\frac{\epsilon|r-q(x)|}{\Delta q}\right) \end{aligned} Pr[F(x)=r]=2b1exp(−b∣r−μ∣)=2Δqϵexp(−Δqϵ∣r−q(x)∣)
考虑一下当我们将指数机制的评分函数设置为 u ( x , r ) = − 2 ∣ q ( x ) − r ∣ u(x, r)=-2|q(x)-r| u(x,r)=−2∣q(x)−r∣时会发生什么。指数机制表示,我们应该从概率分布中抽样,与以下值成正比: Pr [ F ( x ) = r ] = exp ( ϵ u ( x , r ) 2 Δ u ) = exp ( ϵ ( − 2 ∣ q ( x ) − r ∣ ) 2 Δ q ) = exp ( − ϵ ∣ r − q ( x ) ∣ Δ q ) \begin{array}{c} \operatorname{Pr}[\mathrm{F}(\mathrm{x})=\mathrm{r}]=\exp \left(\frac{\epsilon \mathrm{u}(\mathrm{x}, \mathrm{r})}{2 \Delta \mathrm{u}}\right) \\ =\exp \left(\frac{\epsilon(-2|\mathrm{q}(\mathrm{x})-\mathrm{r}|)}{2 \Delta \mathrm{q}}\right) \\ \quad=\exp \left(-\frac{\epsilon|\mathrm{r}-\mathrm{q}(\mathrm{x})|}{\Delta \mathrm{q}}\right) \end{array} Pr[F(x)=r]=exp(2Δuϵu(x,r))=exp(2Δqϵ(−2∣q(x)−r∣))=exp(−Δqϵ∣r−q(x)∣)
因此,有可能从指数机制中恢复拉普拉斯机制
,并且我们得到相同的结果(常数因子不一定,指数机制的一般分析并非在所有情况下都很严格)。
指数机制是非常普遍的-它通常可以根据评分函数的精心选择的定义重新定义任何-差分私有机制。如果我们能分析这个评分函数的灵敏度,那么差别隐私的证明就免费了。
另一方面,应用指数机制的一般分析有时会以更宽松的边界为代价(如上面的拉普拉斯例子),并且根据指数机制定义的机制通常很难实现。指数机制通常用于证明理论下界(通过表明差分私有算法的存在),但实际算法经常使用其他方法复制相同的行为(如上面报告噪声最大值的情况)。
1、指数机制的理解:分析人员通过指定一个评分函数来定义哪个元素是"最佳"的,该评分函数为集合中的每个元素输出一个分数,并定义要从中选取的事物集。该机制通过近似最大化它返回的元素的分数来提供差分隐私,换句话说,为了满足差分隐私,指数机制有时会从没有最高分数的集合中返回一个元素。
2、指数机制和我们之前看到的机制(例如拉普拉斯机制)之间最大的实际区别是,指数机制的输出始终是集合R 的成员。当从有限集合中选择项目时,当嘈杂的答案没有意义时,这非常有用。
3、由于评分函数u在x 中是Δu敏感的,因此步骤 1 中的每个"查询"都满足ϵ-差分隐私。 因此,如果R 包含n元素,则上述算法通过顺序组合满足nϵ-差分隐私。但是,如果我们使用指数机制,则总成本将只是ϵ
!为什么指数机制要好得多?因为它发布的信息较少。
4、指数机制只释放具有最大噪声分数的元素的标识 ,而不是分数本身或任何其他元素的分数。上面定义的算法通常被称为报告噪声最大算法,它实际上满足ϵ-差分隐私,无论集合R有多大 - 特别是因为它只释放具有最大噪声计数的元素的恒等式。
5、我们不能轻易地将拉普拉斯噪声添加到一组无限的集合中。在这种情况下,我们必须使用实际的指数机制。然而,在实践中,对无限集合使用指数机制通常是具有挑战性或不可能的。虽然很容易写下该机制定义的概率密度函数,但通常情况下,不存在有效的算法来从中采样。因此,许多理论论文呼吁指数机制来证明具有某些理想属性的差分私有算法"存在",但其中许多算法在实践中是不可能使用的。
6、指数机制是非常通用的,通常可以根据评分函数的定义u 重新定义任何ϵ- 差分私有机制。如果我们能够分析这个评分函数的灵敏度,那么差分隐私的证明是免费的。另一方面,应用指数机制的一般分析有时以更宽松的边界为代价(如上面的拉普拉斯示例),并且根据指数机制定义的机制通常很难实现。指数机制通常用于证明理论下限(通过表明存在差分隐私算法),但实际算法通常使用其他方法复制相同的行为(如上面的报告噪声最大值的情况)。