查看原文
其他

20行代码发一篇NeurIPS:梯度共享已经不安全了

CSDN App AI科技大本营 2019-12-18


整理 | 夕颜,Jane
出品 | AI科技大本营(ID:rgznai100)
【导读】12 月 8 日-14 日,NeurIPS 2019 在加拿大温哥华举行,和往常一样,今年大会吸引了数万名专家参会,并展示了计算机领域的最新进展。其中来自 MIT 的一篇论文引起我们的关注,作者声称这篇论文可能是本届代码量最少的论文之一,整篇论文仅涉及 20 行代码,用这 20 行代码,就可以通过共享梯度轻松“偷取”隐私训练数据。这种技术如果真的这么神奇,大家关心的隐私数据安全问题岂不是更加雪上加霜? 

论文:https://arxiv.org/abs/1906.08935
作者:Ligeng Zhu, Zhijian Liu, Song Han
代码:https://gist.github.com/Lyken17/91b81526a8245a028d4f85ccc9191884
网站:[MIT HanLab] Deep Leakage from Gradients


通过共享梯度“偷”隐私训练数据

 
在作者的背景介绍中提到,交换梯度是现代多节点机器学习系统(例如,分布式训练、协作学习、联邦学习)中广泛使用的方法。尤其是在协作学习和联邦学习中,每个用户的数据始终储存在本地,仅有模型的梯度在不同设备之前传播。这类算法不需要将数据集中到一处,可以在保护用户隐私的同时,也让模型从海量数据中收益,例如多家医院可以共同训练一个医疗模型而无需共享患者的医疗数据。所以,长期以来,人们认为梯度是可以安全共享的,即训练数据不会因梯度交换而泄漏。
 
但是,这篇论文证明了其实可以通过从公共共享的梯度中轻松获取隐私训练数据。他们将此泄漏方法命名为 Deep Leakage from Gradient,并通过经验验证了其在计算机视觉和自然语言处理任务中的有效性。
 
实验结果表明,这个团队的攻击比以前的方法要强大得多:获取的图像精准度可达到像素级,文本,获取的文本也是呈对匹配的。
 
但是,该团队也表明,这项研究并无恶意,知识想要提高人们对数据安全隐私的重视。最后,他们还提出了防止这种深度泄漏的可能策略,其中最有效的防御方法就是进行梯度修剪。这一点后文再提。
               
如图所示,图中红色小恶魔偷数据的方法也很简单:首先随机生成一对“虚拟的”输入和标签(dummy data and label),然后执行通常的前向传播(Forward)和反向传播(Backward)。从虚拟数据导出虚拟梯度之后,该团队没有像传统优化那样更新模型权重,而是更新虚拟输入和标签,以最大程度地减小虚拟梯度和真实梯度之间的差异。下图中的 ||∇w’ - ∇w|| 对于虚拟数据和标签可导,因此可以使用标准梯度下降方法来优化。
              Deep Leakage 算法,黑框标注了会更新的部分


20行代码即可实现


由于该算法需要算梯度的梯度,所以实现时需要找一个二阶导的框架。目前 TensorFlow 和 PyTorch 都支持高阶导(high order gradients),该团队选择了PyTorch 做为实现平台。
 
核心算法是匹配虚拟数据和真实数据之间的梯度,整个实现非常简单,核心算法只需要 20 行即可实现。团队也在 GitHub 上开源了代码:
 
def deep_leakage_from_gradients(model, origin_grad): dummy_data = torch.randn(origin_data.size()) dummy_label = torch.randn(dummy_label.size())  optimizer = torch.optim.LBFGS([dummy_data, dummy_label] ) for iters in range(300): def closure(): optimizer.zero_grad() dummy_pred = model(dummy_data) dummy_loss = criterion(dummy_pred, dummy_label) dummy_grad = grad(dummy_loss, model.parameters(), create_graph=True)
grad_diff = sum(((dummy_grad - origin_grad) ** 2).sum() \ for dummy_g, origin_g in zip(dummy_grad, origin_grad))
grad_diff.backward() return grad_diff
optimizer.step(closure)
return dummy_data, dummy_labe

扒NeurIPS主页小试牛刀

 
效果看来也是不错。针对 Language Model(backbone 为 BERT),该团队从 NeurIPS 主页上随机扒了三句话开始攻击。可以到看到 iter = 0 时,产生的结果是 totally meaningless 的,但在 iters = 10 / 20 时,一部分词组就开始泄漏出来。当 iters = 30 时,虽然有一些由于 tokening 造成的歧义,但原句已基本泄漏了。
              
那么针对图像效果如何呢?作者在该论文网站中展示了用 deep leakage 恢复图像的全过程。下图中,左为随机产生噪声,右为原图,中间是 leaking 的过程。整个 leaking 过程不需要任何额外关于 dataset 的 prior 而且最终结果是 pixel-wise accurate。所以作者把这认为这是一个很 “deep” 的 leakage,这也是标题 Deep Leakage from Gradients 的来源。

                     
     

