写点什么

Facebook 正式开源 CrypTen:基于 PyTorch 的安全机器学习工具

  • 2019-10-22
  • 本文字数:3973 字

    阅读完需:约 13 分钟

Facebook正式开源CrypTen:基于PyTorch的安全机器学习工具

机器学习通过基于云端或机器学习即服务(MLaaS)平台的实际应用提出了一系列安全和隐私挑战。尤其对于这些平台上可能不希望或无法共享未经加密数据的用户,他们可能因此无法充分利用机器学习工具。为了应对这些挑战,帮助人们更好地理解如何应用其中的某些技术,Facebook 发布了 CrypTen,这是新的基于社区的研究开源平台,旨在推动隐私保护机器学习领域的发展。


尽管人工智能社区最近在推进机器学习的应用方面取得了巨大的进步,但目前只有非常有限的工具来构建能够处理加密数据的机器学习系统。这限制了机器学习在必须进行加密以确保安全的领域中的使用,例如,涉及敏感医疗信息或数据的工作,为了保护隐私,人们希望对这些数据进行加密。就目前来讲,构建安全的机器学习系统来处理用例仍然是困难的,甚至是不可能的任务,因为功能强大、易于使用的框架无法有效地处理加密数据。


为了解决这一需求并加速这一领域的发展,Facebook AI 研究人员已经构建 CrypTen,并将其开源,这是一种新的基于 PyTorch 的、易于使用的软件框架,旨在促进安全和隐私保护机器学习的研究。


CrypTen 使机器学习研究人员(通常不是密码学专家)能够使用安全计算技术轻松对机器学习模型进行实验。通过利用和集成 PyTorch,CrypTen 为已经熟悉其 API 的机器学习研究人员和开发人员降低了门槛。


人工智能研究人员可以使用 CrypTen 来训练 PyTorch 模型,例如使用加密数据的 ResNet,同时保持 PyTorch 张量(torch.Tensor)的熟悉外观和感觉。例如:


x = torch.tensor([1, 2, 3]) y = torch.tensor([4, 5, 6]) z = x + y
复制代码


可以修改如下:


x_enc = crypten.cryptensor([1, 2, 3])y_enc = crypten.cryptensor([4, 5, 6])z_enc = x_enc + y_enc
复制代码


CrypTen 提供了一座桥梁,将成千上万的机器学习研究人员已经熟悉的 PyTorch 平台和关于算法和系统的长期学术研究连接起来,这些算法和系统能够有效地处理加密数据。由于安全计算技术有各种各样的取舍,比如更高的计算和通信要求,或者功能空间有限,因此对人工智能学术界来说,探索这一领域还有很长的路要走。但是我们相信,CrypTen 将会帮助学术界和私营行业的研究人员迈向未来,在这个未来中,安全计算技术已经成为机器学习框架本身不可分割的一部分,因此,研究人员和工程师可以在必要时无缝地过渡到保护隐私的机器学习。


我们将在 PyTorch 开发者大会上展示 CrypTen 以及其他新的研发工具。要获得 CrypTen,可以访问:https://facebookresearch.github.io/CrypTen/ ,更多技术细节可以在 CrypTen 网站上获得。

CrypTen 的基本组件

CrypTen 目前实现了一种称为安全多方计算(Secure Multiparty Computation,MPC)的加密方法,我们希望在未来版本中增加对同态加密和安全区域的支持。MPC 不同于目前广泛使用的 RSA、AES 和其他加密协议,它允许在加密数据上进行计算,同时保护隐私。我们在密码学研究中经常使用的“诚实但好奇”模型(假设没有恶意和对抗性代理)中实现 MPC,但在 CrypTen 准备好用于生产环境之前,必须添加额外的保护措施。


译注: 安全多方计算的研究主要是针对无可信第三方的情况下,如何安全地计算一个约定函数的问题,在电子选举、电子投票、电子拍卖、秘密共享及门限签名等场景中有着重要的作用。

一个安全多方计算协议,如果对于拥有无限计算能力攻击者而言是安全的,则称作是信息论安全的或无条件安全的;如果对于拥有多项式计算能力的攻击者是安全的,则称为是密码学安全的或条件安全的。

已有的结果证明了在无条件安全模型下,当且仅当恶意参与者的人数少于总人数的 1/3 时,安全的方案才存在。而在条件安全模型下,当且仅当恶意参与者的人数少于总人数的一半时,安全的方案才存在。



上图提供了 CrypTen 的高级概述,其中数据和模型都使用 MPC 进行加密


与现有的安全计算协议实现相比,CrypTen 为机器学习研究者提供了三个主要好处。


  1. 首先是机器学习。该框架通过一个 CrypTensor 对象来呈现协议,该对象的外观和感觉完全类似于 PyTorch 张量。这使得用户可以使用自动微分和神经网络模块,类似于 PyTorch 中的模块。这有助于使用 PyTorch 的任何人都可以访问安全协议。

  2. CrypTen 是基于库的。与这个领域的其他软件不同,我们没有实现编译器,而是像 PyTorch 那样实现了一个张量库。这使得人们更容易进行调试、实验和探索机器学习模型。

  3. 该框架在构建时就考虑到了现实世界的挑战。CrypTen 不会缩减或过于简化安全协议的实现。各方在相互通信的独立进程中运行。各方也可以在不同的机器上运行。尽管目前 CrypTen 尚未投入生产环境,但它可以为使用安全协议进行机器学习的计算和通讯需求提供现实的洞见,从而促进高质量的研究。


