不同于谷歌“联邦学习”,蚂蚁金服提出全新数据孤岛解决方案:共享机器学习

2019 年 8 月 19 日

不同于谷歌“联邦学习”,蚂蚁金服提出全新数据孤岛解决方案:共享机器学习

如果有A、B、C三位同学,他们各自手上有10、15、20块钱,这时需要在相互不知道对方有多少钱的情况下,不借助力第三方来计算三个人一共有多少钱。请问这时候,我们如何实现呢?——这,就是最经典的秘密共享场景。在看完这篇文章后,答案就出来了~


背景


互联网时代,一切基于数据。


随着人工智能的兴起,数据的质量和数量,已经成为影响机器学习模型效果最重要的因素之一,因此通过数据共享的模式来“扩展”数据量、从而提升模型效果的诉求也变得越发强烈。


但在数据共享过程中,不可避免会涉及到两个问题:隐私泄露和数据滥用。


提到这两个关键词,大家一定都对其背后的缘由有所耳闻:


第一则:2018 年 3 月,剑桥咨询公司通过 FaceBook 的数据共享漏洞,收集了 5000 万用户信息,据说有可能利用这些信息操控美国总统竞选,造成恶劣社会影响;事件曝光后,FB 公司股票大跌 7%,引发一系列后续问题。


第二则:2018 年 5 月,欧盟通过 General Data Protection Regulation(GDPR)法案,法案指出:所有与个人相关的信息都是个人数据,对数据的使用行为必须要有用户的明确授权。把对隐私保护的要求提到了一个新的高度。


随着对数据安全的重视和隐私保护法案的出台,以前粗放式的数据共享受到挑战,各个数据拥有者重新回到数据孤岛的状态,同时,互联网公司也更难以收集和利用用户的隐私数据。


数据孤岛现象不仅不会消失,反而会成为新的常态,甚至它不仅存在于不同公司和组织之间,在大型集团内部也存在。未来,我们必须面对这样的现状:如果我们想更好的利用数据,用大数据和 AI 做更多有意义的事情,就必须在不同组织之间、公司与用户之间进行数据共享,但这个共享需要满足隐私保护和数据安全的前提。


隐私泄漏和数据滥用如同达摩克利斯之剑悬在各个公司和组织头上,因此解决数据孤岛,成为 AI 行业需要解决的首要问题之一。


如何解决数据孤岛问题?


当前,业界解决隐私泄露和数据滥用的数据共享技术路线主要有两条。一条是基于硬件可信执行环境(TEE: Trusted Execution Environment)技术的可信计算,另一条是基于密码学的多方安全计算(MPC:Multi-party Computation)。


TEE 字面意思是可信执行环境,核心概念为以第三方硬件为载体,数据在由硬件创建的可信执行环境中进行共享。这方面以 Intel 的 SGX 技术,AMD 的 SEV 技术,ARM 的 Trust Zone 技术等为代表。TEE 方案的大致原理如下图所示:



目前在生产环境可用的 TEE 技术,比较成熟的基本只有 Intel 的 SGX 技术,基于 SGX 技术的各种应用也是目前业界的热门方向,微软、谷歌等公司在这个方向上都有所投入。


SGX(Software Guard Extensions )是 Intel 提供的一套软件保护方案。SGX 通过提供一系列 CPU 指令码,允许用户代码创建具有高访问权限的私有内存区域(Enclave - 飞地),包括 OS,VMM,BIOS,SMM 均无法私自访问 Enclave,Enclave 中的数据只有在 CPU 计算时,通过 CPU 上的硬件进行解密。同时,Intel 还提供了一套远程认证机制(Remote Attestation),通过这套机制,用户可以在远程确认跑在 Enclave 中的代码是否符合预期。


MPC(Multi-party Computation,多方安全计算)一直是学术界比较火的话题,但在工业界的存在感较弱,之前都是一些创业小公司在这个方向上有一些探索,例如 Sharemind,Privitar,直到谷歌提出了基于 MPC 的在个人终端设备的“联邦学习” (Federated Learning)的概念,使得 MPC 技术一夜之间在工业界火了起来。MPC 方案的大致原理如下图所示



目前,在 MPC 领域,主要用到的是技术是混淆电路(Garbled Circuit)、秘密分享(Secret Sharing)和同态加密(Homomorphic Encryption)。


