写点什么

Facebook 开源 Opacus:用于差分隐私的 PyTorch 库

2020 年 9 月 07 日

Facebook 开源 Opacus:用于差分隐私的 PyTorch 库

Opacus 是 Facebook AI 更为广泛努力的一部分,旨在推动用于机器学习和负责任的人工智能安全计算技术。总的来说,这是一个重要的踏脚石,使该领域在未来转向隐私优先的系统。


日前,Opacus 已开源发布。 差分隐私(Differential privacy,DP)是密码学中的一种手段,旨在提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会。读者可以查看这篇由 InfoQ 中文站翻译的文章《差分隐私简介》,以了解基本概念。


机器学习算法一般是用大量数据更新模型参数,学习数据特征。在理想情况下,这些算法学习到一些泛化性较好的模型,例如 “吸烟患者更容易得肺癌”,而不是特定的个体特征,例如 “张三是个吸烟者,患有肺癌”。然而,机器学习算法并不会区分通用特征还是个体特征。当我们用机器学习来完成某个重要任务,例如肺癌诊断,发布的机器学习模型可能在无意中透露训练集中的个体特征,恶意攻击者可能从发布的模型获得关于张三的隐私信息,因此使用差分隐私技术来保护机器学习模型是十分必要的。


通常,差分隐私需要在将原始数据输入本地机器学习模型之前,将少量噪声注入原始数据,从而使恶意攻击者难以从训练的模型中提取出原始文件。如果一个观察者观察算法的输出,无法判断它在计算中是否使用了某个特定个体的信息,那么这个算法就可以被认为是差分隐私的。


为了解决这一问题,日前,Facebook 发布并开源了 Opacus,这是一个新的高速库,用于训练具有差分隐私的 PyTorch 模型,比现有的最先进方法更具可扩展性。差分隐私是一个数学上严谨的框架,用于量化敏感数据的匿名化。人们对机器学习社区的兴趣越来越浓厚,它经常被用于分析。随着 Opacus 的发布,Facebook 希望能为研究人员和工程师在机器学习中采用差分隐私提供一条更简单的路径,并加速该领域的差分隐私研究。


Opacus 地址:https://github.com/pytorch/opacus


Opacus 提供了如下特征:


  • 速度:通过利用 PyTorch 中的 Autograd 钩子,Opacus 可以计算经过批处理的每个样本梯度,与现有的依赖微批处理的 DP 库相比,速度提高了一个数量级。

  • 安全性:Opacus 为安全关键代码使用了一个 密码安全、伪随机、GPU 加速的数字数生成器。

  • 灵活性:多亏了 PyTorch,工程师和研究人员可以通过将 Facebook 的代码与 PyTorch 代码和纯 Python 代码混合匹配,从而快速构建他们的想法原型。

  • 生产力:Opacus 提供了教程、辅助函数(可以在你的训练开始之前警告不兼容的层),以及自动重构机制。

  • 交互性:Opacus 可以跟踪你在任何给定时间点上的隐私预算(差分隐私中的核心数学概念),从而实现提前停止和实时监控。


Opacus 通过引入 PrivacyEngine 抽象定义了一个轻量级 API,它负责跟踪隐私预算和处理模型的梯度。你不需要直接调用它进行操作,因为它连接到标准的 PyTorch 优化器上。它在幕后工作,使得使用 Opacus 进行训练就像在你的训练代码的开头添加这些代码行一样容易:


model = Net()optimizer = torch.optim.SGD(model.parameters(), lr=0.05)

privacy_engine = PrivacyEngine( model, batch_size=32, sample_size=len(train_loader.dataset), alphas=range(2,32), noise_multiplier=1.3, max_grad_norm=1.0,)privacy_engine.attach(optimizer)# That's it! Now it's business as usua
复制代码


经过训练,得到的是一个标准的 PyTorch 模型,没有部署私有模型的额外步骤或障碍:如果今天可以部署一个模型,那么你就可以在用差分隐私训练后部署它,无需更改任何一行代码。


Opacus 库还包括预训练和微调的模型、针对大型模型的教程,以及为隐私研究实验设计的基础设置。它是开源的:https://github.com/pytorch/opacus


利用 Opacus 实现高速隐私训练 Facebook 表示,他们使用 Opacus 的目的是保护每个训练样本的隐私,同时限制对最终模型正确率的影响。Opacus 通过修改标准 PyTorch 优化器来实现这一目标,以便在训练期间执行(和测量)查分意思。更具体地说,他们的方法以差分隐私随机梯度下降(Differentially private stochastic gradient descent,DP-SGD)为中心。


这个算法背后的核心思想是,可以通过干预模型用来更新权重的参数梯度,而不是直接干预数据,从而保护训练数据集的隐私。通过在每次迭代中想梯度添加噪声,人们就可以防止模型记忆其训练实例,同时仍然可以进行融合学习。在训练过程中看到的许多批处理中,(无偏的)噪声将自然地趋于抵消。


这种每个样本的计算是构建 Opacus 的最大障碍之一。与使用 PyTorch 的典型操作相比,它更具挑战性,因为在 PyTorch 中,Autograd 计算整个批处理的梯度张量,因为这对于所有其他机器学习用例都是有意义的,并且它对性能进行了优化。为克服这一问题,Facebook 使用了一种有效的技术,在训练标准神经网络时获得所有需要的梯度向量。对于模型参数,则单独返回给定批处理中每个示例的损失梯度,例如:



