联邦学习背景介绍
首先和大家分享下联邦学习的背景。
1. AI 落地的理想与现实
我们知道 AI 落地的时候,会遇到很多现实的问题:
现实中,我们的数据质量是非常差的,比如聊天数据中有很多噪音;
数据标签,收集是比较困难的,很多场景中的数据是没有标签的;
数据是分散的,(这也是最重要的一点)每家应用的数据不一样,比如腾讯用的是社交属性数据,阿里用的是电商交易数据,微众用的是信用数据,都是分散来应用的。现实中,如何进行跨组织间的数据合作,会有很大的挑战。
2. 国内数据监管法律体系研究
从 09 年到现在的 10 年时间内,国家关于数据的法律条例是趋向于严格化的,同时趋向于全面化,每个细分领域都纷纷出台了相应的条例和条款。相对来讲,让之前可行的一些数据合作方案变得不太可行。
3. 基于联邦学习的技术生态
针对上述问题,微众银行提出了基于联邦学习的技术生态,特点如下:
数据隔离:联邦学习的整套机制在合作过程中,数据不会传递到外部。
无损:通过联邦学习分散建模的效果和把数据合在一起建模的效果对比,几乎是无损的。
对等:合作过程中,合作双方是对等的,不存在一方主导另外一方。
共同获益:无论数据源方,还是数据应用方,都能获取相应的价值。
4. 联邦学习的分类体系
联邦学习的分类体系,包括:
纵向联邦学习,两个数据集的用户 ( U1, U2, … ) 重叠部分较大,而用户特征 ( X1, X2, … ) 重叠部分较小;
横向联邦学习,两个数据集的用户特征 ( X1, X2, … ) 重叠部分较大,而用户 ( U1, U2, … ) 重叠部分较小;
联邦迁移学习,通过联邦学习和迁移学习,解决两个数据集的用户 ( U1, U2, … ) 与用户特征重叠 ( X1, X2, … ) 部分都比较小的问题。
下面,重点分享下纵向联邦学习和横向联邦学习。
纵向联邦学习
1. 联合建模需求场景
举个例子:微众与合作企业进行联合建模,比如做信贷逾期模型,微众有 Y 数据,包括标签数据,逾期记录,用这样的数据可能会建一个很好的模型,但我们希望用更多的数据,比如合作方的标签数据和画像数据来更大的提升风控模型的效果和稳定性。
传统模式的问题是:
合作企业缺乏 Y 无法独立建立模型,需要微众把 Y 数据,带入到合作方的生产环境建模,但是由于国家的数据保护条款和各企业自身对数据的严格规定,得到的 X 数据不能全量的传输到微众。
针对这个问题,通过纵向联邦学习来解决。如右图,两边的数据都有共同的 ID,特征是完全不一样的,可以通过一方特征来弥补另一方特征的不足。
2. 同态加密技术保护隐私
纵向联邦学习的技术实现,首先应做好两点,来保护数据隐私:
建模样本 ID 差集不向对方泄露,在合作之初需要进行用户匹配,需要找出用户的交集,但是不能泄露差集,因为这是企业最核心的资产。
任何底层 ( X,Y ) 数据不向对方泄露,建模过程中如何保证数据不被泄露。
解决方案:
通过 RSA 和 Hash 的机制,保证双方最终只用到交集部分,且差集部分不向对方泄露。
采用同态加密技术,这个过程中,各方的原始数据,以及数据加密态都没有被传输。交互部分,双方通过损失中间结果,用同态加密的机制进行交互,模型训练完之后,会各自得到一个模型,各自的模型会部署在各自的一方,就是如果我只提供了 3 个特征,那么我只有 3 个特征的模型,只提供 2 个特征,就只有 2 个特征的模型,任何一方的模型都没法单独去应用,只有共同应用的时候,才能进行决策。
3. 基于隐私保护的样本 id 匹配
刚才提到基于隐私保护的样本 id 匹配,和大家分享下具体的技术方案。比如,A 方有 [u1,u2,u3,u4] 四个用户,B 方有 [u1,u2,u3,u5],那么整个过程中,如何保证双方知道 [u1,u2,u3],而 A 方不知道 B 方有 [u5],B 方不知道 A 有 [u4]?
这里是通过 RSA 和 Hash 的机制做到的,B 方会作为公钥的生成方,会把公钥给到 A 方,A 方基于 Hash 引用一个随机数,再交互传给 B 方,B 方同时做 Hash 然后传给 A 方,A 方会最后做一个结果的交集。整个过程中,你可以看到没有任何一个明文数据传递过来,即使采用暴力或者碰撞的方式,依然解析不出原始的 id。通过这套机制,我们很好的保护了双方的差集部分。
4. 同态加密
分享了匹配过程中隐私保护的问题,接下来分享一个通用的技术,同态加密。
刚才提到建模过程中,引用了同态加密技术,比如对两个数字进行加密,加密后两个数字的密文可以进行数学运算,比如加法,其结果依然是密文,对密文解密后得到的结果和它们明文的加法结果是一样的。
通过这样的同态加密技术,我们把它应用到机器学习,包括特征工程中。接下来会重点介绍,联邦机制下特征工程和机器学习建模的一些细节。
我们知道特征工程是机器学习建模中非常重要的一环,在联邦机制下,如何完成联邦特征工程?尤其 A 方只有 X 没有 Y,如果想做一个 WOE 或者 IV 值的计算是非常困难的。那么如何在联邦学习的机制下,A 方利用 B 方有 Y 的数据计算 WOE 和 IV 值,且在这个过程中 B 方没有泄漏任何数据?
首先,B 方对 y 以及 1-y 进行同态加密,然后给到 A 方,A 方会对自己的特征进行分箱处理,进而 A 方在分箱中进行密文求和的操作,再把结果给到 B 方进行解密,然后算出 A 方每个特征分箱的 WOE 值和 IV 值。在这个过程中,没有明文数据传输,A 方不知道 B 方的 y 值,同时 B 方也不知道 A 方每个特征的值是什么,从而在安全隐私保护的情况下,完成了特征工程的计算。
说完特征工程,再讲下最核心的机器学习,比如常见的逻辑回归,这是经典的 loss function 和梯度,刚才说的同态加密的特性,目前用到的是半同态的技术。所以,需要对 loss function 和梯度进行多项式展开,来满足加法操作。这样就可以把同态加密的技术应用在 loss function 和梯度中。
5. SecureBoost
在很多现实的业务应用中,树模型是非常重要的,尤其是 XGBoost,对很多应用来说,提升非常明显,因而被业界广泛使用。在联邦机制下,如何构建这样的树?这里我们提出了 SecureBoost 技术方案,双方协同共建一个 boosting 树,我们证明了整个过程中是无损的。图中为一些 paper 和链接,感兴趣的小伙伴可以查找下。
SecureBoost 的核心技术点。上图为基于 SecureBoost 构建的树,A 和 B 代表不同数据的 owner,L0,L1,L2,L3,L4 代表不同 feature 的分割点编码,整颗树由 A 和 B 共同维护,每一方只维护自己的树节点,对另外一方的树节点信息不可见(只知道编码,不知道编码具体含义),保证整个训练和预测过程都是安全的。
构建 SecureBoost 核心的关注点是如何构建分裂节点,尤其一方只有 X,另一方有 ( X,Y ) 的情况。
基于同态加密的机制,B 方会把 1 阶梯度和 2 阶梯度传递给 A 方,A 方基于分箱之后的结果算出每个分箱中的 1 阶梯度和 2 阶梯度的求和值,然后传递给 B 方,B 方会解密这个求和值,算出信息增益,然后给到 A 方。求分裂节点的核心就是如何算信息增益,通过这样的机制,就可以算出每个分裂节点,同时没有泄露任何隐私信息。
横向联邦学习
举个例子:微众和合作行共建反洗钱模型,期望优化反洗钱模型。因为,各自利用自家样本建立的反洗钱模型的效果和稳定性都不能满足现实需求。我们可以利用联邦学习的机制,充分利用多家的反洗钱样本,同时在不泄露样本的条件下,构建一个非常大的模型,可以看到横向联邦学习中,微众银行和合作行,都是有 ( X,Y ) 的。
技术层面上,采用了同态加密、Secret-Sharing 技术,整个过程中,双方交互的是模型和梯度,同时引入了 SecureAggregation 机制,让交互过程中的梯度也是很难被反解的。最终,大家都会得到一个相同的模型。横向联邦学习,综合多家样本,可以让模型更加稳健,效果更好。
下面分享下横向联邦学习的核心技术点,这是 Google 的两篇 paper ,第一个是每个端自己训练模型,然后发给云端进行综合各个模型的效果,但是这里面会有个问题,就是模型本身也可能会泄露隐私信息,所以引入了 SecureAggregation,各方在传输模型的时候会加一些噪音,通过云端来消除这些噪音,使数据和模型得到保护。
应用案例
联邦学习目前已经赋能众多关键领域,取得了不错的效果:
银行+监管,联合反洗钱建模
互联网+银行,联合信贷风控建模
互联网+保险,联合权益定价建模
互联网+零售,联合客户价值建模
以其中的两个场景以及在视觉领域的应用来说明:
1. 保险业个性化定价
对于保险公司如果想做个性化的定价,是一件非常困难的事情,保险公司只有一些业务数据、承保数据和理赔数据,通过这样的数据,对用户做千人千面的定价是非常难的。通过联邦学习机制,可以融合多个数据源,来构建这样一个千人千面的定价。
这是我们目前在做的案例,当你购买权益产品之后,如果违章了,可以帮你免赔,在这里每个人看到的价格是不一样的,这就是我们通过联邦学习帮它们做的。我们综合了出险数据和互联网数据,如标签、用户画像,构建了一个基于保险定价的联邦学习产品。
2. 小微企业信贷风险管理
很多时候对小微企业我们只有央行的征信报告,想要更精准的刻画企业的信用状况,需要更多的数据,比如发票、工商、税务的数据。
这是我们的一个案例,我们利用了开票金额和央行的征信数据共建了一个联邦学习模型,来预估每个企业的风险。
3. 联邦学习在视觉领域的应用
与 AI 公司探索重塑机器视觉市场,利用联邦学习的机制,相对于本地建模,进一步提升算法准确率,并且形成网络效应,降低长尾应用成本,提升视觉业务总体利润率。
这是联邦视觉在城市管理上的应用。
联邦学习开源平台:FATE
通过刚刚的介绍,相信大家对联邦学习能够做什么,有了大体的认识。而联邦学习想要落地,不可避免的就是开源,接下来为大家介绍下微众银行开源的联邦学习平台——FATE:
FATE 定位于工业级联邦学习系统,能够有效帮助多个机构在符合数据安全和政府法规前提下,进行数据使用和联合建模。
设计原则:
支持多种主流算法:为机器学习、深度学习、迁移学习提供高性能联邦学习机制。
支持多种多方安全计算协议:同态加密、秘密共享、哈希散列等。
友好的跨域交互信息管理方案,解决了联邦学习信息安全审计难的问题。
FATE 的 Github 地址:
https://github.com/FederatedAI/FATE
1. 里程碑
介绍下 FATE 的里程碑,FATE 在今年 2 月份首发了 0.1 版本,3 月份的时候有了第一位外部 Contributor,同时 GitHubStar 突破 100,5 月份发布了 0.2 版本,支持了联邦特征工程和在线推理,6 月份发布了 0.3 版本,把主要的合作伙伴迁移到了 FATE,并把 FATE 捐献给了 Linux Fundation,8 月份发布了 1.0 版本,支持 FATE-Flow 和 FATE-Board,还有些后续的计划,大家可以了解下。
2. 挑战
联邦学习从一项技术真正成为一个关键系统和产品方案时,我们遇到了下述挑战:
一站式建模过程的联邦化
MPC 协议下分布式算法 ( on WAN ) 易理解和易维护
跨站点数据传输安全性和可管理性,如何让交互部分是可以被管理和被审计的。
异构基础架构自适应,联邦学习可能会运行在 CPU、GPU 和端上,如何让上层不受底层的变化而变化。
3. 技术架构
接下讲下 FATE 的整体架构:
EggRoll:分布式计算和存储的抽象;
Federated Network:跨域跨站点通信的抽象;
FATE FederatedML:联邦学习算法模块,包含了目前联邦学习所有的算法功能;
FATE-Flow | FATE-Board:完成一站式联邦建模的管理和调度以及整个过程的可视化;
FATE-Serving:联邦学习在线推理模块。
一站式联合建模 Pipeline,其流程:在开发环境下,其流程是从联邦统计->联邦特征工程->联邦模型训练,当上线部署的时候会有联邦在线推理模块,底层则会采用多方安全计算协议去支持上层各种联邦算法。
这是 FATE 的五大核心功能,这里不再复述。
① FATE FederatedML
FATE FederatedML:
EggRoll & Federation API:底层是 EggRoll 的算子,比如 Map 和 MapValues,Remote 和 Get 可以完成整个分布式计算的抽象;
MPC Protocol:包括同态加密、秘密共享等多种多方安全协议,
Numeric Operator:会抽象出数学算子,比如加法或者乘法;
ML Operator:用建好的数学算子构建机器学习算子,而不用管底层的安全协议是什么;
Algorithms:有了 ML 算子之后就构建各种算法模型。
② EggRoll
EggRoll,是整个分布式计算和存储的抽象。面向算法开发者,通过 API 实现分布式计算和存储。上面为 EggRoll 的整体架构图。
③ Federated Network
Federated Network:联邦学习不仅需要分布式计算,还需要跨站点通信和交互,上层会提供一个 API 给到开发者,通过 Remote 和 Get 就可以完成数据点的收发。具体模块,如上图。
④ FATE-Flow
FATE-Flow:整个一站式联合建模 Pipeline 需要统一的调度管理。右边为 A、B 双方的建模流程,某些步骤是 A、B 双方共有的,某些步骤可能只有一方有,所以 FATE-Flow 完成了下述管理:
联邦机制下多方非对称 DAG 图 Paser
联邦建模生命周期管理
联邦建模实验管理
联邦建模模型管理
联邦多方任务调度
⑤ FATE-Board
FATE-Board 的目的是实现整个联合建模 Pipeline 可视化追踪,记录联邦学习的全过程,可以监控建模进行到哪个步骤,以及模型效果如何。
4. FATE 部署架构
这是 FATE 的部署架构,每一方都是差不多的,是一个对称的结构,通过 EggRoll 实现分布式计算和存储,通过 Federation Service 和外部交互。
5. FATE 应用
现实中,FATE 是如何应用的呢?这里和大家分享一个示意图,会在每一方部署一套 FATE 系统,双方都是在各自部署的 FATE 系统中进行交互。
6. 开发流程
如果大家对 FATE 感兴趣,作为开发者利用联邦学习框架实现算法,只需要四步:
① 选择一个机器学习算法,设计多方安全计算协议
② 定义多方交互的数据变量
③ 构建算法执行工作流
④ 基于 EggRoll & Federation Api 实现算法工作流中各个功能组件
7. 目前 FATE 项目中的算法和案例
这是目前 FATE 项目中的算法和案例,会根据需求,不断增加各种各样的算法。
最后分享下我们联邦学习的官网:
今天的分享就到这里,谢谢大家。
作者介绍:
范涛,微众银行高级研究员,微众银行联邦学习开源平台 FATE 和联邦学习联盟网络技术负责人。加入微众前,曾担任百度金融部门 AI 高级工程师,负责数据仓库 GlobalSearch 项目,百度舆情,大数据量化基金等多个项目。
本文来自 DataFun 社区
原文链接:
评论