混淆电路是图灵奖得主姚期智教授在 80 年代提出的一个方法。其原理是,任意函数最后在计算机语言内部都是由加法器、乘法器、移位器、选择器等电路表示,而这些电路最后都可以仅由 AND 和 XOR 两种逻辑门组成。一个门电路其实就是一个真值表,假设我们把门电路的输入输出都使用不同的密钥加密,设计一个加密后的真值表,这个门从控制流的角度来看还是一样的,但是输入输出信息都获得了保护。


秘密分享的基本原理是将每个数字随机拆散成多个数并分发到多个参与方那里。然后每个参与方拿到的都是原始数据的一部分,一个或少数几个参与方无法还原出原始数据,只有大家把各自的数据凑在一起时才能还原真实数据。


同态加密是一种特殊的加密方法,允许对密文进行处理得到仍然是加密的结果,即对密文直接进行处理,跟对明文进行处理后再对处理结果加密,得到的结果相同。同态性来自抽象代数领域的概念,同态加密则是它的一个应用。


当前,业界针对数据共享场景,利用上面的技术路线推出了一些解决方案,包括隐私保护机器学习 PPML、联邦学习、竞合学习、可信机器学习等,但这些方案只利用了其中的一部分技术,从而只适合部分场景,同时基本处于学术研究阶段,没有在生产环境落地。


共享机器学习:蚂蚁金服数据孤岛解决方案


为了更好的应对形势变化,解决数据共享需求与隐私泄露和数据滥用之间的矛盾,蚂蚁金服提出了希望通过技术手段,确保多方在使用数据共享学习的同时,能做到:用户隐私不会被泄露,数据使用行为可控,我们称之为共享机器学习(Shared Machine Learning)。


共享机器学习的定义:在多方参与且各数据提供方与平台方互不信任的场景下,能够聚合多方信息并保护参与方数据隐私的学习范式。


从 17 年开始,蚂蚁金服就一直在共享机器学习方向进行探索和研究,在结合了 TEE 与 MPC 两条路线的同时,结合蚂蚁的自身业务场景特性,聚焦于在金融行业的应用。


蚂蚁金服共享机器学习方案拥有如下特性:


  • 多种安全计算引擎整合,可基于不同业务场景来选择合适的安全技术。既有基于TEE的集中式解决方案,也有基于MPC的分布式解决方案;既可满足数据水平切分的场景,也能解决数据垂直切分的诉求;既可以做模型训练,也可以做模型预测。

  • 支持多种机器学习算法以及各种数据预处理算子。支持的算法包括但不限于LR,GBDT,Xgboost,DNN,CNN,RNN,GNN等。

  • 大规模集群化。支持大规模集群化,提供金融级的高效、稳定、系统化的支撑。


基于数年沉淀与积累,目前共享机器学习技术已在银行、保险、商户等行业成功落地诸多场景业务。通过在业务中打磨出的金融级共享机器学习能力,沉淀下来一套数据共享场景的通用解决方案,未来会逐步对外开放。


在几年的艰苦研发中,共享学习累积专利 50 余项。在 2019 中国人工智能峰会上,共享机器学习获得“紫金产品创新奖”,在 8 月 16 日的全球人工智能创业者大会上,获得“应用案例示范奖”。


下面,我们将分享基于上面两种路线的共享机器学习实践细节。


基于 TEE 的共享学习


蚂蚁共享学习底层使用 Intel 的 SGX 技术,并可兼容其它 TEE 实现。目前,基于 SGX 的共享学习已支持集群化的模型在线预测和离线训练。


1.模型在线预测


预测通常是在线服务。相对于离线训练,在线预测在算法复杂度上面会相对简单,但是对稳定性的要求会更高。


提升在线服务稳定性的关健技术之一就是集群化的实现——通过集群化解决负载均衡,故障转移,动态扩容等稳定性问题。


但由于 SGX 技术本身的特殊性,传统的集群化方案在 SGX 上无法工作。


为此,我们设计了如下分布式在线服务基本框架:



该框架与传统分布式框架不同的地方在于,每个服务启动时会到集群管理中心(ClusterManager,简称 CM)进行注册,并维持心跳,CM 发现有多个代码相同的 Enclave 进行了注册后,会通知这些 Enclave 进行密钥同步,Enclave 收到通知后,会通过远程认证相互确认身份。当确认彼此的 Enclave 签名完全相同时,会通过安全通道协商并同步密钥。


