Boosting for Queries
本文将简单介绍Dwork和Roth所写的The Algorithmic Foundations of Differential Privacy第六章内容,需要有一定差分隐私(DP)了解。为了避免引起歧义,说明一下题目中的Boosting是借用了机器学习的算法思路,应对的是差分隐私多查询回答问题,而不是说boosting直接应用在了差分隐私的机器学习上。
如果想完全理解,请详细阅读相关内容,这里仅作简单介绍。
符号
数据库 x ∈ X n x\in \mathcal{X}^n x∈Xn(可以简单理解为n维向量,每个元素来自 X \mathcal{X} X),查询 Q = { q 1 , . . . , q ∣ Q ∣ } Q=\{q_1,...,q_{|Q|}\} Q={q1,...,q∣Q∣},其中 q : x − > R q:x->\mathbb{R} q:x−>R,所有 Q Q Q中的查询的全局敏感度上界为 ρ \rho ρ。
问题
很多场景下,我们不只是回答一次询问,面对多次查询情况,我们也要能做到尽量不泄露隐私的回答。显然,查询越多,我们的隐私损失越多,换句话说,保证相同隐私下,误差越大。根据组合定理,我们可以快速得到误差大概为 O ( ρ ∣ Q ∣ ) O(\rho\sqrt{|Q|}) O(ρ∣Q∣)(pure-DP为 O ( ρ ∣ Q ∣ ) O(\rho|Q|) O(ρ∣Q∣)),当 ∣ Q ∣ |Q| ∣Q∣很大的时候(比如 n 2 n^2 n2),这个误差没什么意义,那么我们可以得到大量查询下仍旧有意义的误差吗?
这是可以的,使用boosting技术可以实现一个差分隐私算法,对于每个回答误差大致为 O ( ρ n log 3 / 2 ∣ Q ∣ ) O(\rho\sqrt{n}\log^{3/2}|Q|) O(ρnlog3/2∣Q∣)!并且针对线性查询,该算法运行时间可以变为多项式时间。
算法概述
简单叙述一下这个算法,它有T轮迭代,在每一轮当中,
- 我们根据分布 D t \mathcal{D}_t Dt选出来k个query,然后送到bsg(base synopsis generator)里面,bsg返回对于所有query的回答。
- 我们对于bsg给出的回答做个评判,然后分别打个分,越准确的回答,对应系数 a t , q a_{t,q} at,q约大。
- 归一化打分,把它作为一个分布更新。
T轮之后,我们得到了 T ∣ Q ∣ T|Q| T∣Q∣个结果,对于每个query选一个好的回答,返回。
整个算法流程大致就是这样,然后有几个比较有趣的点。
- bsg是什么?bsg有四个参数( k k k, λ \lambda λ, η \eta η, β \beta β),分别构建所需要的查询数量,回答误差,平衡参数,失败概率。代表简单地说,他是一个黑盒,你给他k个query,它就能给你一系列回答,对于这k个query有着比较好的近似。然后有一个事实,如果k个query是从一个分布里选的,那对k个query的良好近似,可以得到对于 ∣ Q ∣ |Q| ∣Q∣个query里面重要的(分值高的,或者是分布概率大的)有着良好近似。
- 和boosting区别在哪?可以看到我们对于回答的质量,并不仅仅用 λ \lambda λ来衡量,而是 λ \lambda λ和 λ + μ \lambda+\mu λ+μ两个阈值来衡量。在中间区域,我们根据回答的误差来更新。以上操作均是因为需要保证DP。
- 如果你仔细观察 u t , q u_{t,q} ut,q你就会发现,生成的 D \mathcal{D} D和指数机制有着密切联系。
OK,现在我们得到了一系列回答,对于Q里面那些重要的查询有着比较好的回答,那么之后干的事情就是在做boosting,也就是核心技术,得到对于所有 q ∈ Q q\in Q q∈Q的良好回答。简单地说,把一个weak回答器,变成strong回答器。
总结
总而言之,整个算法就是把一个针对多数回答比较好的回答器变成一个针对所有回答比较好的回答器。通过这种方法可以给出多次查询下更有意义的误差保证,对于线性查询也有着很好的保证。(本身这个方法思想不错,但是应用时还需慎重)
书里给出了一般查询bsg的构造方式,得到的保证如下所示。