整理 | 夕颜,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。

图像水平梯度和竖直梯度代码_20行代码发一篇NeurIPS:梯度共享已经不安全了相关推荐

  1. 【opencv】26.图像水平边缘和竖直边缘的算子数学分析

    这里我们要细分了,虽然GxG_xGx​是对x求偏导得到,但是它反映的是在x方向上的三个像素值差异很大,那么假设黑色图像中一条白色竖线(有10行1列),那么卷积后: 在白色竖线以外左边相邻的那一列,他的 ...

  2. 图像水平梯度和竖直梯度代码_Opencv图像处理(三)

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  3. OPENCV(四)对图像进行水平投影和竖直投影

    本篇博客讲述如何使用python的openCV库实现对图像的水平投影和竖直投影: 关键代码如下: import cv2#读取图片 image1 = cv2.imread('../img/123.png ...

  4. 利用sobel算子提取图像的水平特征和竖直特征

    一. sobel滤波器介绍 sobel滤波器常用来提取灰度图像的水平边缘(水平特征)和竖直边缘(竖直特征) 二. sobel算子    纵向算子,提取图像水平边缘 ↑ 横向算子,提取图像竖直边缘 ↑ ...

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

    整理 | 夕颜,Jane 出品 | AI科技大本营(ID:rgznai100) [导读]12 月 8 日-14 日,NeurIPS 2019 在加拿大温哥华举行,和往常一样,今年大会吸引了数万名专家参 ...

  6. 用xml画水平虚线和竖直虚线.md

    1.画水平虚线 直接建一个shape,设置stroke属性就行了,再将这个属性直接作为background的drawable属性引入就行了 注意在4.0以上的真机加一句 <?xml versio ...

  7. 自定义Imageview控件实现多种手势操作 (拖动、水平缩放、竖直缩放、等比例缩放、双击、长按)

    项目中需要使用自定义控件的多种手势操作,之前在网上查阅资料的时候发现能找到的一般是只实现了其中的几种,这次就把我做的控件分享一下,人人为我,我为人人嘛,哈哈! 这个自定义控件实现的主要功能是控件的拖动 ...

  8. android 横向虚线,Android实现水平虚线和竖直虚线

    水平虚线 android:shape="line"> android:width="1dp" android:color="#747474&qu ...

  9. QListwidget设置水平滚动条和竖直滚动条

    滚动条方式--最简单的实现方法 首先包含头文件 QListwidget中关于显示模式的设置参数 直接复制以下代码即可实现==横向滚动条==,注意:listWidget_File换成你自己实例化的QLi ...

最新文章

  1. 如何使用C#在ASP.NET Core中轻松实现QRCoder
  2. python统计并输出文件的行数_python实用统计文件行数 类似wc命令
  3. hdu2235 机器人的容器
  4. 【直播】如何设计性能更强大的深度卷积神经网络
  5. html语言中div怎么起名,css如何命名?
  6. 商品评价 - 信息脱敏
  7. Node.js+Express+MongoDB 实现学生增删改查
  8. 行末没有空格c语言,新人提问:如何将输出时每行最后一个空格删除
  9. C/C++中的typedef 和 #define
  10. 关闭mysql权限管理_MySQL系列:用户及权限管理
  11. python执行oracle的sql语句_在oracledb中执行SQL脚本一次执行一条语句
  12. 文件异步上传方式(二)
  13. android图片管理实例,Android图片处理实例介绍(图)
  14. 测试网速wifi软件,测网速工具 一键wifi测速
  15. 渗透测试常用WEB安全漏洞扫描工具推荐
  16. hadoop集群:关于Could not obtain block:报错问题
  17. Vant Weapp组件picker选择器初始默认选中
  18. [ROS2]数据回放伴侣Rviz+plotjuggler
  19. Linux 桌面虚拟化技术 KVM
  20. 【Spring系列】- Spring循环依赖

热门文章

  1. iOS 11开发教程(九)iOS11数据线连接真机测试
  2. 计算机专业建设思路和措施,计算机网络专业教学改革与建设思路措施
  3. linux怎么修改grub引导顺序,我如何更改GRUB引导顺序?
  4. php 和ajax,PHP与Ajax
  5. js中replace未定义_js中replace的用法
  6. php oauth2.0 实例,详解laravel passport OAuth2.0的4种模式
  7. ue4是什么意思_恋爱中,男生最喜欢什么相处模式?
  8. php三年经验 多少工资_二级建造师一个月可以赚多少钱?
  9. matlab在绘图区加格栅,实验二(2) MATLAB绘图
  10. 苹果A15能征服原神?我劝你还不如买个散热背夹