写点什么

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:49774
用户头像
赵钰莹 InfoQ高级编辑

发布了 654 篇内容, 共 388.4 次阅读, 收获喜欢 2112 次。

关注

评论

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

写在开课前

5x

Lambda 和 Stream API

学个球

Lambda Java 8 Stream<T>

android进阶之光!双非渣本Android四年磨一剑,进阶学习资料!

欢喜学安卓

android 程序员 面试 移动开发

一篇让你彻底理解网关是什么的文章

Java架构师迁哥

现成矿机挖矿软件系统APP开发案例

开發I852946OIIO

系统开发

RocketMQ解析

石刻掌纹

产品经理训练营笔记-认识产品经理(上)

.nil?

Android面试总结(一)

举头三尺有维尼

「架构师训练营 4 期」 第三周 - 002

凯迪

使用 JSX 建立 Markup 组件风格

三钻

组件化 前端进阶

一款dubbo服务可视化调试工具

程序员架构进阶

dubbo 工具 RPC 服务化 28天写作

RocketMQ源码分析之消息拉取流程

互联网架构师小马

Java架构师必会的知识清单,如何让你技术上的提升面试时的丰收

Crud的程序员

Java 架构 java程序员

游戏夜读 | 游戏作品的生命力

game1night

JVM内存模型总结和上手实践,亲测学完没脱发

互联网架构师小马

Redis布隆过滤器原理与实践

云流

Java redis 面试

python自学 第三章 python语言基础之保留字、标识符与内置函数

WEB前端修行日志

Python 编码格式

「架构师训练营 4 期」 第三周 - 001

凯迪

做事情的三条边

石云升

28天写作 基线 极限

基因编辑食品,能否端上我们的餐桌?

脑极体

如何实现CentOS服务器的扩容??

冰河

Linux centos 扩容 服务器

android开发要学什么语言!掌握这些Android开发热门前沿知识,挥泪整理面经

欢喜学安卓

android 程序员 面试 移动开发

我做了回视频,告诉你需要用到哪些工具

和牛

工具

编程语言学习心得 (完全版) -- 不要害怕遗忘和混淆

蔡超

程序员 个人成长 编程语言 go语言

C2C交易系统APP开发|C2C交易软件开发

开發I852946OIIO

系统开发

非科班生的逆袭:四面斩获字节跳动offer,聊聊我的个人历程

互联网架构师小马

Java 面试 算法 操作系统 计算机组成原理

python自学 第四章 python语言基础之变量

WEB前端修行日志

Python 编码格式

企业业务系统开发(1)

dowell87

28天写作

week8-conclusion

J

创业失败启示录|校园微生活之校园女神

青城

28天写作 创业失败启示录

区块链交易所系统开发|区块链交易所软件APP开发

开發I852946OIIO

系统开发

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