联邦学习概念辨析与金融应用思考
2022-03-28徐葳等
徐葳 等
目前,“联邦学习”这一术语在市场上还存在很多认识上的误解和混淆,主要原因是其既在广义上表达了保护数据前提下联合多方数据训练模型的需求,又在狭义上表示了一类通过暴露部分数据信息来提升训练性能的方法。而且作为广义上的需求,它强调为了保护数据安全,可以牺牲部分准确性;但作为狭义的方法,它反而强调通过牺牲安全来换取性能提升。
作为金融行业用户,选择是不是存在“联邦学习”的需求,或“数据融合计算、数据价值流通”的需求,完全是一个业务问题,其判断标准是数据价值流通能否带来业务价值。在这一需求基础上,是否要选用狭义的“联邦学习”方法和系统来满足这个需求,是个纯粹的IT技术和安全合规问题。其需要考虑和平衡的是数据的敏感性、泄露的代价,以及进行数据保护所需的技术成本。也许这样才能回归到我们探索联邦学习的初心。
初心:联邦学习拟解决的问题
广义定义:解决联合建模的问题或需求
随着人工智能等技术应用的发展与普及,基于机器学习的智能营销及风控等应用迅速兴起。由于明文数据应用引起的数据泄露及滥用等问题日益突出,许多国家和地区陆续出台数据隐私保护政策,导致诸多金融机构在进行机器学习任务时面临着数据瓶颈问题,即需要更多数据训练得到更准确的模型。此处,更多数据意味着:更多样本点,以减少模型偏差,提升模型质量;更多标签(如银行信贷业务场景中的客户逾期判断),以提升模型准确度;更多维度,以更全面刻画某一对象。然而,上述额外数据经常由不同主体持有,且往往具有高度敏感性,难以被共享,导致多方数据源联合建模的需求无法被满足。
从广义上讲,能够满足多个数据方联合建模需求的机器学习方法为 “联邦学习”。因此,广义上的联邦学习是一个问题,或者说是需求,而不是一种技术或解决方案。事实上,这一需求在多年前就已有解决方案。在密码理论领域,采用多方数据训练模型是多方安全计算技术的一个具体应用。理论上讲,我们可以用一个“多方计算”(也叫多方安全计算,Multi-party Computation, MPC)的方案描述整个训练过程。在数据挖掘领域,学者们很早就提出了如k-匿名、差分隐私等方法;在硬件领域,人们试图做出更可信的硬件芯片来保证数据不泄露。近期研究人员及金融机构也尝试采取迁移学习等手段,试图隐藏和个人相关的敏感信息。
狭义定义:一类特定算法
然而现在市场上,联邦学习这一术语被局限于一个更狭义的定义。市场上普遍认为,联邦学习是和多方安全计算、可信执行环境、差分隐私等并列的一种隐私保护计算技术,这实际上采用的是一种狭义的定义。这种定义下的联邦学习特指一类算法,其本质特征是在多个数据控制方运行,能够让各数据方之间只交换了某些模型训练的中间数据。若假设这些被交换的数据不包含敏感信息,那么这个模型的训练过程就能达到人们想要的数据隐私保护目标。然而这个假设是否真实成立,目前尚无理论上的证明。
狭义的联邦学习作为一种独特的方法被提出,其主要动机是试图在此前的几种方法中取得一种平衡,即解决如下问题:多方计算等密码学方法的计算和通讯开销高;k-匿名暴露信息过多;在原始数据上加入差分隐私需要的噪声,对于多次迭代的机器学习结果的准确度影响大;硬件可信程度未知。因此,狭义联邦学习的主要目标是试图通过有选择地暴露一些信息,从而实现训练精度、训练速度和数据隐私安全的平衡。本文下述“联邦学习”均是基于这一狭义意义上的方法展开。
设计:联邦学习理论上的挑战
相比其他隐私保护计算技术,联邦学习的本质特征是暴露某些中间数据,并假设这些数据不泄露敏感信息。然而越来越多的研究发现,这一假设未必成立。
联邦学习安全性存疑
联邦学习过程中虽然没有发送任何原始数据,但其暴露的数据主要有两类:一是模型迭代训练中每轮的中间结果;二是在纵向联邦学习中暴露的双方数据交集中的元素。一个常见的认知误区是,不发送原始数据,做到“数据不动”就是安全的。此处其实有个非常强的安全假设,即联邦学习每次迭代中暴露的中间结果不会泄露有价值的信息。然而,很多工作均已证明此安全假设难以达到。
联邦学习每次迭代均会暴露中间结果,这一中间结果可能是每方提供的梯度,或者是多方聚合的梯度,或者是一个本轮结束之后的模型中间结果。此处的核心问题在于,中间结果是一个高维的向量或矩阵,其在很多模型里往往缺少可解释性。一个参与方可以根据这些暴露的结果以及结果之间的差异性去推算一些不应暴露的信息。中间结果具体会泄露什么信息很难确定,因此其安全性无法得到证明。有一些针对这一问题“打补丁”的方法,例如,利用密码学方法来计算梯度聚合。但无论如何加密,联邦学习都不可避免地会向各方暴露一个本轮迭代训练的中间结果,否则就失去了这一方法的核心价值,即通过暴露这个结果,减少加密,从而平衡计算代价与安全。
另外一些方法利用差分隐私给中间结果加一些噪声,但这对于最终训练结果的准确性影响也是未知的。当然,一个观察是,参与方数量的增多会缓解噪音对准确性的影响。Google最初提出将联邦学习应用在2C场景中,含有大量客户端,参与方数量庞大,每个参与方加上一些专门设计的噪声(噪声会互相抵消),从而同时保证了数据隐私安全及计算的准确性。但是这一方法對于只有少量参与方的情况是否有效,以及究竟可满足多少参与方的模型训练的准确性,往往与具体数据和模型相关,通用的方法仍有待探索。
更为深层次的问题是,联邦学习所专注的数据隐私保护一般定义在“原始数据不暴露”的层面上。然而,实践中需要保护的数据特定使用价值,在很多情况下取决于统计信息,如某企业的平均薪资水平、订单数,某金融机构的投资总额等。联邦学习过程中交换的高维向量显然泄露了大量的统计信息。至于具体泄露了哪些统计信息,以及泄露这些信息的危害,一般与具体场景有关,因而难以判断,由此极易形成“虚假的安全感”。无数信息安全领域的实践证明,虚假的安全比没有安全造成的后果更加严重。
缓解该问题的一种思路是定义一种通用的明、密文混合计算方式,并根据不同的场景需求(如安全需求、性能需求等)灵活地选择可以暴露什么信息,以及必须隐藏什么信息。也就是说,即使对于同一种机器学习算法,由于应用场景不同,建模参与方也需要对算法的明文计算部分和密文计算部分进行适配性的规划和调整。
联邦学习的特性机制引致更大造假风险
联邦学习和很多隐私保护计算技术都基于一种“半诚实”的假设。从直观上看,半诚实假设意味着参与方虽有可能偷看或者泄露其他方的数据,但他们均会遵守协议,即不会对数据造假。理论上,半诚实是一个安全假设,但在实践中,产业界应建立切实有效的引导和制约机制,使各参与方遵守协议。其中重要的一类方法是通过监管,让不诚实的行为被发现和被举证,以遏制参与方的造假意图。另一类方法是让不诚实行为造成的不良后果尽量少,如只是让计算不能进行下去,或者参与方都知道结果是错的等。
但遗憾的是,联邦学习的分布式特点以及安全聚合机制往往让数据造假变得更容易,更难被发现和举证。传统数据挖掘算法无论是检测数据造假还是容忍错误数据,均依赖于数据中内生的冗余信息,以及人们的先验知识。由于联邦学习交换的中间信息是高度凝练的统计信息,数据中缺乏冗余,又缺乏可解释性,这些被传递的中间结果是否是捏造的假数据难以被判断。另外,攻击者亦可通过加工假数据以逃避异常值检测,从而对全局模型進行投毒攻击。由于当前市面上许多方法使用了一种仅支持加法操作的半同态加密算法来保护各方提供的梯度,使造假的检测能力进一步丧失。因此,其发送的数据是恶意造假结果,还是随机抽样造成的噪声,理论上难以区分。
更为严重的是,每方的中间结果对于模型的训练影响都很大,因此每一方都可以通过构造“有毒数据”来控制整个模型的训练结果。例如,在模型中留一个后门(即某些特定样本的推理完全受恶意一方的控制)。相比于传统的模型训练,在联邦学习过程中更难举证这一后门是哪一方下毒造成的。许多研究已经证明,这样的攻击在横向联邦学习中广泛存在,此类攻击方法在纵向联邦学习中也已经被发现。因此,联邦学习在这一方面仍需要很多改进。
从监管角度看,目前缓解上述问题的一种思路是,采取一些方法来强化联邦学习的中心管控功能,具体包括:除了参数聚合,将更多的计算逻辑纳入中心化可监管的范畴;使用支持密文复杂计算逻辑的密码学技术,如秘密分享(secret sharing),最大程度通过密文来分析数据的“造假”特征;引入第三方独立行使计算或监管职责,鼓励针对高价值、敏感数据的场内流通方式,而不仅仅在联邦学习参与方之间进行计算;使用存证机制,增强事后回溯和举证能力。
现有联邦学习下的数据共享缺乏公平性
数据公平共享机制对于保障金融业数据生态的有序、健康发展至关重要。数据共享应用过程涉及多参与方交换信息,往往存在各参与方贡献度及获益程度不一的问题。在此背景下,基于联邦学习或其他隐私保护计算技术的数据共享应用需辅以合理的公平机制,在保护一定数据隐私的同时保障数据共享的公平性,以激励不同类型机构共建合作共赢的金融数据生态。以两方联邦学习场景为例,在一个公平的模式下,参与方希望共同获得一个模型,双方要么获得了相同的价值,要么获得价值少的一方能够获得额外的补偿。然而,现有联邦学习框架并不能达到这个效果,反而会导致数据多的一方获益更大。
当前,国内联邦学习主要应用场景是纵向联邦学习,其第一步是隐私求交(PSI),会将交集结果暴露出来。事实上,理论上的PSI方法,本身可以保护交集结果,但是如果不暴露交集,后续计算无法实现联邦学习减少加密数据量的目的。因此,我国业界常见的做法就是把交集暴露出来。例如在金融场景中,一个大型互联网公司拥有10亿用户上网数据,一个银行拥有1000万用户金融数据。互联网公司由于已拥有几乎所有客户的信息,并不在乎暴露交集。其通过联邦学习可获得1000万个银行客户及相应标签,以后无需依赖银行数据亦可对该客户群进行精准营销。银行虽然也能够得知自身与互联网产品的重叠客群,但此信息显然没有太大价值,因为绝大多数用户都是这个互联网产品的用户,这一信息无需模型训练也能得知。如此一来,银行泄露了自身客户的信息,换来了一个其无法单独使用的模型,该模型需要输入互联网公司拥有的数据维度才能使用,因而银行在数据方面仍然存在被互联网企业卡脖子的风险。显然,这个交易是不公平的。更重要的是,在当前的市场环境下,往往是数据少的金融机构向数据多的互联网企业付费,加剧了这一不公平性。因此,纵向联邦学习技术有利于拥有大量数据的公司获取数据量相对较小的公司的数据信息。这样的“联邦”实际上成为了大公司数据垄断的延伸,难以实现公平合作的共赢生态。
对于上述场景,理想的方式是双方不暴露基于隐私求交得到的交集,在不暴露的交集上继续完成后续机器学习过程,乃至后续推理的过程。然而,这样做会完全损失联邦学习暴露中间结果而带来的性能优化。一个可行的解决方式也许是允许多种类型的参与方角色加入,促进金融数据生态和业务形态全面发展。比如,可以由小公司作为数据使用方提出联合建模需求;也可以让专门从事算法研究的参与方加入,通过贡献算法模型获取收益等。这样,每一方都可以贡献自己的专长,同时也能够使用他方的资源信息为自己服务。通过这样不断创新的技术应用方式,丰富业务发展模式,可逐步构建良性循环的数据生态环境。
实现:联邦学习在系统工程与运维上的挑战
在金融应用中,目前联邦学习在工程上的架构是一种多个数据源直接互联进行计算的模式。这一模式给现有的私有云和企业网络的部署带来了额外挑战。这些挑战具体体现在网络安全、算力可扩展性、易用性和可监管性等方面。
算力与原始数据的耦合,带来部署时网络安全与算力扩展的挑战
联邦学习的主要算力都与原始数据源部署在一起,造成两个问题,即企业防火墙配置的问题和算力可扩展性的问题。
一般来说,大数据平台位于企业内部的后台,应部署在企业防火墙内,不应从外网直接访问。联邦学习的软件模块需要直接访问原始明文大数据(端上的迭代需要在明文上进行),因此也需要进行企业内网的部署。然而,在训练过程中,不同数据源方的软件模块需要频繁互相通讯,需要在防火墙上对外暴露网络端口。这一部署模式给企业的网络和信息安全带来了额外挑战。另一种部署方式是将联邦学习软件模块部署在企业防火墙外的DMZ区域(隔离区)中,让联邦学习软件跨过防火墙与内网中的大数据系统交换任务。这一部署模式安全性略好,但仍然需要给一个处于较低安全区(DMZ)中,且暴露网络端口的联邦学习模块授权许多内网大数据平台的访问权限,一旦这个模块被黑客攻破,后果会非常严重。
另外,联邦学习主要计算都发生在数据源端,数据源需要的算力与其数据量和计算复杂度成正比。因此,每个参与方都需要部署相应的计算能力,具备计算资源的可扩展性。联邦学习的稳定运行,也依赖于每一参与方的计算执行可靠性。这种跨多个参与方的计算资源调度和容错机制,与通常的云计算等有显著差别。目前尚缺乏这方面的可靠的系统设计方案。一种解决思路是,将一部分计算功能独立出来(比如参数聚合功能),在额外的代理计算方运行。这样一来,各数据源方只需主动向代理计算方推送中间参数并适时获取聚合结果,而无需暴露自身的网络接口。另外,将算力独立出来,有利于充分利用云計算的扩展性和容错性,而不用再依赖于各数据源方的算力水平。
算法、系统和业务逻辑的耦合,带来开发门槛高、难学难懂的挑战
当前,开发者使用联邦学习系统开发一个AI算法,需要在提升模型准确度的同时,时刻牢记“多方”的概念,时刻关注信息是什么、可以暴露什么、不可以暴露什么,时刻注意加密了什么数据,加密后的数据可以做什么处理,时刻计算传输数据需要多少代价。此类应用要求开发者同时了解密码学、分布式计算、AI等领域知识。这样的开发者非常难以培养,其所写的程序非联邦学习专业工程师也很难看懂,更不用说验证其安全性。当前的联邦学习开源代码均仅提供了核心功能,一些对于系统和数据安全缺乏理解的开发者,在进行二次开发的过程中,极易忽略一些基本的安全策略配置,例如,此前提到的防火墙的配置,以及联邦学习中关于密钥管理和分发的配置方法,从而造成虚假的安全感。
这一问题的根源在于,目前联邦学习软件的开发接口抽象层级不够高,把过多实现细节暴露给开发者。这当然有工程成熟度的原因,但更深层次的原因是为了应对前面提到的联邦学习的安全问题,导致现有联邦学习的实现上都打上了多种安全补丁。一个常见的补丁方式是结合一些密码学方法来掩盖一些梯度,如半同态加密,但这些密码学方法都有比较复杂的密钥管理机制的要求,并且只能进行一些特定操作(如加法)。因此,许多算法都需要围绕这些密码学方法在进行特定的改进,导致了更为复杂的软件接口设计。如何利用更通用的密码计算方法定义一套抽象的开发接口,使得AI算法设计人员和业务人员不用再去关心系统底层的技术,是一个联邦学习亟待解决的工程挑战。
一个可推荐的实现思路是,逐层级构建算法体系,对外开放友好的编程接口。具体地讲,在底层将基础的密码学协议进行封装,构建基本的密码操作指令集,支持密文计算引擎以及它与明文计算间的转换。基于此,联邦学习算法的开发人员可同时面向明文和密文开发并提供算法函数库。业务逻辑开发人员则不仅可以直接引用这些算法库解决问题,还可以像修改明文算法库一样查验、分析和修改这些联邦学习算法,无需要任何的密码或者联邦学习的专业知识,就像直接在明文数据上开发大数据算法一样。在运行时,可定义开发者自主编程接口和IDE,通过配置数据源,IDE可自动适配程序中的数据指向,使得开发者就像在一个数据源(可称为“虚拟的数据中心”)上开发一样。
P2P架构、半同态加密与参数聚合算法的耦合,带来数据监管的挑战
监管在数据流通中非常重要。监管不仅仅是为了防止数据滥用对社会造成危害,同时也是避免数据造假和数据投毒的重要手段。然而,联邦学习的系统和算法都部署在各个数据源方,他们之间交换的数据全部通过加密传输,即使有一些中心化聚合中间结果的架构设计,这个中心化聚合节点也仅仅是在中间结果上做了很简单的汇聚计算(如求和),并不能知晓各方在进行什么样的数据处理,更无法实现计算过程的存证。因此,一个联邦学习的算法是否做了它声称的计算,只有参与方自己知道,而且只知道自己是否做了正确的事情,不知道其他方是怎么做的。
此类系统会导致在其上面进行的明文数据的直接交易,即打着隐私计算的幌子做明文数据交易更难被发现和监管。如果采用可验证计算等手段对P2P系统进行监管,会造成非常大的额外开销。因此,如何做到对数据使用可监管的联邦学习,在技术和工程上都是很大的挑战。其根源是,参数聚合阶段只能做加法(目前由于全同态计算性能限制,只能选择半同态加密算法)。因此,参数聚合服务器这个最适合履行监管责任的一方,没有能力分析它所处理的数据。
解决上述问题的一个途径是采用支持通用密文计算的代理计算架构,在密文上进行数据特征分析。代理计算的通用计算功能越强大,对数据分析面就越大,所能实现的监管力度就越强。另外,为了防止参与方超范围使用其他参与方的数据,应建立多方计算合约机制,由参与计算的各方在计算开始前就数据的具体使用目的和方式签订合约进行授权,各方严格按照计算合约执行,并对计算合约和执行过程进行存证,保证事后可回溯、可审计和可举证,从而防止数据滥用。
(作者单位:清华大学交叉信息研究院、清华大学五道口金融学院、华控清交信息科技(北京)有限公司,参与撰稿的人有徐葳、何昊青、陈琨、王云河、时代,其中,徐葳为清华大学交叉信息研究院长聘副教授、华控清交首席科学家)
责任编辑:刘 彪