以下代码片段显示了一个使用加密数据的加密模型的推理示例。


PyTorch 主代码段:


data = torch.load(DATA_PATH)model = torch.load(MODEL_PATH)model.eval()output = model(data)
复制代码


CrypTen 主代码段:


data_enc = crypten.load(DATA_PATH, src=1)model = crypten.load(PATH, dummy_model=ModelClass(), src=0)    dummy_input = torch.empty(data_enc.size()) private_model = crypten.nn.from_pytorch(model, dummy_input).encrypt(src=0)    private_model.eval()output_enc = private_model(data_enc)
复制代码


在发布时,CrypTen 涵盖了从简单的线性模型到 ResNet 的各种模型,我们正在努力与 PyTorch 模型的整个领域保持一致。



此实例展示了 MPPC 如何通过将数据划分给多方来加密信息,每一方都可以对其共享的数据执行计算(分别为 5 和 7),但却不能读取原始数据(12)。然后各方进行计算(“乘以 3”)。当合并输出时,结果(36)与直接对数据进行计算的结果相同。由于 A、B 双方并不知道最终结果(36),因此无法推断出原始数据点(12)。



该动图显示了 MPC 如何在任何一方都无法访问图像内容的情况下调整图片

机器学习对安全计算工具的需求

如今的机器学习系统通常可以在设备上安全地运行,例如,将语音转换成文本或将一种语言翻译成另一种语言。但是在部署这些模型之前,它们通常要接受公开公用的数据进行训练,比如 Wikipedia 条目,或已授权使用的数据集,如 ImageNet。但是,在许多情况下,要么训练所需的数据过于敏感而无法共享,要么存在安全、隐私、政策或法律障碍等。


例如,医学研究人员在对遗传数据进行群体研究时,就经常面临困难的挑战,因为这些数据非常敏感,无法轻松地在研究机构之间共享。同样,研究公司间的性别薪酬差距也很困难,因为共享薪酬数据会涉及到隐私问题。像 MPC 这样的安全技术为这些问题提供了潜在的解决方案,它允许各方以一种安全的方式加密它们的数据,同时仍然允许对加密数据汇总进行机器学习计算。


尽管 MPC 支持这样的用例,但由于缺乏熟悉的机器学习框架来抽象技术的复杂性,使用 MPC 进行机器学习研究仍然具有挑战性。CrypTen 通过揭示机器学习研究人员熟悉的抽象来满足这一需求。

示例用法和应用

CrypTen 可以加载预训练的 PyTorch 模型,让用户可以灵活的加载现有模型,以便使用加密数据进行推理。用户还可以使用熟悉的 PyTorch API 来训练加密模型。该框架支持快速增长的 PyTorch 张量算子子集,用户可以用它来构建像 ResNet 这样的模型。



该图显示了 CrypTen 如何通过加密张量替换标准的 PyTorch 张量,使研究人员能够轻松地使用 PyTorch 模型。虚线显示了我们希望在将来添加的 CrypTen 的潜在内容


CrypTen 可以执行任意数量的 MPC,也可以在算数和二进制(异或运算)共享之间进行转换,从而实现像 ReLU 这样的常见非线性的特性,而无需任何近似。这也支持像 max 这样的操作,这对于上下文绑定模型是必需的。


随着计算和通信的增加,安全计算基数也面临着性能下降的挑战。CrypTen 致力于解决这一问题,其方法是根据需要时将功能转移到 PyTorch 内核,例如,在 PyTorch 本身中添加对 int64 等数据类型的支持。深度学习系统必须能够大规模高效地运行,因此我们将在未来版本中继续改进性能。


这些功能使 Facebook 研究人员能够使用 CrypTen 构建保护隐私的上下文老虎机(Contextual bandit)模型。许多推荐系统都使用了上下文老虎机模型,在这些系统中,各方根据其环境的特定上下文选择一个手臂,然后为它们的行为获得奖励。各方将奖励作为学习信号,目标是使总奖励最大化,从而解决推荐或排名问题。


在这种情况下的保护隐私的变体中,各方都有不愿意与他方共享的上下文。CrypTen 允许我们在遵守这一要求的同时对模型进行训练。各方对其上下文进行加密,并使用加密模型来选择一只手臂。所选手臂只显示给拉手臂的一方。然后另一方接收到奖励,该奖励信号被加密,用来学习加密模型,从而关闭学习循环。


上下文老虎机模型有几个特征,这些特征对于许多基于 MPC 的系统来说都具有挑战性。可以有任意数量的参与方,但许多 MPC 协议是专门针对两个参与方。这些模型涉及到对 MPC 具有挑战性的计算,例如除法、求幂和求最大值。CrypTen 具有与多方协作的能力,其高效的云算法实现、在加法运算或异或运算共享之间来回切换,这使得像 max 这样的运算符,以及它熟悉的 PyTorch API,使我们能够快速训练这样的模型。

