本文首发于我的博客,
原文地址请点击这里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
本文详细介绍了DP(差分隐私)+FL(联邦学习)的实现方法,笔者经过一年多的学习,基本上摸清了这个领域的一些套路,这里做一个总结。
距离上次发表联邦学习相关的文章已经是一年多前了,笔者接触这个领域差不多也有快两年的时间了,那时候笔者还是本科生,现在已经是快毕业的师兄了(逃),这两年对FL和DP的理解变化很大,应该说是对这个领域已经较为了解了,两年前写基于差分隐私的FL(i)这篇文章时,笔者对很多概念和算法描述的可能并不是特别到位,这里请大家以这篇文章的描述为准。
笔者的开源FL+DP代码:基于差分隐私的联邦学习代码库
基于DP的FL算法
为了简单起见,这里只讲解Client端的过程,以添加Laplace噪音为例,假设Client端收到来自Server的初始参数为 w s \mathbf{w}_s ws,学习率为 η \eta η,本地数据集为 D \mathcal{D} D,梯度裁剪的Clip为 C C C,损失函数为 l ( D , w s ) l(\mathcal{D}, w_s) l(D,ws),当前这一轮的隐私预算为 ϵ \epsilon ϵ,那么基于DP的Client端算法为:
-
接受来自Server的初始参数 w s \mathbf{w}_s ws
-
通过前向传播和反向传播计算出梯度 g \mathbf{g} g
其中计算的过程应该为,首先计算出 D \mathcal{D} D中每条数据 D i \mathcal{D_i} Di的梯度 g i \mathbf{g_i} gi,进行梯度裁剪:
g i = g i m a x ( 1 , ∣ g i ∣ / C ) \mathbf{g_i} = \frac{\mathbf{g_i}}{max(1, |\mathbf{g_i}| / C)} gi=max(1,∣gi∣/C)gi
然后再求平均值,把这个过程写成公式就应该是: g = 1 ∣ D ∣ ∑ g i = 1 ∣ D ∣ ∑ a r g m i n w s l ( D i , w s ) \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}) g=∣D∣1∑gi=∣D∣1∑arg min<