联邦学习入门笔记(四)— 基于差分隐私的FL(ii)

本文详细介绍了DP(差分隐私)+FL(联邦学习)的实现方法,笔者经过一年多的学习,基本上摸清了这个领域的一些套路,这里做一个总结。

距离上次发表联邦学习相关的文章已经是一年多前了,笔者接触这个领域差不多也有快两年的时间了,那时候笔者还是本科生,现在已经是快毕业的师兄了(逃),这两年对FL和DP的理解变化很大,应该说是对这个领域已经较为了解了,两年前写基于差分隐私的FL(i)这篇文章时,笔者对很多概念和算法描述的可能并不是特别到位,这里请大家以这篇文章的描述为准。

基于DP的FL算法

为了简单起见,这里只讲解Client端的过程,以添加Laplace噪音为例,假设Client端收到来自Server的初始参数为ws\mathbf{w}_s,学习率为η\eta,本地数据集为D\mathcal{D},梯度裁剪的Clip为CC,损失函数为l(D,ws)l(\mathcal{D}, w_s)当前这一轮的隐私预算ϵ\epsilon,那么基于DP的Client端算法为:

  • 接受来自Server的初始参数ws\mathbf{w}_s

  • 通过前向传播和反向传播计算出梯度 g\mathbf{g}

    其中计算的过程应该为,首先计算出D\mathcal{D}中每条数据Di\mathcal{D_i}的梯度gi\mathbf{g_i},进行梯度裁剪:

    gi=gimax(1,gi/C)\mathbf{g_i} = \frac{\mathbf{g_i}}{max(1, |\mathbf{g_i}| / C)}

    然后再求平均值,把这个过程写成公式就应该是:g=1Dgi=1Darg minwsl(Di,ws)\mathbf{g} = \frac{1}{|\mathcal{D}|} \sum \mathbf{g_i} = \frac{1}{|\mathcal{D}|} \sum arg \ min_{\mathbf{w_s}} l(\mathcal{D_i}, \mathbf{w_s})

  • 进行梯度下降:wc=wsηg\mathbf{w_c} = \mathbf{w_s} - \eta \mathbf{g}

  • 对参数添加噪音:wc~=wc+Lap(Δf/ϵ)\widetilde{\mathbf{w_c}} = \mathbf{w_c} + Lap(\Delta f / \epsilon)

算法详解

上述算法可能有很多人有疑问,DP似乎不仅仅做了加噪的操作,还有很多额外的操作(比如Clip梯度),这里我将说明这些做法,以及为什么要这么做。

敏感度Δf\Delta f的计算

根据敏感度Δf\Delta f的定义,考虑两个临近数据集D,D\mathcal{D}, \mathcal{D'},两个数据集仅仅在数据Dk\mathcal{D_k}处不同,其他数据都是相同的,由于我们是对参数添加噪音,那么此时我们需要计算参数在D,D\mathcal{D}, \mathcal{D'}设定下的敏感度,假设D,D\mathcal{D}, \mathcal{D'}设定下计算出来参数为wc,wc\mathbf{w_c}, \mathbf{w_c'},敏感度的计算如下:

