概述
数据孤岛现象已经严重制约了机器学习的发展,为了解决该问题,业界提出了联邦学习。为了让更多人了解联邦学习,本文将从以下几个方面为大家介绍这门技术:
在机器学习不断发展壮大的今天,一方面我们感叹其取得的成就,比如:阿尔法GO击败了世界围棋大师柯洁;人脸识别技术帮助我们抓住了潜藏多年的逃犯;各大行业巨头都在大力发展运用机器学习技术。另一方面我们也应该认识到它巨大的潜能还未被发掘,比如:基于海量病例构建医疗辅助诊断系统,运行海量公司行为数据构建信贷风控模型帮助优质企业融资,基于全产业链数据提供个性化商品配货及营销策略等。这些应用都有巨大商业价值,为什么迟迟没有出现?我认为主要是因为数据孤岛问题。
当前机器学习的应用模式我将其概括为:信息技术公司通过各种手段收集数据,各自训练算法模型,再使用这些模型提升自己的服务质量,从而获得更多用户/数据。可以说数据已经成为一种重要的生产资料被用于扩大再生产了。按照这样的思路,各大信息公司(我更愿意称其为”数据财阀“)不但会想法设法的从用户那攫取数据,同时会像保护命根子一样维护自有数据,绝不可能将核心数据共享出来与其他厂商分享。这样想来我们离共产又稍稍远了一点点。
不光数阀们主观上不会愿意共享数据,从法律(用于保护弱者)的层面的也不许用户数据被滥用。比如:2018年欧盟正式实施《通用数据保护法案》、我国也有《中华人民共和国网络安全法》和《中华人民共和国民法总则》立法保护公民隐私数据。即便是为了促进经贸合作的RCEP协议,在第八章中也特别提出要注意保护区域内消费者个人信息安全。
从上面两点可以看出,我们在生产生活中产生的数据都以数据孤岛的形式存在于网络之中。但这真的有利于机器学习的应用发展么?
了解过机器学习的同学应该都知道这样一句话数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
。机器学习学习说穿了就是使用大量数据拟合出一组方程,用来表征数据的形态。只要数据量够大,你终究都会被方程所描述。而数据孤岛现象使各方都没法拥有更多的数据。比如每家医院仅有附近居民的诊疗记录样本量严重不足从而致模型出现偏差。在信贷领域银行一般只能用央行征信报告构建风控模型,其实上下游企业数据、行政数据、司法数据、舆情数据、税务数据等都可以从不同方面反映企业运行状态,用以构建更准确的风控模型。
简单来说AI的力量来自于大数据,但我们周围更多的是以据孤岛形式存在的小数据。我们需要解决:如何在满足数据隐私、安全和监管要求的前提下,设计一个机器学习框架,让人工智能系统能够更加高效、准确地共同使用数据,解决数据孤岛问题。怎么办呢?联邦学习提出了新的解决思路:数据不动模型动
基本思路
首先联邦学习在设计之初期望达到的目标是:1. 各方数据保存在本地,不泄露隐私也不违法;2. 多方参与者通过某种方式联合建立模型可以共同获利;3. 最终的效果与集中数据计算模型效果相同或相差不大。为了实现这个目标,联邦学习提出的核心思路是:各方数据在本地不动,通过交换模型信息,使模型成长起来。在这个过程中主要需要用于隐私保护的加密工具以及分布式的机器学习。
为了方便大家理解现在举一个小例子。假设我们需要养一只羊,这只羊用来类比我们需要训练的的机器学习模型。为了让这只羊茁长成长,我们需要给他喂草,也就是喂数据,最好是不同草场(公司)的草(数据)。原来我们的思路是各个草场将数据集中到一个地方供羊来吃,但是由于利益关系和数据安全的需要,集中获取数据成为障碍。这时联邦学习提出的思路就是让羊在各个草场移动吃草,草不出草场,所有人都没见过养这只羊的所有草。就如下图所示。
那么联邦学习具体怎么落地呢?下面本文将从联邦学习的三个分类场景:横向联邦、纵向联邦以及迁移学习来简单介绍联邦学习的实现方式。
联邦学习分类
横向切数据的联邦学习
横向联邦应用的场景是:各参与方数据的特征向量基本相同,但数据量较少,样本不重叠,系统通过联邦学习共同构建模型。现实中的场景比如之前提到的医院,每个医院都有一少部分人的体检记录,这些记录一般都有标准格式比如验血报告都是那些指标。各医院希望能汇聚所有数据训练诊疗辅助模型。再比如Google公司希望提升输入法的联想模型,而数据都在用户自有的手机、平板或电脑上,但数据特征向量都是相同的。这些情况就是横向联邦的范畴了。总结来说就是使用场景相同或相似,数据特征重叠多,但是用户重叠少,样本需要联合再做计算。
对于这种情况,联邦学习的解决步骤一般如下:
- 各自在本地建模:$ W_i $
- 在本地对模型进行加密:$[[W_i]]$ ([[x]]表示对x加密)
- 上传本地加密模型$[[W_i]]$
- 在服务器端整合上传的加密模型:$W_{new}=\sum_{k=1} ^k \frac{n_k}{n}[[W_i]]$
- 集群向各参与方下发新的模型$W_{new}$
- 在参与方中用 $W_{new}$ 更新 $W_{i}$
- 参与方用自己的属性继续训练$W_{new}$ 形成各自新的$W_i$
- 重复2-8步
在这个过程中核心就是在第4步中,服务器端如何将利用加密的的参数进行模型更新?这里使用到的技术是同态加密(Homomorphic encryption)。同态加密简单讲就是有这样一种算法,它允许人们对密文进行特定形式的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样。用符号表达就是$f([[x]],[[y]])=[[f(x,y)]]$ 。假设代数运算是加法,那么就是$[[x+y]]=[[x]] + [[y]]$ 。使用同态加密使得联合计算损失函数成为可能,大家可以通过下图感受一下(我还没太看懂)。在联邦学习中会大量使用同态加密算法。
纵向切数据的联邦学习
纵向联邦的应用场景是:各个机构、公司的服务用户都是一样的,但是各方拥有的用户数据是不同种类的,即数据的样本重叠,但特征重叠的部分较少。比如在上述构建风控模型的例子中,银行拥有的是企业征信数据,税务局拥有的是税务信息,不同信息服务公司可能有关于这个企业的舆论数据、行业数据等,只用将这样数据都合在一起才能更好的构建企业运营状况。再比如B站拥有你的视频喜好数据,淘宝京东拥有你购物喜好数据,豆瓣拥有你读书喜好数据,只有将他们的数据联合起来才能更好地对你进行用户画像。这种情况可以用下图来表示。
它的一般步骤如下;
- 加密样本对齐。是在系统级做这件事,因此在企业感知层面不会暴露非交叉用户。
- 对齐样本进行模型加密训练:
- 由第三方C向A和B发送公钥,用来加密需要传输的数据
- A和B分别计算和自己相关的特征中间结果,并加密交互,用来求得各自梯度和损失;
- A和B分别计算各自加密后的梯度并添加掩码发送给C,同时B计算加密后的损失发送给C;
- C解密梯度和损失后回传给A和B,A、B去除掩码并更新模型。
在上述两个模型中都有协调者C,但其实在增加步骤后,可以将协调者去掉。
迁移学习
在理解了横向联合和纵向联邦后,迁移学习所应用的场景就很好解释了,即样本和特征都只是部分重叠。如下图所示
迁移学习的一般思路是:
- 双方交换公钥
- 双方分别计算加密和交换中间训练结果
- 双方计算加密后的梯度,加上混淆码发给对方
- 双方解密梯度,并交换,反混淆并更新本地的模型
应用、价值及发展方向
现在联邦学习已经在某些领域进行了应用,国外以Google为首主要在横向联邦上进行了探索,国内以微众银行为代表在纵向联邦上进行了发掘。目前看联邦学习与广告推荐、车险定价、信贷风控、销量预测、视觉安防、辅助诊断、自动驾驶等都能擦出不少火花。这些例子都可以在《联邦学习白皮书V2.0》中找到。
联邦学习有重大价值,在公共层面上:1、加速人工智能技术创新发展;2、保障隐私信息及数据安全;3、促进全社会智能化水平提升。在商业层面上:1、带动跨领域的企业级数据合作;2、催生基于联合模型的新业态和模式;3、降低技术成本促进创新技术发展。
当然联邦学习还有很多方向值得研究,比如:如何抵御攻击(某一数据方故意破坏模型或反猜他人数据)。在联邦的机制下如何进行利益分配,这一块结合区块链技术可能就会有更加意想不到的效果。当然还有算法的效率以及联邦学习的应用都还有很多工作要做。
关于联邦学习的资料十分推荐大家看一下《联邦学习白皮书V2.0》、杨强教授在CCF TF 23 的演讲以及Google关于联邦学习的综述论文——Advances and Open Problems in Federated Learning。同时国内腾讯、百度、华为都有联邦学习相关的产品。如果想直接上手体验联邦学习,可以了解下fate开源框架,他是专门针对联邦学习的计算框架,封装了很多相关算法。
啰嗦几句
最后,我认为联邦学习是我目前了解到最有可能解决数据孤岛问题的方案了,值得持续跟踪深入了解。不过我一直在想,我们每个人产生数据为什么收益全部都让信息服务商占用了?希望有一天我能自由驱使我产生的数据,我可以决定将其分享给谁并从中获得收益。当然前提是不泄露我的隐私。其实我觉得这和数据使用并不冲突,因为在计算模型时,算法只需要知道有这样的一个人,产生了这样的一组特征向量就好,它并不关心这条数据是谁产生的,我只是老老实实的当一个分子或者分母就好了。如果真有这样一天,广大百姓能从自己的数据中获取收益,信息服务商能有更多数据训练优质模型,老牌的数据收集存储方当然也可以从中抽取数据管理费,这样3方获利人类是不是就能赢来更好的明天呢?