近期,微众银行首席人工智能官、香港科技大学讲席教授杨强做客雷锋网AI金融评论与AI科技评论联合举办的「金融联邦学习系列公开课」,以“联邦学习前沿的研究与应用”为题,全面详尽地讲解了联邦学习如何直面数据孤岛和隐私保护的双重挑战。本文整理了这次演讲内容,文章略长,目录如下:
以下为杨强演讲全文内容与精选问答:
杨强:
今天的题目是和金融相关的,先给大家讲一下,为什么在金融行业有特别的需求来保护用户隐私。我希望大家记住一句话:数据不动,模型动。
1、AI发展困境:小数据与隐私保护
在金融行业,现在大部分的应用都是数据驱动的,却面临非常严峻的挑战。
首先人工智能的力量来自于大数据,但在实际运用过程中碰到更多的都是小数据。比方说法律案例,有人做过统计,案例最多也就收集到上万个。又比如金融反洗钱,因为反洗钱案例是少数的现象,所以每一个案例都非常重要。对于医疗图像,非常好的标注的医疗图像也非常少。所以我们可以发现:周边更多的是小数据,但AI恰恰需要使用大数据。
几个例子:首先是在金融领域,比如信贷风控、市场营销,都需要大量的数据训练。大额贷款风控的案例又非常少。要是来做深度学习模型,只用少量这种大额贷款的样本是远远不够的。
另外一个例子是智慧城市。智慧城市有很多的摄像头,每一个摄像头可以获取的数据其实是有限的,希望聚合不同摄像头的一些数据。但如果它们来自不同的公司,或涉及用户隐私,就无法简单粗暴合并。
大家都知道人工智能的一个未来(应用方向)是无人车,但是每一辆无人车所面临的新的数据却是有限的。如果要更新我们的模型,就需要大量新的数据,它来自于不同的无人车,每个车辆的数据里面肯定是有隐私,同时也是小数据。
又比如网购,像物流系统、供应链系统,有很多的仓储,如果要自动化,就有很多的监控的需求,这种数据往往是小数据,也是分散型的数据,把它聚合起来也不是那么容易。
比如拿手机看新闻,有很多推荐系统,每个手机上面所获取的用户喜好信息,也是小数据,聚合它也面临到用户隐私的问题。
问题是:周边都是小数据,是不是可以把它聚合起来,聚少成多?当然这个是我们最直接的想法,人工智能一开始的发展也是这么来做的,但是现在面临了严峻的挑战。
社会层面,对于隐私和安全的意识越来越强,政府的监管,相关法律法规越来越严。
欧洲首先推出来的法规叫GDPR。它有各种条款,最重要的一条是要保护隐私的数据,保证隐私权是掌握在用户手中。自从它2018年推出来以后,已经有不少的大公司被罚款,比如Facebook和Google。
在美国进展稍微慢一点,但现在加州的法律也跟上来了,叫CCPA。国内也是法律严格化、全面化,各行各业的法律法规都面世了。
2、联邦学习冲破孤岛,完成数据“拼图”
我们在训练模型过程中希望有海量的大数据,现实却是一个个数据的孤岛。想把数据孤岛连起来,形成一个大数据,却遇到了法律法规的严格限制。
我们面临的两个技术问题,也是我个人研究感兴趣的问题:第一个是如何用迁移学习来解决小数据,这个不在今天的讲座里。今天重点放在右边这个图:数据都是碎的,如果想把碎的数据拼起来,有什么办法?下面就要讲一下我们的解决方案,联邦学习(Federated Learning)。
Federated Learning,说白了想达到这样一种状态:有多个数据源,有多个数据孤岛,每一个数据源的数据都不动,都在本地。但是让这一些具有数据源的拥有方(Owner)能够达成一个协议,使得大家可以联合起来建立一个模型,就是联邦模型。可以有各种各样建立合作模型的方式和算法,但是总目的一样:就是改变以往的做法,让数据在本地不动,通过交换一些模型的信息,让模型成长起来。
这样做需要一些数学工具和计算工具,前者最突出的就是有关隐私保护、加密建模的工具;后者最突出的就是分布式的机器学习。
可能有些同学是第一次听到联邦学习这个名词,我用一个简单的例子来给大家进行解释。
假设用一只羊来类比机器学习模型,我们希望羊吃了草以后能够长大。
过去的做法是,把草买到一起来建立模型。比方说左边的模型,左边的箭头是指向羊的。羊不动,但是草被购买到中心。相当于用简单粗暴的办法来获取数据,形成大数据,来建立模型。
但我们希望能够保护各自的隐私,所以让草不动,让羊动。也就是说,我们带着模型到不同的草场去访问,那么久而久之羊就长大了———这个就是联邦学习的新思路,就是让草不出草场,本地主人无法知道羊吃了哪些草,但是羊还是长大了。
怎么落地?第一个做法,假设每一个数据拥有方具有不同的样本,但是纵向特征却基本一致。这就相当于我们有那么大的一个大数据的数据集,从横向进行切割,形成了一堆一堆的样本,他们的特征却是类似的。
比如每一个手机都是我们个人在使用,形成了一堆样本。有不同的手机,每个手机基本上取的这些特征都一样,但样本却不同。我们希望在数据不动的情况下,能够聚合这些手机上的数据的这些能力,建立大数据模型。
就像这个图左边所示的数据集们,依次对应右边各终端上面的数据。它们的特征是纵向的,X1、X2、X3是类似的,但样本U1、U2…U10却是不同的。所以这个叫横向切割,按样本切割,简称横向联邦学习。
横向联邦学习,用数学的形式表示它是一个矩阵。一个数据集是左上角,一个数据集是右下角,它们有很大的在特征方面的重叠,但是他们的样本用户却不重叠,可能他们有各自的标签。
左边和右边有各自的标签,但是我们希望利用所有的数据来建模,而不是仅仅靠一个终端上面的数据来建一个小模型,希望把他们聚集起来建立大模型,但是他们的这些数据不能动。
这时候就需要用到横向联盟学习的模型。简单来说,每个终端都和服务器有一个连接,要保证我们跟服务器的沟通,不是数据的沟通,而仅仅是模型参数的沟通。在这里参数是w1、w2直到wk,这些参数在旁边有两个直角括号([ ]),在数学上代表加密,所以在这里用到的是一个加密的数学模型。
这些参数加密以后,把加密的包送给服务器,服务器不懂加密包里面到底有什么,只知道这个是有关参数的加密包。现在有一种技术可以把这种加密包在服务器端进行合起来,合起来的结果会形成一个新的模型,就是上面所示的神经网络模型。这就是第一步到第六步的流程。
在数学上,这样的结合实际上是一种模型的叠加,两个不同的数据集,它建立的两个不同分类模型,一个是线性模型,另外一个可能是KNN模型,这两个模型合起来就会形成一个高维空间的模型。
我们希望在这个建模过程中,每一个数据集都不向服务器端泄露它本身的数据,只是它们的参数在进行沟通。而且参数的沟通也是加密的,这就保证了隐私。
细节来说,现在有一种特别好的加密方法,在两个加密包进行聚合的时候,可以不看每一个加密包里面的数据,但我们就把它的包装和他的内核进行调换,这样a的加密加上b的加密,就等于a加b的加密。
打个比方,两个包装好的东西合起来,包装就到外面来了,里面是两个东西的和。这个技术叫做同态加密,在座的同学如果有兴趣,网上现在有大量的资源。国内也有很多专家是在同态加密方面特别有成就。同态加密在过去做不好的一个原因是计算量太大,现在已经发现有很好的解决算法,再加上硬件各方面都有进步,所以同态加密已经不是问题了。
同态加密的效果激发了很多机器学习人的想象力。比如Sigmod曲线,它是非线性,可以用一个线性来近似,近似以后就可以去计算损失函数以及加密结果。同态加密分配律(distribution law)就使得它的总的加密变成每一项的加密之和。
谷歌首先看到了优势,就提出了一个叫
Federated Averaging
,是一个横向联邦学习的做法。
我们可以想象成一个联邦平均,就是有n个模型,现在要求它们的平均值,但这个事要在服务器端做的时候,我们不希望服务器能够看到每一项它所包含的内容,所以假设手机每一天获取了新的数据以后,我们要更新在手机上面的一些机器学习模型。比方说 next word prediction和人脸识别。我们就可以选择一些手机,用这个办法对它的新数据进行联邦求和,最后就在保护用户隐私的前提下,能够不断更新手机上的数据。
这个已经在Google、在安卓系统得到了应用,现在有众多的手机商,包括我们国内的手机商都非常感兴趣。其他的厂商比如物联网、智能家居的这些公司,如果还没有听说联邦学习的话,他们就会落伍了。
刚才讲的是横向联邦,是按用户来分割,按样本来分割。那有没有这种情况:样本几乎都一样,在不同的数据拥有方,但特征不一样。比如不同机构、公司之间,面临的用户几乎都是一样的,但是他们的特征不一样。
举例来说,视频网站有很多用户的视频喜好,卖书的网店几乎也有同样的用户集,但它们的特征却不一样,这边是有关书的,那边是有关视频的。又比如两个银行,一个银行可能有很多贷款,另外一个银行可能有很多理财,他们的用户群可能也是有很大的重叠。
过去的做法是把数据买过来,然后在一个服务器上加以聚合,现在这个事儿行不通了。我们就思考联邦学习能不能来做这个事儿。
这种联邦是特征不同,但是样本重叠,按照特征竖着来切,所以叫纵向联邦。如图所示,两个机构之间的沟通也是加密的模型参数,而不是数据本身。给到任意两个数据A和B,不一定所有的是样本都重叠。但是如果我们有办法找到足够多的重叠的那一部分,就可以在这一部分上进行建模,用联邦学习来建模。
-
在不泄露用户本身数据隐私的情况下,不告诉用户和特征值前提下,两个数据拥有方能够共同找到他们所共同拥有的样本。
-
在找到这些样本以后,利用这些样本作为训练数据来共同建模。再之后就是如何使用。
纵向联邦的大概思路是,这个模型是A方有一部分的模型,B方有另外一部分的模型。就像战国时代的虎符,一个印被切成两块,只有当这个印是能够完全重叠的时候,才能证明这个将军是得到了真正的国王的命令———
左边有模型A,右边有模型B,这两个合起来才能形成联盟来进行共同的推理。
再看细节:首先是有一个墙,这个墙表示数据不能通过墙来交换。左边有机构A,右边有机构B,这两个机构在沟通的时候要非常的小心,只能沟通一些加密后的模型参数。
这个算法用4个步骤在右边这里展开,下面我就先一步一步的来给大家进行讲解。
第一步:如图所示,假设左边这个机构有这么一个用户或者样本的一个集合X,右边也有一个样本的集合Y,在不暴露X和Y的前提下能够找到他们的交集。
第二步:算各自的模型,记住机构A要做一部分的模型,机构B要做另外一部分的模型。首先在机构A先做第一步,把初始参数和每一个样本做一下点积,把这个点积的结果加密,然后把它通过加密算法送给B。
第三步:B得到了这个包,不知道里面有什么,但它可以通过同态加密去更新对样本的计算结果,得到结果以后和真值去比对,就会得到一个损失值,它会把 loss再加密反馈给A。
往往在这个情况下,如果有一个组织者(Coordinator),它会使程序简化,所以 B也可以把这个结果直接给Coordinator。
第四步:Coordinator得到了这个结果以后,再加密这个结果,再加一些噪音,再分发给A和B,让它们各自去更新自己的模型参数,这就使得每一个参与方都不知道对方的数据和特征,同时它可以更新自己的参数。这个流程多次后,A和B的模型就逐渐形成了。
如果有一个新用户过来,就可以通过Party A和Party B各自的参与,通过一个类似的流程来完成———这就是在纵向联邦的前提下,特征不重叠、样本重叠,互相不知道对方样本的前提下,也能够建模。
总结:所谓横向联邦学习,按横向来切割数据,更多的使用场景在于很多个终端和一个服务器的联邦学习。纵向联邦学习,按特征来切割数据。使用时,大家基本是在同一个位置或者Level,两家公司之间的。
所以说左边横向联邦比较适用于toC,右边纵向联邦对toB比较适用。
特别要说的是,在18年初的时候,我们在微众银行发现,用户隐私的保护是让众多数据拥有方合作时的一个挑战,如何在不同的银行和机构之间联合建模,同时保护数据隐私?我们就发展出了toB的联邦学习。
谷歌的相关研究团队在一直是在安卓系统团队下面,所以他们比较关心横向联邦学习。现在美国和欧洲是横向比较多,在我们国内是纵向比较多。联邦学习现在是双头发展。
因为第三方有可能泄露用户隐私,是可以(去掉)的,只不过要多加一些步骤,整体步骤变得比较冗长,但是可以做到,这里不再展开。
联邦学习和区块链其实不一样,最重要的区别在于:联邦学习是利用数据的价值,它的一个特点是数据不能够被复制放到别的节点上。区块链是要保证信息的透明和不能篡改性,所以要把数据复制到不同的节点上。虽然最终的目的都是在多方形成共识、形成联合,但是他们确实有所不同。
从数学的角度,从计算机的角度来讲,引入一个多方机制时,要问以下三个问题:
第一问,一致性。现在有多方,那么我按照不同的次序来做事情,我得到的结果是不是一样?我们希望是一样的。对于数据库来说,查询结果一定要一样。联邦学习也是一样的。
第二问,原子性。当有一方挂了,大家是不是可以退到原来的状态。
第三问,虎符性,就是安全性。这对联邦学习是尤其重要的一个特性。但是区块链和这种多方计算、安全计算,以及我们所说的模型计算和数据的这种合作却无关。
刚才讲到要么样本有重叠,要么特征有重叠,但是如果两者都没有重叠,这个时候就要请出迁移学习。
迁移学习的思路是,假设两个数据集的样本和特征几乎都没有交集,我可以在他们的子空间里面找到有重叠的地方。怎么找?这就是通过同态加密和刚才所说的分布式交互机制。找到以后,就可以在子空间里面进行横向联邦或者纵向联邦了。
坏人是怎么混进来的?比方说做OCR(手写识别),我们让计算机识别0。如果不做加密,我们没有一个机制,这种所谓的对抗是可以做到的,坏人是可以通过参数或者一系列梯度的泄露可以反猜原始数据。
其中诚实(Honest)就是好人;半诚实(Honest-but-curious)就是好奇,但本身不坏。还有人是恶意的,想搞破坏,想得到用户隐私,然后获利。
对于不同的假设,可以设计不同的联邦学习算法和多方计算算法,还可以做零知识(Zero knowledge)和一些知识(Some knowledge)分类。服务器端也可以区分是不是恶意中心、恶意的数据节点和非恶意的数据节点。
比方说有一个手机,专门想设计一些虚假的数据,以此来控制整个服务器端的平均模型。怎么防止这个现象发生?这些问题在之后的系列公开课中会涉及,这些工作现在都是在进行当中的,大家可以去网上搜。
安全策略方面,有两个特别的例子,大家在网上都可以找到。一个叫做模型攻击,它通过对模型的参数动手脚来控制整个联邦模型。还有一种是对数据攻击,它参与到联邦计算里面,使得它对联邦模型的控制取得决定性的作用,这些都有文章和解决方案。
另外,怎么样能够持续鼓励这些不同的数据拥有方,持续参与到联邦建模里面来,使得每个人都不断的获得收益,同时使得集体的收益最大化?这是博弈论和经济学、模型应该做的事情,也有很多工作在开展这方面的研究。
在推荐系统和联邦学习的这种交集也可以产生,比方说两个数据方,推荐电影和推荐图书的,他们两个在商业上可能没有竞争,所以它们决定合作,但是又不想把隐私泄露给对方,他们就可以用以下的办法来做联邦学习:
ABC不同的数据拥有方,可以通过矩阵分解的办法,把每一方所拥有的用户数据看成是一些子矩阵的乘积,用线性代数形成这样一个子矩阵的乘积,这三个不同的用户就分解成三个用户的特征向量乘以一个图书的特征向量的矩阵,这些向量的计算就是我们通过联邦学习希望能够计算出来的。具体到怎么计算,这里有一个算法,看上去比较新颖和复杂,可能会把大家搞晕。
每一个数据拥有方,首先对自己的数据进行矩阵分解,然后再把里面的一部分参数,比如刚才所说的图书的本征向量进行加密,运到服务器端,就可以把这些不同的向量,通过横向联邦学习进行同态平均起来,然后再把平均的更新值再分发给不同的用户端。通过这样的一个做法,就可以做到在 Federated Averageing的框架下,做到矩阵的更新。
现在我们也可以推广到纵向推荐系统,就是他们的用户有很大重叠,但特征却没有重叠。微众银行现在推出了第一个用联邦学习、联邦推荐做的广告系统,所以叫做联邦广告。这个广告系统可以不知道用户的隐私,也可以不确切知道媒体的隐私。
因为我们希望得到的是大数据,也就是说数据来自不同的角度,比方说对用户贷款进行风险管理,需要财务、舆情、司法、税务、行政等等很多这样的数据,他们都是在不同的数据拥有方里面,我们希望是把它们形成一个联邦的联盟来共同建模。比如一个合作企业和一个银行,这是纵向联邦,因为用户有足够大的重叠,但是他们的特征却不一样,用刚才所说的那些算法做出来的效果,就提升了不少,在这里对应的就是贷款不良率的大幅下降。
我们现在跟一个瑞士的再保险公司就有深度的合作,所谓再保险就是对保险公司的保险,你可以想象在再保险公司下面有一大堆保险公司,这些保险公司既是竞争又是合作的关系,它们之间的合作就需要用到联邦学习。
可以通过纵向联邦,也可以通过横向联邦,还可以通过纵向和横向联邦的某种结合,变成小范围的横向联邦、大范围的纵向联邦。有各种各样非常有趣的结构,也取得了非常好的效果。
假设不同的计算机图像来自不同的公司,他们之间是有这种意愿去合作的。可以想象一个横向联邦学习系统,因为他们的图像样本不一样,但特征几乎都是相同,都是像素,所以可以用在智慧制造、安防、城市这些领域,现在也正在应用当中。
以我们跟极视角的合作为例,他的一个业务是帮助建筑公司去监控建筑工地的安全,这里有很多建筑公司本身的隐私,不想向其他的建筑公司去透露,但是他们每一家的数据又是有限的,通过联邦学习能够把总的模型建立起来分发给他们,能够满足他们安全施工的要求。
语音系统可能是来自不同的录音,比方说有的是服务中心的录音,有的是手机上的录音,有的是别的公司的录音,那么每一家的录音可能都是不同的这个角度来观察这些用户。有没有办法把这些录音给聚集起来,在不移动那些数据的前提下,建立一个总的模型,利用不同录音、语言、数据集的录音来训练我们的联邦模型?
实验室环境里的无人车,得到的数据是有限的,但是假设满大街的无人车,每一辆每时每刻都在获取新的数据。有没有办法不暴露每个无人车上具体的数据,同时把它聚集起来,能够形成一个联邦模型?具体做法是联邦学习加上强化学习,就是强化联邦学习。
里面有很多仓库的管理和监控,就用到刚才所说的计算机视觉和联邦学习的这种沟通。上下游的关系,库存的预测,是供应链里面的难题,也可以通过这种联邦学习来更好地解决。
畅想一下,未来有了联邦学习这样的技术,有了像GDPR还有用户隐私这样的监管要求,五年十年以后,我们的社会会发展成为一种什么样的形式?我也相信我们会到这样的一个社会节点上,有很多的联盟会形成,这就是生态。
有很多不同的公司自愿的组织起来,通过联邦学习,在没有顾虑的前提下能够自由合作,联邦学习的激励机制可以公平地让这种生态不断存活下去,越来越大,像雪球一样地扩大。它可以防止数据垄断,让拥有小数据的公司也可以活下去——我们所说的人工智能的社会性,这是真正能做到Ethical AI的一项技术。
Federated Learning这个词出现以后,我们就一直在想把这个词翻译成中文。我们考虑到,每一个数据拥有方就像一个“邦”,他们之间的关系,就像一个邦交。他们可能还有一个Coordinator,或者是他们共同有这么一个模型,大家在共同使用,这就像是大家所共有的一个服务方,就是一个“联邦”。
同时我们也领头建立了第一个IEEE标准,这个标准的制定现在还没完全结束,现在已经进入了最后关头。有众多的著名公司都参与到了这个标准里。当这个标准出现了以后,就会是世界上第一个国际的联邦学习标准,大家以后通过联邦学习合作的时候,就可以根据这个标准来进行,有一个共同的语言来交互。同时我们也在积极推动国内的各种标准,包括团体标准和国家标准。
假设我们做了一个联邦学习平台,用户会对平台的安全性有所疑虑,会担心存在后门。最好的办法是公开、开源,大家可以看到每一行代码,可以放心去用。我们从一开始就认为联邦学习的技术推动,离不开开源。所以我们开源了世界上第一个关于联邦学习的开源项目,被Linux foundation列为金牌项目,就是FATE系统。
这是一个工业级别的联邦学习,已经支持我刚才所说的横向联邦、纵向联邦、联邦迁移学习、联邦强化学习和联盟推荐。现在有新的版本支持异构计算,支持各种各样的联邦学习,并且我们跟VMWare深度合作、深度绑定,推出了一个系统,叫做KubeFATE的系统,帮助用户更好地在Cloud上面进行应用。
联邦学习还有什么值得研究?这里面还有太多事可以做了,比方说如何能够做到安全合规、防御攻击、提升算法效率、提升系统架构,如何做更多的技术应用,做很好的联盟机制、激励机制去鼓励大家。所以在各个方面我们只是开了个头,后面还有大量的工作是需要做的。
杨强:
首先是数据分布特点。分布式机器学习中数据一般被均匀(iid)的分布至各参与计算节点,目标是通过并行计算提升效率。联邦学习中数据天然的存在于不同领域、机构的数据孤岛中,数据分布差异大,不均匀(Non-iid)。另外分布式学习更关注效率,往往在数据中心进行,数据拥有方是同一个体。联邦学习更关注安全,数据拥有方是多个个体。
问:现在有公司在做区块链跟MPC(例如联邦学习,同态加密)的结合,您怎么看?
杨强:
区块链与联邦学习可以很好的结合互补。联邦学习可以用区块链的分布式记账等功能实现参与各方价值互换和有效激励,也可以用区块链去中心化的属性来实现参与联邦学习计算的中心节点的替代。区块链与联邦学习不同, 区块链把数据重复复制在各个节点实现共识机制,所有上链数据是公开的,而参与联邦学习的各方数据不同且是私密的。
问:联邦学习训练后的模型是一个公共的模型,而各个客户端的数据经常是Non-iid的,不知老师对此有何见解?
杨强:
(横向)联邦学习的效果提升主要来源于各方样本量的聚合,训练的目标是得到一个在所有参与方数据上都适用的有泛化能力的模型。各方数据分布Non-idd的情况可以通过联邦学习加元学习、多任务学习来解决。
问:请问如何保证各个部分数据的质量?比如说医疗影像数据标注的质量参差不齐。
杨强:
在实际生产上,可以通过在各方节点上部署检验机制的方法来为参与训练的样本的数据质量进行阈值淘汰,也可以通过结合一些机器学习技术,比如GAN,来模拟生成训练样本进行检验。另外训练时多采用cross-validation等数据验证方法也可以有效控制数据质量问题。
问:联邦学习中,不同数据孤岛在联邦学习过程中是否有隐含权重(即算法模型中本身没有设计权重,但实际学习中形成了不同权重),如何解决?
杨强:
联邦学习算法本身按数据量的大小来分配权重,假设数据是分布均匀的。实际上,也可以通过分析数据源与目标数据源的相似性等方法来设计权重。
问:FATE框架和Tensorflow Federated Framework框架各有什么优缺点?
杨强:
FATE框架是第一个工业级FL框架,从业界应用出发,支持横向、纵向和迁移联邦学习等学习框架和各种安全计算组件。TensorflowTF目前只支持横向联邦,多适用于学术研究,相对简洁,容易上手。
杨强:
联邦学习可以作为RPA中采用AI技术的一个组件。RPA多面临非标性、数据分隔等挑战,RPA部署系统可以通过联邦学习的方式提高产品效果。
杨强:
联邦学习可以帮助实现定制化教育。教育机构可以基于存储在学生个人移动设备(如智能手机和笔记本电脑)中的数据,协作地构建一个通用学习计划模型。在此模型基础上,还可根据每一个学生的特长、需求、技能和兴趣,构建定制化、个性化的学习指导模型。