今天我们来讲下最近⽐较博眼球的联邦学习。应该很多⼈听过但是始终都没懂啥是联邦学习?百度⼀下发现⼤篇⽂章都说可以⽤来解决数据孤岛,那它⼜是如何来解决数据孤岛问题的?对于联邦学习,⼤部分⽂章还都处于其学术分享会的报道阶段,并未详细介绍联邦学习的实现⽅法,难以理解其真容,本篇⽂章将从技术⾓度介绍联邦学习。
1、联邦学习的背景介绍
近年来⼈⼯智能可谓风风⽕⽕,掀起⼀波⼜⼀波浪潮,从⼈脸识别、活体检验发现刑事案件报警到阿尔法狗⼤战⼈类围棋⼿李世⽯、再到⽆⼈驾驶、以及已被普遍应⽤的精准营销,AI逐步进⼊⼈们⽣活的⽅⽅⾯⾯。当然也不免出现部分过度吹捧,导致对AI的误解--AI⽆所不能,既然这么好⽤,为啥我不能拿来⽤⼀下?在追逐AI的同时却忽略了⼀点,AI是靠数据来喂的,⽽且是⼤量优质数据。
现实⽣活中,除了少数巨头公司能够满⾜,绝⼤多数企业都存在数据量少,数据质量差的问题,不⾜以⽀撑⼈⼯智能技术的实现;同时国内外监管环境也在逐步加强数据保护,陆续出台相关政策,如欧盟最近引⼊ 的新法案《通⽤数据保护条例》(GDPR),我国国家互联⽹信息办公室起草的《数据安全管理办法(征求意见稿)》,因此数据在安全合规的前提下⾃由流动,成了⼤势所趋;在⽤户和企业⾓度下,商业公司所拥有的数据往往都有巨⼤的潜在价值。两个公司甚⾄公司间的部门都要考虑利益的交换,往
往这些机构不会提供各⾃数据与其他公司做与单的聚合,导致即使在同⼀个公司内,数据也往往以孤岛形式出现。
基于以上不⾜以⽀撑实现、不允许粗暴交换、不愿意贡献价值三点,导致了现在⼤量存在的数据孤岛,以及隐私保护问题,联邦学习应运⽽⽣。
2、联邦学习的概念
本质:联邦学习本质上是⼀种分布式机器学习技术,或机器学习框架。
⽬标:联邦学习的⽬标是在保证数据隐私安全及合法合规的基础上,实现共同建模,提升AI模型的效果。
前⾝:联邦学习最早在 2016 年由⾕歌提出,原本⽤于解决安卓⼿机终端⽤户在本地更新模型的问题;
3、联邦学习的分类
我们把每个参与共同建模的企业称为参与⽅,根据多参与⽅之间数据分布的不同,把联邦学习分为三类:横向联邦学习、纵向联邦学习和联邦迁移学习。
3.1 横向联邦学习
适⽤场景:
横向联邦学习的本质是样本的联合,适⽤于参与者间业态相同但触达客户不同,即特征重叠多,⽤户重叠少时的场景,⽐如不同地区的银⾏间,他们的业务相似(特征相似),但⽤户不同(样本不同)
学习过程:
step1:参与⽅各⾃从服务器A下载最新模型;
step2:每个参与⽅利⽤本地数据训练模型,加密梯度上传给服务器A,服务器A聚合各⽤户的梯度更新模型参数;
step3:服务器A返回更新后的模型给各参与⽅;
step4:各参与⽅更新各⾃模型。
步骤解读:在传统的机器学习建模中,通常是把模型训练需要的数据集合到⼀个数据中⼼然后再训练模型,之后预测。在横向联邦学习中,可以看作是基于样本的分布式模型训练,分发全部数据到不同的机器,每台机器从服务器下载模型,然后利⽤本地数据训练模型,之后返回给服务器需要更新的参数;服务器聚合各机器上的返回的参数,更新模型,再把最新的模型反馈到每台机器。
在这个过程中,每台机器下都是相同且完整的模型,且机器之间不交流不依赖,在预测时每台机器也可以独⽴预测,可以把这个过程看作成基于样本的分布式模型训练。⾕歌最初就是采⽤横向联邦的⽅式解决安卓⼿机终端⽤户在本地更新模型的问题的。
3.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去除掩码并更新模型。
步骤解读:我们以线性回归为例具体说明其训练过程。
存在数据集  ,A和B分别初始化模型参数
其⽬标函数为:
超详细的学开车步骤
令: ,且对原⽬标函数同态加密后可表⽰为:
,  表⽰同态加密,  , ,  ,
因此有  ,同理可得  ,
梯度可表⽰如下:
具体训练步骤如下:
在整个过程中参与⽅都不知道另⼀⽅的数据和特征,且训练结束后参与⽅只得到⾃⼰侧的模型参数,即半模型。预测过程:
由于各参与⽅只能得到与⾃⼰相关的模型参数,预测时需要双⽅协作完成,如下图所⽰:
共同建模的结果:
双⽅均获得数据保护
共同提升模型效果
模型⽆损失
3.3 联邦迁移学习
适⽤场景:
当参与者间特征和样本重叠都很少时可以考虑使⽤联邦迁移学习,如不同地区的银⾏和商超间的联合。主要适⽤于以深度神经⽹络为基模型的场景。
迁移学习介绍:
迁移学习,是指利⽤数据、任务、或模型之间的相似性,将在源领域学习过的模型,应⽤于 ⽬标领域的⼀种学习过程。
其实我们⼈类对于迁移学习这种能⼒,是与⽣俱来的。⽐如,我们如果已经会打乒乓球,就可以类⽐着学习打⽹球。再⽐如,我们如果已经会下中国象棋,就可以类⽐着下国际象棋。因为这些活动之间,往往有着极⾼的相似性。⽣活中常⽤的“举⼀反三”、“照猫画虎”就很好地体现了迁移学习的思想。
迁移学习的核⼼是,到源领域和⽬标领域之间的相似性,举⼀个杨强教授经常举的例⼦来说明:我们都知道在中国⼤陆开车时,驾驶员坐在左边,靠马路右侧⾏驶。这是基本的规则。然⽽,如果在英国、⾹港等地区开车,驾驶员是坐在右边,需要靠马路左侧⾏驶。那么,如果我们从中国⼤陆到了⾹港,应该如何快速地适应 他们的开车⽅式呢?诀窍就是到这⾥的不变量:不论在哪个地区,驾驶员都是紧靠马路中间。这就是我们这个开车问题中的不变量。 到相似性 (不变量),是进⾏迁移学习的核⼼。
学习过程:
联邦迁移学习的步骤与纵向联邦学习相似,只是中间传递结果不同(实际上每个模型的中间传递结果都不同)。这⾥重点讲⼀下联邦迁移的思想:
源域:  ,⽬标域:  ,我们假设源域和⽬标域间存在共同样本  ,对于其共同样本存在 ,  分别为源域和⽬标域间的隐层特征不变量,我们定义对⽬标域的分类函数为:
⽬标函数:
整体⽬标函数为:
使⽤BP算法,根据⽬标函数  分别对  求梯度,双⽅交互计算梯度和损失需要⽤到的中间结果,重复迭代直⾄收敛。整个学习过程是利⽤A、B之间共同样本来学习两者间各⾃的特征不变量表⽰ ,同时利⽤A的所有样本label  和A的不变量特征  学习分类器。在预测时,  依赖于 由 组成的分类器,因此和纵向联邦相同需要两者协作来完成。本节参考⽂章:Secure Federated Transfer Learning
最后,附上联邦学习开源github:
欢迎⼤家⼀起讨论!