Δf=maxD,Dwcwc=maxD,D(wsηg)(wsηg)=maxD,Dηgg\Delta f = max_{\mathcal{D}, \mathcal{D'}} | \mathbf{w_c} - \mathbf{w_c'} | = max_{\mathcal{D}, \mathcal{D'}}| (\mathbf{w_s} - \eta \mathbf{g}) - (\mathbf{w_s} - \eta \mathbf{g'}) | = max_{\mathcal{D}, \mathcal{D'}} \eta | \mathbf{g} - \mathbf{g'} |

(注意这里是一范数,因为是Laplace机制。)

然后我们只需要求解gg| \mathbf{g} - \mathbf{g'} |的值就可以了,根据算法的第二步,那么有:

gg=1D(gigi)=1Darg minwsl(Di,ws)arg minwsl(Di,ws)| \mathbf{g} - \mathbf{g'} | = \frac{1}{|\mathcal{D}|} | (\sum \mathbf{g_i} - \sum\mathbf{g_i'}) | = \frac{1}{|\mathcal{D}|} | \sum arg \ min_{\mathbf{w_s}} l(\mathcal{D_i}, \mathbf{w_s}) - \sum arg \ min_{\mathbf{w_s}} l(\mathcal{D_i'}, \mathbf{w_s}) |

根据我们前面的假设,两个临近数据集D,D\mathcal{D}, \mathcal{D'},两个数据集仅仅在数据Dk\mathcal{D_k}处不同,那么除了Dk\mathcal{D_k}处所计算出来的梯度,其他的梯度应该都是相同的,所以可以消去,那么有:

gg=1Darg minwsl(Dk,ws)arg minwsl(Dk,ws)=1D(gkgk)| \mathbf{g} - \mathbf{g'} | = \frac{1}{|\mathcal{D}|} | arg \ min_{\mathbf{w_s}} l(\mathcal{D_k}, \mathbf{w_s}) - arg \ min_{\mathbf{w_s}} l(\mathcal{D_k'}, \mathbf{w_s})| = \frac{1}{|\mathcal{D}|} | (\mathbf{g_k} - \mathbf{g_k'}) |

由于每一个梯度都进行过梯度裁剪,所谓梯度裁剪,其实就是把梯度的一范数限制在一定的范围内,此时:

gg<=gk+gkD<=2CD| \mathbf{g} - \mathbf{g'} |<= \frac{| \mathbf{g_k} | + | \mathbf{g_k'} | }{|\mathcal{D}|}<= \frac{2C}{|\mathcal{D}|}

那么敏感度就为:

Δf=η2CD\Delta f = \eta \frac{2C}{\mathcal{D}}

为什么要Clip?

从上一部分可以看出,如果不Clip梯度的话,g\mathbf{g}就是一个无法被bound住的值,

也就是他的一范数的范围无法被确定,这样的话就无法计算敏感度,无法计算敏感度就不能添加DP噪音,敏感度对于差分隐私来说是一个非常重要的参数。

关于Clip的值,有很多种不同的算法,也有很多不同的加法,这里只是展示了最常见的一种,不同的加法可能会造成Clip的值不同,如何降低敏感度是目前这个DP领域研究的一个重点

当前这一轮的隐私预算VS全局的隐私预算

很多FL+DP的文章将当前这一轮的隐私预算与全局的隐私预算混淆,这里明确一下。

算法中提到的当前这一轮的隐私预算是指暴露Client当前信息所消耗的隐私预算,

根据差分隐私的Simple Composition,假设Client暴漏T次数据,那么这T次数据所消耗的隐私预算为TϵT \epsilon

大多数FL+DP的论文中所提到的隐私预算都是指全局的隐私预算,也就是说暴露T次数据所消耗的隐私预算,按照这些论文的设定,Client端每一轮消耗的隐私预算应该等于ϵ/T\epsilon / T,也就是总的隐私预算除以暴露次数。

假设你全局隐私预算为ϵ\epsilon,你当然可以选择在前几次暴露使用较大的隐私预算,后几次使用较小的隐私预算,只要你能保证总的预算为ϵ\epsilon就可以,这一部分也有一些文章在进行研究,比如Adaptive DP[2]。

也有一些文章认为Simple Composition不够严谨,他没有考虑噪音的分布,还有更加严谨的 Composition以及专门针对深度学习记录隐私预算的算法,比如Moment Account,这些就不是本文研究的重点了,可以参考:https://zhuanlan.zhihu.com/p/264779199

关于本地迭代轮数

在传统的FL中,本地可以迭代多轮,而在基于FL+DP的设定下,本地迭代一轮是最好的选择。

在本地迭代多轮的情况下,无法保证每一个迭代轮数开始的时候ws\mathbf{w_s}是相同的,这时无法消去除了Dk\mathcal{D_k}之外的其他数据计算出来的梯度,此时如果单纯对梯度进行Clip,那么得到的敏感度将是多轮迭代出来的D|\mathcal{D}|倍,考虑到数据集的大小一般都很大,所以敏感度将会扩大几十倍甚至上百倍,所以迭代一轮是最好的选择。

写在最后

以上是笔者写的使用拉普拉斯机制添加差分隐私噪音的基本过程,当然这个领域还有其他机制,比如高斯机制等,其实过程感觉都比较类似,计算Sensitivity,添加噪音等等[1,3],只不过可能加噪音的操作或者位置不同(比如有些是对梯度加噪),还有一些文章专注于FL+DP的收敛性的分析,这一块也是比较难懂的一块,笔者还在学习过程中。

笔者小硕一枚,虽然有过一些研究经验,但是本人对于DP的理解不敢说非常精通,很多时候也是摸着石头过河,笔者觉得目前网上关于DP的中文资料良莠不齐,鱼龙混杂,入门起来非常困难,笔者也是花了很长时间才搞清楚这个领域,可能有些地方写的不太准确,欢迎大家多提意见,互相交流!

笔者的开源FL+DP代码:https://github.com/wenzhu23333/Differential-Privacy-Based-Federated-Learning

参考文献

[1]Wei, Kang, et al. “Federated learning with differential privacy: Algorithms and performance analysis.” IEEE Transactions on Information Forensics and Security 15 (2020): 3454-3469.

[2]Wu, Nan, et al. “The value of collaboration in convex machine learning with differential privacy.” 2020 IEEE Symposium on Security and Privacy (SP). IEEE, 2020.

[3]Abadi, Martin, et al. “Deep learning with differential privacy.” Proceedings of the 2016 ACM SIGSAC conference on computer and communications security. 2016.

[4]Lee, Jaewoo, and Daniel Kifer. “Concentrated differentially private gradient descent with adaptive per-iteration privacy budget.” Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018.

[5]https://zhuanlan.zhihu.com/p/264779199

[6]Truex, Stacey, et al. “LDP-Fed: Federated learning with local differential privacy.” Proceedings of the Third ACM International Workshop on Edge Systems, Analytics and Networking. 2020.


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!