赞
踩
本博客地址:https://security.blog.csdn.net/article/details/124841491
前段时间受CSDN邀请,为CSDN和易观分析主办的《隐私计算论坛》做隐私计算相关的演讲,最终选题《深入浅出谈联邦学习》,本次分享的内容主要分为三部分,第一部分是联邦学习的背景,第二部分是图解联邦学习,这也是我这次分享内容的核心部分,主要目的是用最直观、最通俗的方式来让大家理解联邦学习,第三部分是联邦学习的技术展望。
我们知道,人工智能的发展让现在的一些服务体验越来越好,越来越智能,但训练人工智能模型却需要非常庞大的基础数据来支撑,这在大多数公司是无法实现的,这些公司要么数据规模较小,要么数据缺少特征数值等重要信息,让人工智能模型的训练没有着落。
那这时候,我们的一个方案是和外部第三方达成合作,通过共用数据的方式来满足基础数据体量上的要求,但这又会带来许多新的问题,比如越来越多的隐私合规限制、数据一但脱手后将失去掌控,同时不同数据体量的公司合作存在的公平性问题等等,都让这一解决方案的落地存在着巨大的阻力。
那么基于此,联邦学习就诞生了,如果我们说功能性和隐私是鱼与熊掌不可兼得,那么联邦学习就是让鱼与熊掌可以兼得。
联邦学习的核心思想是数据不动模型动,数据可用不可见,通俗讲就是在数据不出本地的前提下完成数据的开放流通,由于隐私数据没有离开本地,这样就可以突破隐私合规的限制了。
同时,联邦学习还能解决企业算力不足、合作方之间的利益分配不公、数据脱手导致的数据安全不可控等问题。可谓是当下数据开放流通的上好解决方案。
接下来,我们用图形化加文字批注的方式,来讲解联邦学习到底是什么,全程我们不会用复杂的数学公式,从而让联邦学习理解起来更直观,这也是本次分享的亮点。
客户端-服务架构这个很好理解,就是有一个中心服务器,也叫做协调服务器,一般我们假设这个中心服务器是可信的,然后至少有两个参与方,因为联邦学习就是要和别人合作的才叫联邦,一个人就不叫联邦了。
在客户端服务器架构中:
● 第一步是中心服务器将初始化模型下发给参与方;
● 接着参与方在收到初始模型之后,就可以使用本地数据来更新初始模型了;
● 第三步是本地模型完成训练,也就是完成第一次模型训练,这一步耗费的时间一般都非常短;
● 训练完之后,将训练的结果发送给中心服务器,训练的结果一般是参数或梯度;
● 第五步,中心服务器收到各个参与方上传的结果之后,对这些结果进行聚合计算,聚合计算一般使用例如联邦平均算法之类的,聚合后得到一个新的全局模型;
● 第六步是将这个新的全局模型重新发送给各个参与方;
● 第七步和第二步是类似的,不过这时候本地已经有新的数据产生了,所以此时训练的模型已经有了新的变化,当然,也有可能在这一轮下来,本地数据并没有太大更新,那训练的模型也就和上一轮训练的模型没有太大区别;
● 第八步是完成了新一轮的训练,产生了新的结果;
● 第九步是将新结果发送给服务器;
这里其实是讲了两轮训练的,实际中就以这种方式一直循环往复,直到达到训练终止条件,训练终止条件一般是模型达到期望的效果、或者模型训练达到最大的迭代次数,也或者是达到了最长的训练时间。
在参与方这里,我将本地数据、训练模型和训练结果分开划分了,主要是为了更清楚的展示联邦学习架构的一些细节。
再来看对等网络架构,对等网络架构它是去中心化的,没有中心服务器,在需要中心服务器的一些场景下,可以由某一个参与方临时担任。
对等网络架构中:
● 第一步是,其中一个参与方来充当服务器,下发初始训练模型;
● 之后其中任意一个参与方使用本地数据来训练这个初始模型;
● 第三步是在本地完成训练,并产生一个训练后的结果;
● 再之后将这个结果发送给联邦学习系统的任意一个参与方;
● 这个新的参与方以此结果作为输入,并使用本地数据在上一个参与方训练的基础上继续训练这个模型;
● 第六步是在本地完成更新训练,再次产生一个新的结果;
● 之后将这个新的结果随机发送给任意一个参与方,以此循环往复,这种情况持续轮次多了之后,由于结果的累加,需要更多的算力,及传输更多的中间临时结果,可能会导致性能下降;
● 最终,当模型训练达到终止条件,训练终止。
训练结束后,由于要评估最终学习模型的性能,这时候可以让其中一个参与方来充当中心服务器。
最后来看联邦学习的环形架构,环形架构前3步和对等网络架构的是一样的,和对等网络架构的区别是第四步,在这里,环形架构只将训练结果发送给下一个参与方,而对等网络是将训练结果发送给任意一个参与方。同时,以此类推的,最终有可能会产生一个闭环,当然是否会产生闭环主要取决于是否触发了训练终止条件,如果训练一半就产触发了终止条件,那么就不会产生闭环了。与对等网络架构一样,在训练结束后,由于要评估最终学习模型的性能,这时候可以让其中一个参与方来充当中心服务器。
在前面说到联邦学习架构时,是否有想过这样一个问题,参与方的计算终端,大概率并不是统一的,有的可能会使用终端手机,有的会使用个人笔记本,有的会使用台式机,有的会使用云服务器,等等之类。
这些不同的设备,他们的计算能力是不一样的,同时他们的通信效率,也就是网速是不一样的。在客户端-服务器架构中,中心服务器要等待最慢的那一个参与方我们怎么办?对等网络架构下,上一个参与方计算慢,下一个参与方就要等好长时间怎么办? 面对这些问题,那如何在保证性能不下降的前提下,有效的提升联邦学习的效率呢?
通过上页我们知道,效率的瓶颈主要是两方面造成的,一方面是计算终端的计算速度,也就是算力,另一方面是通信效率,那我们在效率提升方法中,也将从网络侧和计算侧来探讨效率提升之道。这里我将使用客户端-服务器架构作为蓝本,同时对这个架构做了简化,相信大家是能理解的。
对于网络侧,常见的效率提升方法第一个是增加通信的间隔,这个很好理解,就是本地更新多次后,才和中心服务器通信一次。
第二个是只传输模型的更新部分,也就是说,我们获取的原有模型是不传输的,不传输的话会不会有什么问题呢?答案是不会,因为服务器中已经有原来的模型了。
第三个是非对称的推送和获取,这个通俗了讲就是,此前是本地训练一次就上传一次,上传一次后再拉取一次。那么在实际中,可能本地数据更新非常缓慢,那我们频繁拉取模型做训练就没有很明显的新增效果,而服务器可能由于聚合了其它参与方的模型,新增效果很明显,那么这时候我们就可以增大从服务器上获取模型的频率,减少我们上传服务器模型的频率,等本地参与训练的数据攒多了,再上传一次模型就可以了。反过来也是一样的。
第四个是计算和传输重叠,也就是说我们可以把计算线程和传输线程分开独立,之前我们是训练完之后才能上传模型,上传完我们才能拉取,那现在我们可以边上传,边下载,边计算,通过线程并行的方式,来提升模型的训练效率。
第五个是异步参数更新,就是说每个参与方独立与中心服务器进行通信,完成本地训练后,无需等待系统中的其他参与方完成,即可获取当前最新的聚合模型。这么做会有一个问题,就是训练轮次多了之后,各个参与方与服务器之间会比较混乱,非常容易引发延迟问题。
那说完网络侧,再来说计算侧的效率提升方法。
对于服务器的效率提升,主要使用-有监督集成的方式,也就是说通过一定的筛选,只让一部分符合筛选要求的优质参与方参与该轮次的聚合,但这并不意味着完全抛弃了其他参与方,其他参与方可以通过继续努力,任然有机会参与到后面轮次的聚合之中。
对于参与方的效率提升,一个是通过一系列的模型压缩算法,压缩模型,以减少模型参数的传输量,另一个是在本地计算时,通过GPU来进行计算,因为GPU在计算这些东西时,速度是非常快的,所以还常被用来挖比特币。
前面提到,中心服务器在聚合完各个参与方的模型之后,是要再下发给各个参与方的。但由于参与方的情况千差万别,聚合后的模型如果平等的下发给各个参与方,大概就类似于我和马云的财富算平均数一样,马云的钱分我一半,我们都是亿万富翁,这对于马云来讲是极不公平的。
另外,由于参与方只上传训练后的模型,而不是原始数据,所以参与方付出的成本,中心服务器是不知道的,在这种前提下,参与方作为理性人,是符合个体理性约束的,也就是说参与方是不愿意在联邦学习中吃亏的,而是会想方设法从联邦学习中赚取利益,比如谎报成本、谎报收益、使用垃圾数据等等。那我们如何让各个参与方心甘情愿的拿出自己的高质量数据,这就取决于如何设计一个公平的联邦学习激励方式了。
联邦学习的利益分配方案有很多,可以自己设计,这里我们来讲一个常见的联邦学习激励方案,在这个方案中,我们是将模型贡献者和模型使用者做了区分,一个参与方它既可以是模型贡献者,也可以是模型使用者,也可以两者都是。模型贡献者是贡献自己的数据训练模型的一方,模型使用者是使用中心服务器聚合后的模型的一方,如果将这个模式放到前面所讲的架构中的话,我们设定的参与方,就是贡献者与使用者的双重身份。
对于中心服务器来说,他需要面向模型贡献者计算三个内容,一个是决定使用哪些模型贡献者的训练结果,这一点非常重要,因为它能够屏蔽掉一些划水的参与方,对于谎报成本、使用垃圾数据的参与方训练出来的模型不予采用,不予采用的话自然也就不用给它分配报酬了。第二个是计算已经采用的模型中的使用比例,第三个是计算采用了模型的模型贡献者的报酬。
同样的,在模型使用者这边,中心服务器需要计算不同模型使用者使用模型的权限,并做权限控制。第二个是计算对每个模型使用者应当收取多少费用。
那如此一来,就能很好的规避一些钻空子的参与方,让利益分配尽量的公平,从而留住参与方,也能让更多优质的参与方参与进来。
首先来看联邦学习的攻击方式,对联邦学习的攻击方式有很多,我在这里仅例举了几个常见的攻击方式,和普通的安全攻击一样,每一个攻击方式背后,都是一大片子的专业领域知识,展开都可以讲很多东西,今天在这里就只做简单的介绍。同时这些攻击方式是针对整个联邦学习系统做的攻击,所以我在画图时并没有区分它是针对客户端的还是针对服务端的。
第一个攻击方式是成员推理攻击,成员推理攻击是指根据目标模型的差异行为,来推理一些样本数据是否属于这个目标模型,从而推理出目标模型的原始数据。
生成对抗性网络攻击,是指通过构造一些以假乱真的数据,来影响服务器的正常学习过程,同时中心服务器可以诱导其他用户联合起来欺骗某一个受害参与方,让受害参与方发布自己的敏感数据。
数据投毒和模型投毒一样,都是通过篡改参与方的模型,让脏数据来影响联邦学习的过程。
说完攻击,再来说联邦学习中的防御,同样的,我在这里仅例举了几个常见的防御方式,每一个防御方式背后,都是一大片子的专业领域知识,展开都可以讲很多东西,今天在这里就只做简单介绍。同时这些防御方式也是针对整个联邦学习系统做的防御。
首先是安全多方计算,安全多方计算是一个大的概念,下面主要有秘密共享、不经意传输、混淆电路等技术手段,例如秘密共享,就是将数据拆分成很多份,然后分发给参与方,只有较大部分或者所有参与方将各自的数据凑一起时,才能还原出原始数据。
安全多方计算由于计算在明文状态下进行,所以计算性能基本不受影响,同时例如秘密共享是将数据拆分并进行多方传输,所以传输效率是会受到一定影响的。另外,由于对数据做了拆分,只有恶意客户端超过一定数量并相互串通合谋时,才有信息泄露的风险。
所以它的算力指数定为3颗星、通信指数定为2颗星,安全指数也定为2颗星。
同态加密是指计算密文和计算明文具有同等效力,也就是说如果将1加密成A,2加密成B,1+2=3,A+B=C,那么C是能解密成3的,由于密码学的一些特性,同态加密只能实现加法同态加密和乘法同态加密,因此如果要使用同态加密,需要将其他计算方式转换成加法计算或乘法计算。
同态加密还有部分同态加密、些许同态加密和完全同态加密的区分,部分同态加密是指要么支持加法,要么支持乘法,但不限次数。些许同态加密是指加法和乘法都支持,但限制次数。完全同态加密则是指加法和乘法都支持,不限制次数。
由于同态加密计算在密文下进行,所以计算耗时比较长。同时由于传输的是密文数据,数据比特更大,传输效率更慢。但同样的,由于传输密文数据,安全性最可靠。
所以它的算力指数定为1颗星、通信指数定为1颗星,安全指数定为3颗星。
差分隐私是通过利用随机噪声将原始数据淹没在其中,函数的输出结果对数据集里的特定原始数据都不敏感,使攻击者无法从输出结果反推出原始数据的一种方式。
差分隐私在计算时通过添加噪声数据进行计算,计算效率和明文基本没有区别,同时传输的是带噪声的明文数据,传输效率与传输明文基本没有区别,对于安全性来讲,添加噪声数据,噪声较小时,性能损失较小但安全性差,噪声较大时,性能损失大但安全性强。
所以它的算力指数定为3颗星、通信指数定为3颗星,安全指数定为1颗星。
除了以上3中方式,常见的防御方式还有异常探测,就是中心服务器在聚合各个参与方的模型前,探测每个参与方是否有可疑数据,对于有可疑数据的将其剔除。
横向联邦学习是最常见的一种,他的特点是数据样本不同,但数据特征相同,就像我们这个例子中一样,用户ID不同,数据类型和数据标签相同。但在实际中,我们并不要求这些参数是完全一样或完全不一样的,只要有大部分一样或大部分不一样就符合要求了。这里我仍然以客户端-服务器架构作为蓝本,同时将步骤做了一些简略,相信大家能理解。
在横向联邦学习中:
● 横向联邦学习的第一步,是各个参与方使用本地数据训练模型;
● 第二步是将训练结果发送给中心服务器;
● 第三步是中心服务器对各个参与方发送的结果进行聚合,得到全新的全局模型;
● 第四步是将聚合后的全局模型发送给各个参与方;
● 第五步是各个参与方使用本地数据进行下一轮训练。
可以看到,和我们最开始讲的联邦学习的架构的步骤是一样的。对于横向联邦学习,一个最常见的例子是两家不同地区的银行。虽然可能只有很少的重叠用户,但用户的数据可能因为相似的商业模式,而有相似的特征。那么它们就可以通过横向联邦学习来共同建立一个机器学习模型,从而更好的为用户推荐理财产品。
与横向联邦学习不同,纵向联邦学习的特点是数据样本相同,但数据特征不同,就像我们这个例子中一样,用户ID相同,数据类型和数据标签不同,同时还分为主动方和被动方,被动方的标签数据是不参与计算的。在实际中,这些参数只要有大部分一样或大部分不一样就符合要求了。
在纵向联邦学习中:
● 第一步是中心服务器创建密钥对,将公钥分发给各个参与方:
● 第二步是各个参与方计算共同数据样本,并对计算结果做加密交换,从而完成数据样本对齐和数据标签对齐,之后的训练只使用这些共同的数据即可;
● 第三步是各个参与方计算加密梯度并加入附加掩码,主动方计算加密损失;
● 第四步是将训练的结果发送给中心服务器;
● 第五步是中心服务器进行聚合;
● 第六步是将聚合后的模型分发给各个参与方;
● 之后是重复三四五六步,直到模型训练终止。
我们可以看到,纵向联邦学习相比于横向联邦学习,是多了样本对齐和标签统一这一步的,因为不对齐的话,是没有办法进行联合训练的,即使在本地完成训练,也相当于模型孤岛,无法完成聚合。
对于纵向联邦学习,一个最常见的例子是电商公司和银行,虽然他们的数据类型非常不同,但客户群体上可能有非常大的交集,那他们就可以为了得到一个更好的机器学习模型,在各自的不同数据特征空间上协作。
除了横向联邦学习和纵向联邦学习外,还有一种情况是数据样本和数据特征都不相同的情况,这就是联邦迁移学习了,联邦迁移学习是把迁移学习技术与联邦学习技术结合的一种方式,一个联邦迁移学习系统只包括两方,称为源域和目标域。一个多方的联邦迁移学习系统,就可以被认为是多个两方联邦迁移学习系统的结合。对于联邦迁移学习,我认为他的核心其实是迁移学习,所以我们这里就不讨论了。
联邦学习的架构和概念已经是比较成熟的了,所以未来的研究仍旧在通信效率、公平激励和安全防御这三方面。
在通信效率上,如何破解参与方资源极度缺乏场景下的性能,以及如何更近一步的提升通信效率,是一个重点的研究方向,同时,在数据日新月异的当下,在引入与此前数据完全不同的新数据时,如何不被无拦截也是一个研究方向。
在公平激励方面,目前仍然缺乏一些非常出色的公平激励机制,因此,公平激励机制仍然有待进一步的提升。
在安全性上,和常规安全一样,如何有效抵御来自内部的攻击,一直都是一个安全的痛点,同时-对等网络架构的联邦学习与区块链技术的结合,也有一定的研究价值,最后,如何降低非恶意的故障造成的隐私安全影响,也仍待进一步研究。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。