这是 Opacus 工作流的示意图,在其中计算每个样本的梯度


通过在运行层时跟踪一些中间量,人们可以使用适合内存的任何批处理大小进行训练,这使得 Facebook 的方法与其他软件包中使用的替代微批处理方法相比,速度提高了一个数量级。


隐私保护机器学习的重要性

安全社区鼓励安全关键代码的开发者使用少量经过仔细审核和专业维护的库。这种“不要自己搞安全方案”原则有助于最大限度地减少攻击面,让应用开发人员专注于他们最擅长的事情:构建伟大的产品。随着机器学习的应用和研究不断加速,对于机器学习研究人员来说,在不减慢训练过程的前提下,获得简单易用的工具,以获得数学上严格的隐私保证是非常重要的。


Facebook 希望通过开发像 Opacus 这样的 PyTorch 工具,使此类隐私保护资源的访问更加民主化。Facebook 正在通过使用 PyTorch 的更快速、更灵活的平台,弥合安全社区和普通机器学习工程师之间的鸿沟。


建立社区

过去几年,隐私保护机器学习(Privacy-preserving machine learning,PPML)社区发展迅速。Facebook 表示他们对围绕 Opacus 形成的生态系统感到兴奋,这个生态系统由 PPML 的领导者组成。


OpenMined 是 Facebook 的主要贡献者之一,它是一个由数千名开发者组成的社区,他们在开发应用时考虑到了隐私问题。OpenMined 社区已经为 CrypTen 做出了贡献,并利用 PyTorch 的许多构件来支持 PySyft 和 PyGrid 的差分隐私和联合学习。作为合作的一部分,Opacus 将成为 PySyft 等 OpenMined 库的依赖。


Facebook 期待继续合作,进一步发展社区。


作者介绍:


Davide Testuggine、Ilya Mironov,均为 Facebook AI 应用研究科学家。


原文链接:


https://ai.facebook.com/blog/introducing-opacus-a-high-speed-library-for-training-pytorch-models-with-differential-privacy


2020 年 9 月 07 日 14:49932
用户头像
赵钰莹 InfoQ高级编辑

发布了 710 篇内容, 共 418.6 次阅读, 收获喜欢 2295 次。

关注

评论

发布
暂无评论
发现更多内容

江苏智慧社区管理系统开发,智慧小区可视化服务平台

135深圳3055源中瑞8032

BATJ真题突击:Java基础+JVM+分布式高并发+网络编程+Linux

Java架构之路

Java 程序员 架构 面试 编程语言

Vmware+Centos设置静态IP

千泷

13.3流处理计算:Flink,Storm,Spark Streaming

张荣召

13.1大数据计算引擎Spark(上)

张荣召

淘宝|蚂蚁|菜鸟|盒马|滴滴|饿了么面经,已拿多个offer(Java岗)

Java架构之路

Java 程序员 架构 面试 编程语言

天天CRUD,被领导怼,我是如何从小公司菜鸡到阿里P8架构师?,首次分享Java程序员黄金五年进阶心得

Java架构之路

Java 程序员 架构 面试 编程语言

年轻人不讲武德,乱用索引,你到底走了多少弯路?

比伯

Java 编程 架构 面试 程序人生

13.7分类聚类算法

张荣召

关于代码重构的灵魂三问:是什么?为什么?怎么做?

华为云开发者社区

重构 代码 代码重构

2020年度综合大盘点:火爆IT业的7大Java技术,每一项都是大写的“牛逼”!

云流

Java 编程 微服务

敏捷规划,让你做一个有计划的开发人

华为云开发者社区

敏捷 开发 规划

13.4大数据基准测试工具HiBench

张荣召

智慧公安动态大数据平台开发情报分析中心系统开发

135深圳3055源中瑞8032

13.6网页排名算法PageRank

张荣召

13.2大数据计算引擎Spark(下)

张荣召

区块链商品溯源APP开发,深圳区块链应用开发公司

135深圳3055源中瑞8032

AlibabaP8架构师整理,283页的Java核心资料pdf文档,学会后月薪4W没问题

Java架构之路

Java 程序员 架构 面试 编程语言

盘点2020 | 大龄程序员的进化(从自由职业者到讲师)

王磊

盘点2020

13.5大数据分析与可视化

张荣召

iOS面试基础知识 (三)

iOSer

ios 面试题 大厂面试 iOS面试 ios开发

盘点2020 | 2020年读过的这些书

xcbeyond

读书感悟 盘点2020 七日更

13.8推荐引擎算法

张荣召

如果云是水滴,Kubernetes就是水滴管理平台

华为云开发者社区

云计算 管理 k8s

DDIA 读书笔记(7)分布式系统的问题

莫黎

读书笔记 分布式系统

Alibaba技术专家必知必会的Java技术知识点,掌握这些理论+实践+技术是你通往阿里的路

Java架构之路

Java 程序员 架构 面试 编程语言

Spark的分布式存储系统BlockManager全解析

华为云开发者社区

spark 分布式 存储

13.9机器学习与神经网络

张荣召

未来30年推动全球经济增长的主要动力是数据资产

CECBC区块链专委会

区块链 移动互联网

13.10作业

张荣召

英特尔下一代10nm Ice Lake处理器登陆腾讯云,星星海自研二路服务器内“芯”强大

新闻科技资讯

Facebook 开源 Opacus:用于差分隐私的 PyTorch 库-InfoQ