应该很多人听过但是始终都没懂啥是联邦学习?百度一下发现大篇文章都说可以用来解决数据孤岛,那它又是如何来解决数据孤岛问题的?
1、联邦学习的背景介绍
近年来人工智能可谓风风火火,掀起一波又一波浪潮,从人脸识别、活体检验发现刑事案件报警到阿尔法狗大战人类围棋手李世石、再到无人驾驶、以及已被普遍应用的精准营销,AI逐步进入人们生活的方方面面。当然也不免出现部分过度吹捧,导致对AI的误解–AI无所不能,既然这么好用,为啥我不能拿来用一下?在追逐AI的同时却忽略了一点,AI是靠数据来喂的,而且是大量优质数据。
现实生活中,除了少数巨头公司能够满足,绝大多数企业都存在数据量少,数据质量差的问题,不足以支撑人工智能技术的实现;同时国内外监管环境也在逐步加强数据保护,陆续出台相关政策,如欧盟最近引入 的新法案《通用数据保护条例》(GDPR),我国国家互联网信息办公室起草的《数据安全管理办法(征求意见稿)》,因此数据在安全合规的前提下自由流动,成了大势所趋;在用户和企业角度下,商业公司所拥有的数据往往都有巨大的潜在价值。两个公司甚至公司间的部门都要考虑利益的交换,往往这些机构不会提供各自数据与其他公司做与单的聚合,导致即使在同一个公司内,数据也往往以孤岛形式出现。
基于以上不足以支撑实现、不允许粗暴交换、不愿意贡献价值三点,导致了现在大量存在的数据孤岛,以及隐私保护问题,联邦学习应运而生。
1.1 目前面临的一些问题:
系统部署:移动手机和可穿戴设备是现代十分常见的数据产生设备。这些设备每天都会产生巨量的各种形式的数据。考虑到算力需求,数据传输以及个人隐私的限制,系统部署越来越倾向于在本地存储数据,模型计算由边缘设备完成。
数据孤岛:在大多数行业中,数据是以孤岛的形式存在的,由于行业竞争、隐私安全、行政手续复杂等问题,即使是在同一个公司的 不同部门之间实现数据整合也面临着重重阻力,在现实中想要将分散在各地、各个机构的数据进行整合几乎是不可能的,或者说所需的成本是巨大的。
1.2 联邦学习成为可行方案
如何在满足数据隐私、安全和监管要求的前提下,设计一个机器学习框架,让人工智能系统能够更加高效、准确的共同使用各自的数据,是当前人工智能发展的一个重要课题。我们倡议把研究的重点转移 到如何解决数据孤岛的问题。我们提出一个满足隐私保护和数据安全的一个可行的解决方案,叫做联邦学习.
2、联邦学习的概念
Build machine learning models based on data sets that are distributed across multiple devices while preventing data leakage.
分布在不同设备的数据拥有者在不暴露自己数据的基础上联合训练出模型的方法
本质:联邦学习本质上是一种分布式机器学习技术,或机器学习框架。
目标:联邦学习的目标是在保证数据隐私安全及合法合规的基础上,实现共同建模,提升AI模型的效果。
前身:联邦学习最早在 2016 年由谷歌提出,原本用于解决安卓手机终端用户在本地更新模型的问题;
2.1 联邦学习公式化定义
2.2 联邦学习与现有研究的区别
联邦学习而言,首先在于联邦学习中的工作节点代表的是模型训练的数据拥有方,其对本地的数据具有完全的自治权限,可以自主决定何时加入联邦学习进行建模,相对地在参数服务器中,中心节点始终占据着主导地位。
联邦学习的过程分为自治和联合两部分。
- 自治的部分:首先,两个或两个以上的的参与方们在各自终端安装初始化的模型,每个参与方拥有相同的模型,之后参与方们可以使用当地的数据训练模型。由于参与方们拥有不同的数据,最终终端所训练的模型也拥有不同的模型参数。
- 联合的部分:不同的模型参数将同时上传到云端,云端将完成模型参数的聚合与更新,并且将更新好的参数返回到参与方的终端,各个终端开始下一次的迭代。以上的程序会一直重复,直到整个训练过程的收敛。
3、联邦学习的分类
联邦学习可以用在C端,也可以用在B端。
3.1 联邦学习用在C端
FL应用在推荐系统 https://www.jianshu.com/p/770708d35b19
3.2 联邦学习用在B端
我们把每个参与共同建模的企业称为参与方,根据多参与方之间数据分布的不同,把联邦学习分为三类:横向联邦学习、纵向联邦学习和联邦迁移学习。
3.2.1 横向联邦学习
3.2.1.1 适用场景:
横向联邦学习的本质是样本的联合,适用于参与者间业态相同但触达客户不同,即特征重叠多,用户重叠少时的场景,比如不同地区的银行间,他们的业务相似(特征相似),但用户不同(样本不同)
3.2.1.2 学习过程:
step1:参与方各自从服务器A下载最新模型;
step2:每个参与方利用本地数据训练模型,加密梯度上传给服务器A,服务器A聚合各用户的梯度更新模型参数;
step3:服务器A返回更新后的模型给各参与方;
step4:各参与方更新各自模型。
由于各个参与方贡献的是数据的样本,因此对参与方贡献评估的思路就是看看它提供的样本对于训练有没有用,采用的方法是——删除法。
每次删掉一个参与方提供的样本,重新训练模型,计算删前删后两个模型预测能力的变化,记为影响度(Infuence Measure),用该指标衡量各个参与方的贡献。
步骤解读:在传统的机器学习建模中,通常是把模型训练需要的数据集合到一个数据中心然后再训练模型,之后预测。在横向联邦学习中,可以看作是基于样本的分布式模型训练,分发全部数据到不同的机器,每台机器从服务器下载模型,然后利用本地数据训练模型,之后返回给服务器需要更新的参数;服务器聚合各机器上的返回的参数,更新模型,再把最新的模型反馈到每台机器。
在这个过程中,每台机器下都是相同且完整的模型,且机器之间不交流不依赖,在预测时每台机器也可以独立预测,可以把这个过程看作成基于样本的分布式模型训练。谷歌最初就是采用横向联邦的方式解决安卓手机终端用户在本地更新模型的问题的。
3.2.2 纵向联邦学习
3.2.2.1 适用场景:
纵向联邦学习的本质是特征的联合,适用于用户重叠多,特征重叠少的场景,比如同一地区的商超和银行,他们触达的用户都为该地区的居民(样本相同),但业务不同(特征不同)。
3.2.2.2 学习过程:
纵向联邦学习的本质是交叉用户在不同业态下的特征联合,比如商超A和银行B,在传统的机器学习建模过程中,需要将两部分数据集中到一个数据中心,然后再将每个用户的特征join成一条数据用来训练模型,所以就需要双方有用户交集(基于join结果建模),并有一方存在label。其学习步骤如上图所示,分为两大步:
第一步:加密样本对齐。是在系统级做这件事,因此在企业感知层面不会暴露非交叉用户。
第二步:对齐样本进行模型加密训练:
step1:由第三方C向A和B发送公钥,用来加密需要传输的数据;
step2:A和B分别计算和自己相关的特征中间结果,并加密交互,用来求得各自梯度和损失;
step3:A和B分别计算各自加密后的梯度并添加掩码发送给C,同时B计算加密后的损失发送给C;
step4:C解密梯度和损失后回传给A和B,A、B去除掩码并更新模型。
步骤解读:我们以线性回归为例具体说明其训练过程。
具体训练步骤如下:
在整个过程中参与方都不知道另一方的数据和特征,且训练结束后参与方只得到自己侧的模型参数,即半模型。
3.2.2.3 预测过程:
由于各参与方只能得到与自己相关的模型参数,预测时需要双方协作完成,如下图所示:
3.2.2.4 共同建模的结果:
- 双方均获得数据保护
- 共同提升模型效果
- 模型无损失
3.2.3 联邦迁移学习
3.2.3.1 适用场景:
当参与者间特征和样本重叠都很少时可以考虑使用联邦迁移学习,如不同地区的银行和商超间的联合。主要适用于以深度神经网络为基模型的场景。
3.2.3.2 迁移学习介绍:
迁移学习,是指利用数据、任务、或模型之间的相似性,将在源领域学习过的模型,应用于 目标领域的一种学习过程。
其实我们人类对于迁移学习这种能力,是与生俱来的。比如,我们如果已经会打乒乓球,就可以类比着学习打网球。再比如,我们如果已经会下中国象棋,就可以类比着下国际象棋。因为这些活动之间,往往有着极高的相似性。生活中常用的“举一反三”、“照猫画虎”就很好地体现了迁移学习的思想。
迁移学习的核心是,找到源领域和目标领域之间的相似性,举一个杨强教授经常举的例子来说明:我们都知道在中国大陆开车时,驾驶员坐在左边,靠马路右侧行驶。这是基本的规则。然而,如果在英国、香港等地区开车,驾驶员是坐在右边,需要靠马路左侧行驶。那么,如果我们从中国大陆到了香港,应该如何快速地适应 他们的开车方式呢?诀窍就是找到这里的不变量:不论在哪个地区,驾驶员都是紧靠马路中间。这就是我们这个开车问题中的不变量。 找到相似性 (不变量),是进行迁移学习的核心。
3.2.3.3 学习过程:
联邦迁移学习的步骤与纵向联邦学习相似,只是中间传递结果不同(实际上每个模型的中间传递结果都不同)。这里重点讲一下联邦迁移的思想:
4. 联邦学习与分布式学习的不同之处
分布式学习,参数服务器将数据存储在分布式工作节点上,通过中央调度节点分配数据和计算资源。一切都由中央节点控制,工作节点没有决策权。
联邦学习,工作节点代表数据所有者。它具有本地数据的完全自治权,并且可以决定何时以及如何加入联合学习。
最后,附上联邦学习开源github:https://github.com/webankfintech/fate
https://zhuanlan.zhihu.com/p/79284686
https://www.jianshu.com/p/770708d35b19