该框架具备如下特性:


  • 通过集群化方案解决了在线服务的负载均衡,故障转移,动态扩缩容,机房灾备等问题;

  • 通过多集群管理和SDK心跳机制,解决代码升级,灰度发布,发布回滚等问题;

  • 通过ServiceProvider内置技术配合SDK,降低了用户的接入成本;

  • 通过提供易用性的开发框架,使得用户在开发业务逻辑时,完全不需要关心分布式化的逻辑;

  • 通过提供Provision代理机制,确保SGX机器不需要连接外网,提升了系统安全性。


目前在这套框架之上已经支持包括 LR、GBDT、Xgboost 等多种常用的预测算法,支持单方或多方数据加密融合后的预测。基于已有框架,也可以很容易的扩展到其它算法。


2.模型离线训练


模型训练阶段,除了基于自研的训练框架支持了 LR 和 GBDT 的训练外,我们还借助于 LibOs Occlum 和自研的分布式组网系统,成功将原生 Xgboost 移植到 SGX 内,并支持多方数据融合和分布式训练。通过上述方案,不仅可以减少大量的重复性开发工作,并且在 Xgboost 社区有了新的功能更新后,可以在 SGX 内直接复用新功能,无需额外开发。目前我们正在利用这套方案进行 TensorFlow 框架的迁移。


此外,针对 SGX 当下诟病的 128M 内存限制问题(超过 128M 会触发换页操作,导致性能大幅下降),我们通过算法优化和分布式化等技术,大大降低内存限制对性能的影响。


基于 TEE 的多方数据共享学习训练流程如下:


  1. 机构用户从Data Lab下载加密工具

  2. 使用加密工具对数据进行加密,加密工具内嵌了RA流程,确保加密信息只会在指定的Enclave中被解密

  3. 用户把加密数据上传到云端存储

  4. 用户在Data Lab的训练平台进行训练任务的构建

  5. 训练平台将训练任务下发到训练引擎

  6. 训练引擎启动训练相关的Enclave,并从云端存储读取加密数据完成指定的训练任务。



采用该方式进行数据共享和机器学习,参与方可以保证上传的数据都经过加密,并通过形式化验证保证加密的安全性。


基于 MPC 的共享学习


蚂蚁基于 MPC 的共享学习框架分为三层:


  • 安全技术层:安全技术层提供基础的安全技术实现,比如在前面提到的秘密分享、同态加密、混淆电路,另外还有一些跟安全密切相关的,例如差分隐私技术、DH算法等等;

  • 基础算子层:在安全技术层基础上,我们会做一些基础算子的封装,包括多方数据安全求交、矩阵加法、矩阵乘法,以及在多方场景下,计算sigmoid函数、ReLU函数等等;同一个算子可能会有多种实现方案,用以适应不同的场景需求,同时保持接口一致;

  • 安全机器学习算法:有了基础算子,就可以很方便的进行安全机器学习算法的开发,这里的技术难点在于,如何尽量复用已有算法和已有框架,我们在这里做了一些有益的尝试,但也遇到了很大的挑战。



目前我们这套基于 MPC 的共享学习框架已支持了包括 LR、GBDT、GNN 等头部算法,后续一方面会继续根据业务需求补充更多的算法,同时也会为各种算子提供更多的技术实现方案,以应对不同的业务场景。


基于 MPC 的多方数据共享学习训练流程如下:



如图所示,训练步骤为:


  1. 机构用户从Data Lab下载训练服务并本地部署

  2. 用户在Data Lab的训练平台上进行训练任务的构建

  3. 训练平台将训练任务下发给训练引擎

  4. 训练引擎将任务下发给机构端的训练服务器Worker

  5. Worker加载本地数据

  6. Worker之间根据下发的训练任务,通过多方安全协议交互完成训练任务


训练引擎的具体架构如下:



其中 Coordinator 部署于蚂蚁平台,用于任务的控制和协调,本身并不参与实际运算。Worker 部署在参与多方安全计算的机构,基于安全多方协议进行实际的交互计算。


用户在建模平台构建好的训练任务流会下发给 Coordinator 的 Task Flow Manager,Task Flow Manager 会把任务进行拆解,通过 Task Manager 把具体算法下发给 Worker 端的 Task Executor,Task Executor 根据算法图调用 Worker 上的安全算子完成实际的运算。


利用这套方法,可以做到数据不出域就可以完成数据共享,训练工具可以部署在本地的服务器。