加速机器学习安全计算框架的研究

在过去的十年中,机器学习取得了翻天覆地的进步,部分原因是数据和计算的可用性以及易于使用的框架的发展。我们希望通过开发像 CrypTen 这样的工具,降低其他研究人员的进入门槛,我们可以帮助促进和加速开发新的机器学习安全技术的研究。


作者介绍:


David Gunning,技术项目经理;Awni Hannun,研究科学家;Mark Ibrahim,软件工程师;Brian Knott,研究工程师;Laurens van der Maaten,研究科学家;Vinicuis Reis,软件工程师;Shubho Sengupta,软件工程师;Shobha Venkataraman,软件工程师;Xing Zhou,人工智能研究工程师。


原文链接:


https://ai.facebook.com/blog/crypten-a-new-research-tool-for-secure-machine-learning-with-pytorch


2019-10-22 14:483321

评论

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

跟着卷卷龙一起学Camera--内存池浅析05

卷卷龙

ISP 9月月更

架构模块一作业

Diana S

架构实战营

深度剖析“八大排序”(下)- 交换排序 | 快速排序 & 优化 | 非比较排序_探寻一些不为人知的细节

Dream-Y.ocean

排序算法 9月月更

大数据ELK(六):安装Elasticsearch

Lansonli

ES 9月月更

HowTo:Pipy 如何修改请求和响应的内容

Flomesh

Service Mesh 服务网格

少儿编程是智商税?还是未来的生存技能?

博文视点Broadview

2022华为开发者大赛开学动员 开启想象力无限创新

华为云开发者联盟

云计算 后端 企业号九月金秋榜

原生Redis跨数据中心双向同步优化实践

京东科技开发者

数据中心 幂等性 同步 数据容灾 Redis 数据结构

【数据结构与算法】2道面试真题,带你领略算法思想【附思路、动图、源码】

Dream-Y.ocean

面试 链表 9月月更

深度剖析“八大排序”(上)_ 探寻一些不为人知的细节

Dream-Y.ocean

排序算法 9月月更

C++来时路 _ 重温经典之C++类和对象 | 三大特性之一 - 封装 | 腾讯面试题

Dream-Y.ocean

c++ 封装 底层 腾讯面试 9月月更

前端三件套 HTML+CSS+JS基础知识内容笔记

明金同学

前端

打印 Logger 日志时,需不需要再封装一下工具类?

程序员小航

Java 日志 slf4j

跟着卷卷龙一起学Camera--内存池浅析06

卷卷龙

ISP 9月月更

【数据结构与算法】粽子树?二叉树_关于堆你不知道的事情

Dream-Y.ocean

栈和队列 9月月更

openjdk镜像的tag说明

程序员欣宸

Docker Docker 镜像 9月月更

【数据结构与算法】详解 “清华大学(考研)OJ题”_ 二叉树重要面试OJ题

Dream-Y.ocean

面试 算法 清华大学 9月月更

【中秋特辑-代码解析月饼节】C++比C语言更加规范、方便?是因为增加了如下特性 | C++98 & C++11 | C++难学?带领大家一步一步深度剖析 | 简单易懂

Dream-Y.ocean

c++ 底层 细节 9月月更

【数据结构与算法】二叉树题目很难?一句”技巧“巧做基础二叉树题目

Dream-Y.ocean

二叉树 二叉树遍历 9月月更 技巧总结

怎样提高报表呈现的性能

陈橘又青

sql 9月月更

议题征集:NGINX Sprint China 2022 线上大会

NGINX开源社区

nginx 开源软件 Sprint

Notebook交互式完成目标检测任务

华为云开发者联盟

人工智能

【数据结构与算法】一篇文章带你玩懂 “栈和队列”(增、删、查、改)的实现_【附源码、动图】

Dream-Y.ocean

队列 数据结构与算法 9月月更

最高增强至1440p,阿里云发布端侧实时超分工具,低成本实现高画质

阿里云大数据AI技术

机器学习 企业号九月金秋榜

【数据结构与算法】LeetCode面试真题,带你领略算法思想

Dream-Y.ocean

面试 队列 9月月更

从东南亚到中东,为什么社交类产品成为游戏出海的突破口?

融云 RongCloud

白皮书 社交网络 出海 社交娱乐

读书笔记|择一城以定财富,择一行以定发展

宇宙之一粟

读书笔记 职业 个人感悟 9月月更

【web开发基础】php开发基础快速入门(1)-PHP介绍及开发环境快速安装和基本使用介绍

迷彩

Web应用开发 php开源 9月月更 web开发基础

跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波

华为云开发者联盟

Python 人工智能 企业号九月金秋榜

明道云新增四项国产信创平台兼容性认证

明道云

【数据结构与算法】“堆”还能这样用_堆的应用

Dream-Y.ocean

面试 9月月更

Facebook正式开源CrypTen:基于PyTorch的安全机器学习工具_AI&大模型_David Gunning_InfoQ精选文章