20行代码发一篇NeurIPS:梯度共享已经不安全了
整理 | 夕颜,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_diffoptimizer.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)
◆
精彩公开课
◆
推荐阅读
图灵奖得主Bengio:深度学习不会被取代,我想让AI会推理、计划和想象
国产数据库年终大盘点
支付宝也崩溃,中心化支付体系尚能饭否?
Android 10 vs iOS 13,逐鹿手机操作系统之王!
搞定面试算法系列 | 分治算法三步走
我在华为做外包的真实经历
了不起的 Unicode!
想开发智能合约?先 get 下这个适合所有人的模型驱动法(文末有福利)
你点的每个“在看”,我都认真当成了AI
相关文章:

关于页面打印window.print()的样式问题
当我们打印网页的时候。有时候会发现。打印出来的。跟网页上看到的样式的差别有点大。这其中可能有的问题是。样式问题。 当调用打印(window.print())方法时。打印机会在网页的样式中查找 media print{}的样式,并适应到要打印的网页中。 所以 如果要打印的页面符合看…

Python3中参数*args和**kwargs介绍
在Python中,我们可以使用两种特殊符号将可变数量的参数传递给函数:*args和**kwargs。你可以使用任何单词代替args和kwargs,但通常做法是使用args和kwargs。 *args允许函数接受任意数量的位置参数(positional arguments)。 **kwargs收集所有未…
4大主流CPU处理器技术架构,不知道就out了!
作者 | 王艺威责编 | 阿秃RISC(精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。这样一来,它能够以更快的…

grunt-connect-proxy解决开发时跨域问题
最近的项目中前后端是完全分离开发的,前端用grunt管理项目。这样就会导致一个问题:开发时前端调用后台的接口时因为不在一个服务器,所以会出现跨域问题。但是也不能用JSONP或CROS方式实现真正的跨域,因为项目发布时其实是在同一个…
混合推荐系统就是多个推荐系统“大杂烩”吗?
作者丨gongyouliu编辑丨zandy【导读】在本篇文章中,我们会介绍混合推荐系统(Hybrid Recommender Systems),就是利用多种推荐算法配合起来做推荐,期望避免单个推荐算法存在的问题,最终获得比单个算法更好的推荐效果。本篇文章我们从…

Python3中collections.OrderedDict介绍
Python3中的collections模块实现了特定目标的容器,以提供Python标准内建容器dict、list、set和tuple的替代选择,包括namedtuple、deque、ChainMap、Counter、OrderedDict、defaultdict、UserDict、UserList、UserString。这里介绍下OrderedDictÿ…

汗!雅虎中国个人空间
今天发现雅虎中国有了个人空间,偷偷试了下,让人失望到极点,几乎没有什么特点,和MSN很相似,空间相册放着好好的Flickr不用,偏偏弄了个很垃圾的相册,还有整合能力也不行。都不知道del.icio.us和Fl…

关于v$process与v$session中process的理解
v$session有个process字段,V$PROCESS有个SPID字段,这两个字段是不是一个意思呢?是不是都代表会话的操作系统进程呢?官方文档上的解释:SPID VARCHAR2(12) Operating system process identifierPROCESS VARCHAR2…

Python3中lambda表达式介绍
Python3中的lambda表达式或lambda函数是匿名函数(anonymous function),意味着该函数没有名称。def关键字用于在Python3中创建一个普通函数,类似地,lambda关键字用于在Python3中创建匿名函数。 Python3 lambda函数语法: lambda pa…
6大理由,告诉你为什么这个大会你不能错过! | 文末有福利
作者 | Carol出品 | 区块链大本营(blockchain_camp)* 文末可参与活动赢赠票!如果说有一个什么领域,能让中科院、华为、腾讯、京东、360、微众银行的大咖汇聚在一起,那一定是——区块链。悄咪咪地给大家剧透一下&#x…

魔与道的反复较量 反垃圾邮件技术
反垃圾邮件武器库不同的反垃圾邮件产品采用的技术有所不同,但总体来说,不外乎以下几种技术,其中,针对垃圾邮件的核心技术有贝叶斯智能分析、垃圾邮件评分、垃圾邮件指纹识别。转载于:https://blog.51cto.com/aonlin/17074

在Centos 7下编译openwrt+njit-client
首先要有一个centos7 step1:更新系统的源: yum install update 但是发现官方的源好像被墙了,于是自己又去换源,找163的源换。具体的操作最后的链接。 可是换完源之后发现163的源只支持到centos6、、、、、、但是就泪崩了。于是又把源换了回来…

Python3中内置函数callable介绍
Python3中的内置函数callable接受一个对象参数,如果此对象参数看起来可调用,则callable函数返回True,否则返回False。如果返回True,则调用仍有可能失败;但如果返回False,则调用对象将永远不会成功。 类是可…

户外广告新创意
近来,各大城市纷纷加大了对户外广告的监管力度,部分城市甚至停止审批户外广告牌。这让户外广告运营者和广告发布商甚为头疼。 长期以来,户外广告牌扮演着截然相反的“双重角色”,在户外广告运营者和广告发布商眼中,“寸…
百度重新定义「智能屏」,瞄准10后
加入「公开课」交流群,获取更多学习资料、课程及热招岗位等信息记者 | 阿司匹林作为中国智能音箱主力推手中的一员,百度从 2017 年已经开始布局。根据数据机构Strategy Analytics发布智能音箱市场报告,2019年第三季度,百度旗下人工…

jQuery最简单的表单提交方式
第一步:绑定事件 常用的与ajax相关的事件参考如下: 1、$(selector).click(function) 2、$(selector).change(function) 3、$(selector).keyup(function) 4、$(selector).submit(function) 提交表单前&#…

Python3中typing模块介绍
typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py。此模块为类型提示(Type Hints)提供运行时支持(This module provides runtime support for type hints)。从python 3.5版本开始将Typing作为标准库引入。 python3中增加了Function An…

显示所有文件和文件夹无论如何 无法被设置
问题:XP系统选显示所有文件和文件夹确定后没有任何反应再次打开文件夹选项里面仍是不显示隐藏的文件和文件夹 答案:在记事本粘贴下面文字,另存为所有文件, .reg 格式。成功的话图标变为绿色碎方块。在双击它。 Windows Registry E…
工作5年后才明白的道理:不起眼的技能中,藏着你的未来
编程圈儿一直都流传着一个调侃的段子:一流程序员靠数学二流靠算法三流靠逻辑四流靠SDK五流靠Google和StackOverFlow六流靠百度和自己琢磨低端的看高端的就是黑魔法!从过来人的角度看,这不仅仅是个段子,而是目前程序员的真实写照。…

Transform-style和Perspective属性
在《CSS3 Transform——transform-origin》一文中主要介绍了CSS3 Transform属性中的transform-origin属性的使用,其实在transform属性中,transform-origin属性仅是其中之一,要彻底理解transform属性,这是不够的,必须的…

Python3中__call__方法介绍
如果Python3类中有__call__方法,那么此类实例的行为类似于函数并且可以像函数一样被调用。当实例作为函数被调用时,如果定义了此方法,则x(arg1, arg2, …)是x.__call__(arg1, arg2, …)的简写。 为了将一个类实例当作函数调用,我们…

切尔西携手YouTube 英超第一家共享视频球队诞生
英格兰超级足球联赛冠军球队切尔西日前表示,已经与互联网视频服务网站YouTube签订了合作协议,未来将通过YouTube发布每日新闻和视频内容,从而也成为英超首支在线视频服务的球队. 据路透社报道,根据协议的内容,切尔西将建立一个YouTube旗下的品牌网站,其中将发布每日更新内容,当…
商汤联手华科:提出文字检测模型GNNets,新颖模块可解决几何分布难题
加入「公开课」交流群,获取更多学习资料、课程及热招岗位等信息编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】今年的ICCV,商汤科技及联合实验室共有57篇论文入选ICCV 2019(包含11篇Oral࿰…

(链表)反转链表Reverse List
逆转链表是简单而又简单的链表问题,其问题的方法之一可以设置三个指针,一个指向当前结点,一个指向前驱结点,一个指向后继指针 代码如下: class Solution { public:ListNode* ReverseList(ListNode* pHead) { // if(pHeadNULL || pHead->nextNULL) // return pH…

很长时间没有来了
好长时间没有来自己的博客了,更新的速度实在是太慢了,自己已经找了一份新的工作,给自己一个好的环境吧,有时间可以去学习更多的网络知识了.学习万岁!加一下,博友:思念狗的骨头:[url]http://starger.blog.51cto.com/ [/url] 他的文章还是比较不错的!转载于:https://blog.51cto.c…
十年磨一剑,可重构计算架构将引领未来芯片市场
2019 年 6 月,AI 芯片创业公司清微智能首款可重构计算架构 AI 芯片实现量产的消息在业内迅速传开,可重构计算架构芯片再次引发一波讨论的热潮。经历过十多年的技术积累,这枚小小的芯片在全球芯片市场中开启了全新的篇章。时光倒流,…

PyTorch中nn.Module类中__call__方法介绍
在PyTorch源码的torch/nn/modules/module.py文件中,有一条__call__语句和一条forward语句,如下: __call__ : Callable[…, Any] _call_impl forward: Callable[…, Any] _forward_unimplemented 在PyTorch中nn.Module类是所有神经网络模块…

压缩和归档及vi的使用
1.cat(more less head tail) /etc/passwd :查看/etc/passwd文件内容2.head -13 /etc/passwd | tail -1 :只查看/etc/passwd文件中第13行3.wc -l /etc/passwd :统计/etc/passwd文件有多少行4.grep -v "^#" /etc/inittab | grep -v &…
看到抖音上Python工程师晒得工资条,我沉默了......
我是个抖音中毒者闲来无事就喜欢刷抖音最近刷到了一个Python工程师的工资条然后我默默的打开看了然后我默默的关闭了我想这个工资算下来好像也不算高我就去其他渠道搜索了一下相关的Python工作岗位的工资好吧,都是比这个工资更高的emmm.....此时我很沉默后悔为什么我…

windows上通过cmake-gui生成pytorch工程
在Windows下通过cmake-gui.exe生成不带cuda的Torch.sln工程操作步骤:PyTorch版本使用1.8.1。首先可以先通过打开cmake-gui.exe,指定pytorch源代码目录和生成vs2017工程的位置;然后点击Configure,选中”Visual Studio 15 2017 Win6…