共享学习 VS. 联邦学习


目前,国内对于数据共享场景的机器学习解决方案,比较熟悉的可能是由谷歌提出的联邦学习概念。


经过我们的了解,其实联邦学习目前涉及两个不同的概念:


  • 第一种联邦学习,旨在解决云 + 端的训练过程中,端上的隐私不要被暴露的问题,是一个To C + 数据水平切分的场景。除了保护端上的数据隐私外,其重点还在于如何解决训练过程中,端自身可能掉线等问题。

  • 第二种联邦学习则主要用于解决To B场景中各方隐私不泄露的问题,即可以应用于数据的水平切分场景,也可以应用于数据垂直切分的场景。


它们侧重于不同的数据共享场景,采用不同的技术,相比之下,蚂蚁金服的共享学习兼容多种安全计算技术,并且支持多种机器学习算法和使用场景。


除此之外,共享学习和联邦学习的差异在于:


  1. 联邦学习只解决数据不出域的情况,这就限制了其可以使用的技术(只有严格的MPC算法才符合这个要求),而共享学习目前基于TEE的集中式共享学习技术,是联邦学习没有涉及的;

  2. 联邦学习讲究的是参与各方的“身份和地位”的相同,所以叫联邦;而共享学习则不强调各共享方的地位对等,在很多场景下,不同的参与方是拥有不同的角色的。


目前,数据共享下的机器学习仍然还有很多可突破的地方,这些不同只是对当前状态的一个比较,希望大家能对共享学习有更好的理解。


未来展望


让数据孤岛在安全环境下进行连接、合作、共创、赋能,是蚂蚁金服共享机器学习的核心使命。


共享机器学习作为一个安全与 AI 的交叉学科,正在越来越受到关注,尤其是在金融行业,有着广阔的应用空间。但是,这个领域的各项技术,也远未到成熟的阶段。我们团队经过两年的摸索,也只是取得了阶段性的一些成果,在算法的计算性能以及支持算法的多样性等各个方面,还有一段路要走。


9 月 27 日杭州云栖大会,蚂蚁金服将向外界首次分享共享学习的理念和实践,欢迎届时关注。后续我们也会分享更多共享学习方面的研究进展及实践经验, 欢迎业界同仁交流探讨,共同探索更多更强的数据孤岛解决方案,推进数据共享下的机器学习在更多场景下落地。


2019 年 8 月 19 日 15:368290

评论

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

架构师训练营—第六周学习总结

Geek_shu1988

架构师训练营第 2 期 第二周作业 1

月下独酌

架构师训练营第 1 期 -Week6 - 技术选型二学习总结

鲁小鲁

极客大学架构师训练营

架构师训练营第六周作业

郎哲158

极客大学架构师训练营

架构师训练营—第五周学习总结

Geek_shu1988

分布式CAP原理

Jacky.Chen

第六周作业

TheSRE

极客大学架构师训练营

doris临时故障恢复图

happy

架构师训练营 week2 学习总结

花果山

极客大学架构师训练营

架构师训练营 - 第 6周课后作业-CAP原理

树森

第六周-CAP原则理解

袭望

第二周作业

阿呆

架构一期第六周作业

Airs

架构师训练营第二周作业

张小胖

极客大学架构师训练营

第六周作业

Geek_ac4080

架构师训练营第二期 Week 2 总结

bigxiang

第 2 周 框架设计作业

心在那片海

架构师训练营第 1 期 -Week6 - 课后练习

鲁小鲁

极客大学架构师训练营

架构师训练营第六周总结

月殇

极客大学架构师训练营

架构师训练营—第五周作业

Geek_shu1988

第六周总结

Geek_ac4080

架构师训练营—第六周作业

Geek_shu1988

架构师训练营 Week6 - 技术选型 - 分布式数据库,NoSQL,Zookeeper,搜索引擎

极客大学架构师训练营

第二周课后练习

jizhi7

极客大学架构师训练营

week06学习总结

追风

架构师一期

架构师训练营 第六周学习总结

郎哲158

极客大学架构师训练营

技术选型(1) 课后作业

ABS

WK1作业

Gavin_From_Mars

第二周-总结

jizhi7

第六周作业 (作业一)

Geek_83908e

极客大学架构师训练营

第 2 周 框架设计总结

心在那片海

不同于谷歌“联邦学习”,蚂蚁金服提出全新数据孤岛解决方案:共享机器学习-InfoQ