以下文章来源于Datawhale ,作者King James
Datawhale干货
作者:知乎King James,伦敦国王大学
知乎 | https://www.zhihu.com/people/xu-xiu-jian-33
前言:联邦学习是近些年研究非常热门的领域,目前在工业界很多领域已经落地应用了。本篇文章同样面向产品运营等非专业技术人士,通俗易懂地讲解什么是联邦学习,主要解决什么问题,以及在工业界的实际落地案例。
提到联邦(Federation),大家估计首先想到的就是英联邦或者美联邦,美国各个州组合在一起形成一个联邦。联邦学习( Federated Learning),字面直译也就是多方参与,共同学习。
联邦学习最早是谷歌在2017.4月提出的,谷歌为此专门出了一个漫画来解释什么是联邦学习。(链接:https://zhuanlan.zhihu.com/p/101644082)
谷歌最开始提出联邦学习时是为了解决C端用户终端设备上模型训练的问题。C端用户手机上的智能软件提供服务时背后都得依靠模型,而模型的训练学习全部要基于用户的数据。比如手机上的输入法,基于不同人的打字拼音习惯,输入法会不停更新会慢慢和每个人的打字习惯进行匹配,用户会觉得输入法越来越智能;
那么过去这些手机输入法是如何进行模型训练的?
过去的做法: 将用户每天产生的行为数据全部上传至云端服务器,部署在服务器上的模型基于上传的数据进行训练,然后更新模型,最终实际应用时本地需要请求云端服务。大致流程如下图:
上述这种模型训练的方式,我们也叫做“集中式模型训练”,这种方式有两个弊端:
为了解决上述的弊端,谷歌提出了一种新的解决方案,并将它命名为“Federated Learning”。总的来说就是:用户数据不出本地,所有模型的训练都是在设备本地进行。本地模型训练完毕后将得到的模型参数or下降梯度,经过加密上传至云端,云端模型接收到所有上传的加密参数or梯度后,结合所有的参数值进行统一的聚合,比如通过加权平均得到新的模型参数or下降梯度,然后将新的结果再重新下发到本地,本地更新得到一个全新的模型;
这种方式我们又叫作“分布式模型训练“,大致的做法如下图:
上述这种模型训练的方式有一个基本的要求:
所以上述这种联邦学习我们又叫作 “横向联邦学习” ,模型之间使用的特征一致,只是使用的样本数据不一样。比如说下图本地模型使用的用户特征都是一样的,但是每个本地模型只能使用本地这一个用户的数据,无法使用其他用户的数据进行训练。
关于模型特征和模型参数不了解的读者可以阅读我这篇:https://zhuanlan.zhihu.com/p/110166255
谷歌这种“分布式模型训练”的新模式一方面保护了用户隐私,用户数据不离开本地;另一方面训练好的云端模型又下放到本地进行应用,这样即使没有网络也可以使用。读者可能还会对上述的联邦学习方案存在以下几个疑惑:
联邦学习最开始被谷歌提出时是为了解决C端用户上传数据隐私问题。但是在实际工业界的问题是B端企业之间的数据孤岛问题。比如京东和腾讯之间的合作。京东和腾讯之间的用户肯定有绝大一部分是重叠的,京东有这部分用户的电商数据,腾讯有这部分用户的社交数据。如果二者将彼此之间的数据共享,那么彼此各项模型上的效果都会有大幅提升,但是实际开展时二者肯定不会共享彼此之间的数据。那么我们如何让双方在不交换源数据的前提下,彼此提升各自模型的效果了?
谷歌的联邦学习方案是“横向” 的,就像我们Part1.1里面说的,本地模型和云端模型用的特征都是一样的,模型的目标也是一样的。但是B端企业之间的模型目标不一样,特征也不一样,就像京东和腾讯,二者的用户存在重叠,但是场景不同,采集到的用户特征也存在一定差异。这种情况下的联邦学习方案我们叫做 “纵向”。
比如京东&腾讯的用户有ABCDE五个用户是重叠的,腾讯有用户的“性别”&“年龄”数据,京东有“常住区域”、“消费水平”&“购物频次”的数据,二者结合起来可以使用样本数据的所有特征建立一个效果更优的模型。纵向联邦学习的研究是由香港科技大学计算机科学与工程学系主任,第一位华人国际人工智能协会(AAAI)院士&AAAI执行委员会委员-杨强教授牵头发起的。
杨强教授的整体纵向联邦学习架构分为以下几个大的部分。
上图是杨强教授纵向联邦学习里面的架构,大家可以在众多联邦学习的文章中看到,整体还是比较抽象,我们以一个具体的案例来进行讲解。还是拿京东&腾讯合作的这个案例。
联邦迁移学习其实就是将联邦学习的思想和迁移学习的思想结合在了一起。横向联邦学习是特征一样,样本数据不一样。纵向联邦学习是样本有重叠,但是特征不一样。实际工业界还会有一些情况就是特征不一样,样本数据还没有重叠,这种情况下我们能不能联合建模?传统的方式其实就是迁移学习了,将这些数据进行升维或者降维,在子空间中可能会存在特征重叠或者用户重叠。子空间中的交互就可以进行迁移学习。那如何在迁移学习过程中保护各方的数据隐私,这时候引入联邦学习的思想即可。关于迁移学习后续会专门写一篇文章进行讲解,欢迎大家持续关注。
上面介绍了联邦学习的发展起源和各种分类,下面我们正式对于联邦学习进行一下定义。
我们采用微众银行发布的《联邦学习白皮书》里面的定义:
通过我们总结一下联邦学习的主要特征
联邦学习的框架中涉及到了各种各样的学科,需要各个方面一起进步进而推动联邦学习的发展;
如何更好地激励联邦学习中作出重要贡献的参与方?虽然参与的各方都是平等的,但是各方的贡献是完全不一样的。比如阿里和一些很小的互联网公司合作一起建立一个联邦学习模型,肯定阿里的用户数据更加丰富和更有价值,如何去激励这些在联邦学习生态中做出更多贡献的参与方,如何建立一种激励机制,这也是联邦学习未来重点研究的方向。
联邦学习目前在工业界落地最大的两个领域就是广告&金融风控;
互联网企业中的RTB广告,基于用户的实时请求为用户推荐他感兴趣的商品,这里面的推荐模型就需要大量用到用户的特征数据。就像Part1.2中介绍的,很多互联网企业只拥有用户的一部分特征数据,如果可以接入更多其他互联网企业的数据或者是投放广告主关于用户的数据,那么将大幅提升广告推荐的效果,既能提升点击率也可以提升广告主的ROI;联邦学习的出现就很好的解决了这个问题;
金融领域同样如此,很多用户在多家银行拥有信贷记录,甚至在一些互联网金融机构上拥有借贷记录。单个金融机构需要对该用户做出全面客观的资质评判就需要结合用户历史所有的金融记录才可以。但是各大金融机构之间除了央行统一管理的个人征信,其他数据之间彼此是不互通的,这些数据既是用户的个人隐私也是银行重要的资产。联邦学习的出现同样让各大金融机构之间可以联合建模,对于用户的资质进行全面客观的评价,降低贷款的违约率和资产的不良率。
关于更多案例可以详细阅读文章最后的引用《联邦学习白皮书》;
有些小伙伴可能会把横向联邦学习和边缘计算混淆,尤其是看了谷歌的这个漫画以后,觉得横向联邦学习和边缘计算有点像。横向联邦学习的出现是为了解决数据隐私的问题,将一些敏感数据在不离开数据原有方的基础上,让模型在本地完成训练后,然后上传加密的参数。而边缘计算的本意是将计算能力部署在设备上,设备请求实时响应,减少云计算中的网络延迟,这其中确实数据本身也不离开本地也保护了数据隐私。虽然二者有些交集但是出发点完全不一样。横向联邦学习是为了保护用户数据隐私,而边缘计算是为了确保服务可以及时响应降低减少云计算中的网络延迟。
最后感谢大家对于原创的支持,希望大家一键三连~
参考文献:
联邦学习诞生1000天的真实现状:https://www.leiphone.com/category/DataSecurity%20/rfPSGIjbS38DqTsm.html
关于联邦学习建模过程中算法交互内容的研究:https://youwuqiong.top/325471.html
纵向联邦学习简介及实现:https://segmentfault.com/a/1190000024464891
联邦学习白皮书-微众银行.pdf:https://pan.baidu.com/link/zhihu/7BhFzRuVhrijStITJTSTJt0CVDNOd1QwdFVn==