可以看到,恢复图像的精准度的确让人吃惊!仅用 20 行代码,数据真的被无声无息地“偷走”。(以上技术原理性解释引用自知乎用户Lyken https://www.zhihu.com/people/shi-hou-11/activities)


防御方法


为了对付 deep leakage,该论文中也提出了相应的防御方法:
Deep leakage 给多节点机器学习系统带来了挑战。如我们的工作所示,梯度共享方案并不总是可靠的。为了防止 deep leakage,我们提出了三种防御策略:梯度扰动、半精度和梯度压缩。
对于梯度扰动,我们发现高斯噪声和拉普拉斯噪声的标度都高于会有很好的防御作用。虽然半精度防御失败,但梯度压缩防御成功攻击,修剪梯度超过 20%。


梯度扰动


防御DLG最直接的方法是在共享之前在梯度上添加噪声。测试表明,高斯和拉普拉斯噪声(广泛用于差异隐私研究)分布,其分布范围为 ,中心为0。从图7a和7b中,我们观察到防御效果主要取决于分布方差的大小,与噪声类型的关系较小。当方差在范围内时,噪声梯度不会阻止泄漏。对于方差为 的噪声,尽管有伪影,但仍然会发生泄漏。只有当方差大于并且开始有噪声影响精度时,DLG才会发生。我们还注意到,拉普拉斯算子在时防御得更好。
 
梯度上的另一个常见扰动是半精度,其最初的设计旨在节省内存空间,并广泛用于减少通信带宽。我们测试了两种流行的半精度实现IEEE float16(单精度浮点格式)和bfloat16(Brain Floating Point,32位float的截断版本)。不幸的是,如图7c所示,两个半精度都无法保护训练数据。
         

梯度压缩和稀疏化


我们还尝试通过梯度压缩进行防御。梯度压缩会将较小的梯度修剪为零,因此,由于优化目标也会被修剪,DLG很难匹配梯度。我们评估了不同级别的稀疏性(从1%到70%)如何防御泄漏。当稀疏度为1%到10%时,它对DLG几乎没有影响。当修剪比例增加到20%时,如图7d所示,恢复图像上会出现明显的伪像像素。我们注意到,稀疏度的最大容忍度约为20%。当修剪率大于20%时,无法再从视觉上识别恢复的图像,因此,梯度压缩成功地防止了泄漏。
 
先前的工作显示,梯度可以压缩300倍以上而不会损失精度。在本案例中,稀疏度高于99%,并且已经超过DLG的最大容限(约20%)。这表明压缩梯度是避免泄漏的一种很好的实用方法。


保护数据隐私的方法失效了?

 
现在,国内外都非常重视数据隐私保护与监管的问题,不仅是用户自己开始重视数据隐私,企业更是需要保护好自己的数据,凸显自家优势。而既能打破数据=孤岛又能保护数据隐私的方法也成为大家急迫需要的,随后同态加密、协同学习、联邦学习等模型不断被提出与应用,尤其是联邦学习,在这两年备受金融、医疗等领域的关注。
 
此前,AI科技大本营(ID:rgznai100)也为大家介绍了很多企业联邦学习的研究与应用成果,如:《让数百万台手机训练同一个模型?Google把这套框架开源了》、《重磅!全球首个可视化联邦学习产品与联邦pipeline生产服务上线《微众银行AI团队开源联邦学习框架,并发布联邦学习白皮书1.0》《李开复口中的“联邦学习” 到底是什么?| 技术头条》
 
在联邦学习中,不共享数据,协同建模中有一个经常被大家利用的方法就是上面提到的梯度共享,但是到这里我们不禁思考:成功攻击的方法已经出现,这些试图保护数据隐私的学习模型被攻破,未来还会有效吗?
 
回顾几年前 GAN 火爆后,对抗攻击方法也应运而生,此前 AI科技大本营(ID:rgznai100)为大家介绍过多种模型与网络的对抗攻击方法,虽然诸如弱攻击,基于类别标签的生成模型的攻击方法不断取得成功,但是 GAN 依然流行至今,在众多领域里发挥着它独特的魅力。有攻击就有防御,大家基于攻击结果也在提出防御方法,让模型更坚固。在这篇论文中,作者也提出了梯度扰动、半精度和梯度压缩三种防御策略,为大家日后保护数据隐私提供更多思路。
 
NIPS 2019 已经接近尾声,在这次大会上还有很多精彩的论文,欢迎推荐你的或你认为优秀的Paper。

(*本文为AI科技大本营整理文章,转载请微信联系 1092722531)


精彩公开课




推荐阅读

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存