一、背景随着大数据、云计算等技术的发展,数据隐私和安全问题越来越受到重视,各国都在加强数据安全和隐私保护。2017年我国实施的《中华人民共和国网络安全法》要求网络运营者不得泄露、篡改、销毁收集到的个人信息,第三方进行数据交易时,需确保合同明确规定拟交易数据的范围和数据保护义务。欧盟也在2018年实施了《通用数据保护条例》(通用数据保护条例,GDPR)法案。这些条例的实施要求我们在使用和交换数据时更加谨慎。数据源成为相互独立的“数据孤岛”,人工智能的“魔力”来自于数据,尤其是在一些实际应用场景中。数据都是“小数据”,需要不同数据源之间协同使用。比如在金融领域建立反洗钱模型,但各金融机构的反洗钱案例都很少;在医学图像研究中,针对特定病例的标注图像数据非常少;样品数量少,增加了建模难度,甚至无法支撑模具的构建。除了这些“小数据”场景,还有很多应用场景需要融合多维数据来描述目标。比如在金融领域的风控场景,需要综合考虑借款人的人口属性、信用表现、长期表现、消费行为等,而几乎没有数据公司能够拥有如此多维度的数据同时。在车险定价领域,除了车辆本身的车况外,车辆的使用情况和行驶区域的环境也是影响保险期间赔付风险的重要因素,这对保险的赔付风险至关重要。汽车保险的定价,特别是因为新客户的绩效数据很少。各方数据无法有效对接,难以精准定价。然而,在数据隐私和安全法规出台后,不同机构之间使用数据聚合变得更加困难。这些业务场景迫切需要一种技术来实现数据源之间的安全聚合和建模。联邦学习概念的初衷是为了解决数据孤岛问题。该技术使数据能够在不离开数据库的情况下完成建模任务。以下是维基百科对联邦学习的定义:联邦学习(也称为协作学习)是一种机器学习技术,它在多个分散的边缘设备或持有本地数据样本的服务器上训练算法,而不交换它们。这种方法与将所有本地数据集上传到一台服务器的传统集中式机器学习技术以及通常假设本地数据样本均匀分布的更经典的分散式方法形成对比。这个定义中有两个关键部分:机器学习技术:联邦学习的本质也是一种持有本地数据样本而不交换它们的机器学习技术:与将所有数据上传到服务器的传统机器学习和传统的分布式机器学习相比即把所有数据上传到一个集群,联邦学习最大的特点是所有数据源都在本地保存自己的数据,在建模过程中不直接通过网络交换原始数据。FATE是微众银行推出的联邦学习开源框架。实现了从数据预处理、特征筛选、建模、模型评估、模型上线等全流程的基本功能。是目前业界认可度最高的联邦学习工程实践,目前已在金融征信、零售、智慧城市、智慧安防等应用场景取得成功。本文将对FATE框架进行初步的理论和应用探索。2.FATE简介2.1机器学习背景介绍图1:机器学习的一般流程启动一个机器学习模型项目后,一般会经历以下六个步骤:导入数据和预处理数据:这一步主要是清洗数据,去除异常样本,标准化数据格式等分析数据:理解数据意义,分析变量分布,做特征变量推导等特征工程:过滤特征,如计算变量IV,特征转换,如归一化,conversiontowoe等训练模型:选择模型,调整模型参数评估模型:根据项目选择模型评估指标,常用指标有AUC、KS、Precision、Recall等模型上线:在线部署,供业务方调用在介绍联邦学习之前,先以逻辑逻辑回归(LogisticRegression,简称LR)为例,介绍一些概念在机器学习中被引入。分类和回归问题是机器学习中最常见的两类问题。一个常见的分类问题可以简化为一个数学问题如下:Y={y1,y2,...,yn}表示分类问题的类别之和,n是不同类别的个数,X={x1,x2,...,xm}是所有特征的集合,m是特征总量。分类问题的本质是学习一个函数映射f(X;w)=Y,w是模型的参数。我们假设X和Y之间存在线性关系,即Y∝wX,wX∈(-∞,∞),而分类问题中的yi是离散数据,比如二元分类问题,yi={-1,1},所以它会在wX中加入一个sigmoid函数,可以将(-∞,∞)之间的数“压缩”到(0,1),而这个压缩后的值可以看作是模型的置信度。图2:Sigmoid函数f(X,w)=sigmoid(wX)上面的LR示意图和计算方法就是逻辑回归模型。LR模型会为每个样本输出样本对应的置信度。通常,如果f(xi,Θ)>=0.5,则yi=1,否则yi=-1。那么,如何获取模型的参数w呢?参数Θ的学习可以转化为优化问题。在LR模型中,损失函数为:逻辑回归模型常用的参数求解方法是随机梯度下降法。随机梯度下降法寻找参数的步骤如下:给定一个优化目标函数f(X,w)、迭代次数T和学习率lr,随机初始化参数w0;设置初始迭代次数t=0fort=0,1,2,...,T:Calculateg=fw'(X,w)toupdatew:wt+1=wt-lr*gGradientis:2.2联邦学习概况在微众发布的《联邦学习白皮书v2.0》中,联邦学习进一步阐述了联邦学习的目的:各方数据保存在本地,不泄露隐私,不违反规定;多个参与者结合数据建立虚拟共享模型和互惠互利的系统;在联邦学习的体系下,每个参与者的身份和地位都是平等的;联邦学习的建模效果与在一个地方对整个数据集进行建模的效果是一样的,或者相差不大(每个数据的用户对齐)。)或特征对齐(featurealignment)条件下的对齐);迁移学习也可以在用户或特征不对齐的情况下,通过在数据之间交换加密参数来达到知识迁移的效果。联邦学习根据每个数据持有者之间用户和特征的分布将联邦学习分为三种类型(数据持有者可以大于等于两方,下面为简单起见以两方联邦建模为例):图3:联邦学习分类示意图Horizo??ntalfederatedlearning:联合建模,用户重叠少,用户特征X重叠多的情况;verticalfederatedlearning:用户重叠多,用户特征X重叠少的联合建模;联合迁移学习:联合建模的用户和用户X的重叠较少。2.3FATE框架图4:FATA联合建模系统框架图4给出了一个完整的FATE联合建模系统框架。微众和合作伙伴分别部署了一个FATE集群,两个集群共同组成一个FATE生态系统,双方分别从各自的数据库中抽取全量ID,对ID进行加密得到交集,目的是找到out出双方共享的用户S,提取共同用户集的特征变量XA、XB和性能数据Y,进入FATE的联邦学习阶段,模型训练完成后,将生成联合模型,联合模型会在AB侧保存一半的模型。联合建模双方可以联合使用模型对全样本进行离线预测和在线评分。图5:FATE技术架构概览图5为FATE系统的总体架构,从下到上依次为重要的功能模块:FederatedNetwork:实现FATE合作伙伴之间的跨站通信功能;EggRoll:数据的分布式存储和计算模块;FateFederatedML:联邦学习算法功能组件,实现常用的机器学习算法;Fate-Flow:联邦学习建模流水线,模型计算调用入口;Fate-Board:联邦学习建模看板,展示模型流水线、一些中间结果、模型进度、模型日志;Fate-Serving:支持联邦学习联合模型部署和在线预测。在FATE系统中,核心部分之一是FateFederatedML,它实现了机器学习建模过程中的大部分功能:联邦学习样本对齐:私有集相交(PSI),用于纵向样本对齐,包括联邦特征工程基于RSA+hash等对齐方式:包括联邦采样、联邦特征分箱、联邦特征选择、联邦相关、联邦统计等联邦机器学习:联邦LogisticRegression、LinearRegression、PossionRegression、PossionRegression、federatedSecureBoost、Multi-party联邦DNN、联邦迁移学习等安全计算协议:提供多种安全协议,包括同态加密、SecretShare、RSA、DiffieHellman等。图6:FATE算法列表2.4FATE算法框架机器学习算法联邦底层关键技术是MPC(安全多方计算)。MPC是姚期智先生提出的一种理论框架,旨在解决在保护隐私信息的前提下,在没有可信第三方的情况下,一群互不信任的各方之间的协同计算问题。多方安全计算可以同时保证输入的隐私性和计算的正确性。在没有可信第三方的情况下,数学理论可以保证参与计算的各方输入信息不被暴露,同时可以获得准确的计算结果。MPC由多套算法和理论组成。同态加密算法主要用在FATE模型算法中。图7:基于梯度优化算法的FATE垂直联邦学习总体框架。图7显示了基于梯度优化算法的垂直联邦学习的总体框架。假设企业A和企业B联合训练一个模型,甲方有自己的数据X,乙方有X和Y,AB出于隐私保护原因不能直接交换数据。为了保证训练过程中数据的机密性,加入了可信第三方C。整个建模过程如下:可信第三方C创建密钥对,并将公钥发送给A、B;甲乙双方加密交换中间结果。中间结果用于帮助计算梯度和损失值;甲方和乙方分别计算加密梯度并添加额外的掩码。乙方还需要计算加密损失。甲乙双方将加密结果发送给丙方;丙方解密梯度和损失信息,并将结果返回给甲乙双方。甲乙双方对梯度信息进行解密,并根据这些梯度信息更新模型参数。重复2-4步,直到停止(比如C如果损失函数的值不变就可以停止)。模型训练完成后,企业A和企业B分别拥有独立的半模型。预测时,需要A、B双方合作完成模型的预测。下面以LR算法为例,详细说明各方之间的数据流向。图8:多方联邦LR计算模型计算框架图中[[*]]显示数据经过同态加密,同态加密技术对明文的加乘运算重新加密,并进行相应的运算对密文进行加密操作,结果是等价的。目前只能实现加减乘除的同态加密。从2.1的介绍,在LR模型的优化过程中,需要进行exp索引操作。为了避免这种操作,联邦中对LR的损失函数进行了泰勒展开。损失函数和梯度转换如下:模型中各个参与者的数据计算和传递步骤如下:2.5FATE联合建模实践FATEgithub官网https://github.com/FederatedA...里面有详细的安装说明,有兴趣的朋友可以按照指导部署安装FATE。FATE通过fateflow模块启动建模任务。fateflow用fate-dsl语言定义了模型的流水线。整个模型的流水线定义分为两个配置文件。dsl.json配置文件定义了模型的流程,conf.json配置文件定义了各个模型。模块参数设置。新版FATE发布后,可以支持类似sklearn编程风格的模型流水线进行模型设计。熟悉python的建模分析师可以使用FATE更快地构建隐私和安全模型。以下是FATELR模型的流水线代码。FATEPipeline:导入argparsefrompipeline.backend.pipelineimportPipeLinefrompipeline.componentimportDataIOfrompipeline.componentimportEvaluationfrompipeline.componentimportHeteroLRfrompipeline.componentimportIntersectionfrompipeline.componentimportReaderfrompipeline.interfaceimportDatafrompipeline.utils.toolsimportload_job_configfrompipeline.runtime.entityimportJobParametersdefmain(config="../../config.yaml",namespace=""):#obtainconfigifisinstance(config,str):config=load_job_config(config)parties=config.partiesguest=parties.guest[0]host=parties.host[0]arbiter=parties.arbiter[0]backend=config.backendwork_mode=config.work_modeguest_train_data={"name":"breast_hetero_guest","namespace":f"experiment{namespace}"}host_train_data={"name":"breast_hetero_host","namespace":f"experiment{namespace}"}pipeline=PipeLine().set_initiator(role='guest',party_id=guest).set_roles(guest=guest,主机=主机,一个rbiter=arbiter)reader_0=Reader(name="reader_0")reader_0.get_party_instance(role='guest',party_id=guest).component_param(table=guest_train_data)reader_0.get_party_instance(role='host',party_id=host)。component_param(table=host_train_data)dataio_0=DataIO(name="dataio_0")dataio_0.get_party_instance(role='guest',party_id=guest).component_param(with_label=True)dataio_0.get_party_instance(role='host',party_id=host).component_param(with_label=False)intersection_0=Intersection(name="intersection_0")hetero_lr_0=HeteroLR(name="hetero_lr_0",early_stop="weight_diff",max_iter=10,penalty="L2",tol=0.0001,alpha=0.01,optimizer="rmsprop",batch_size=320,learning_rate=0.15)evaluation_0=Evaluation(name="evaluation_0",eval_type="binary")pipeline.add_component(reader_0)pipeline.add_component(dataio_0,data=Data(data=reader_0.output.data))pipeline.add_component(intersection_0,data=Data(data=dataio_0.output.data))pipeline.add_component(hetero_lr_0,data=Data(train_data=intersection_0.output.data))pipeline.add_component(evaluation_0,data=Data(data=hetero_linr_0.output.data))pipeline.compile()job_parameters=JobParameters(backend=backend,work_mode=work_mode)管道.fit(job_parameters)#predict#deployrequiredcomponentspipeline.deploy_component([dataio_0,intersection_0,hetero_lr_0])predict_pipeline=PipeLine()#adddatareaderontopredictpipelinepredict_pipeline.add_component(reader_0)#addselectedcomponentsfromtrainpipeline到预测管道#指定数据源predict_pipeline.add_component(pipeline,data=Data(predict_input={pipeline.dataio_0.input.data:reader_0.output.data}))#runpredictmodelpredict_pipeline.predict(job_parameters)pipeline.dump("pipeline_saved.pkl")ifname=="__main__":parser=argparse.ArgumentParser("PIPELINEDEMO")parser.add_argument("-config",type=str,help="configfile")args=parser.parse_args()ifargs.config不是无:main(args.config)else:main()上面的代码实现了一个简单的LR模型,下面简单解读一下代码:?代码第18-23行:初始化FATE建模的相关配置,涉及FATE几个常用概念party_id:是一个Int类型的数字,用来唯一标识一个单方FATE物理集群role:建模任务中参与建模任务的多方所扮演的角色。一共有三个角色:guest是数据应用方party是数据标签y值的一方,一个建模任务只有一个guest方;host为数据提供者,只提供建模特征x,参与建模任务的host方可以大于等于一个;arbiter为仲裁者,作为可信第三方参与聚合和平均建模过程中的操作,在FATE中,仲裁员可以由客方服务;backend:指定分布式计算存储引擎,backend=0,使用eggroll作为分布式计算和存储工具,backend=1使用spark和rabbitmq作为消息队列,backend=2使用spark和pulsar的组合;work_mode:work_mode=0为独立,work_mode=1为集群;代码第25-26行:声明guest端和host端的文件名。在这段代码中,eggroll用于分布式计算和存储。eggroll中,命名空间namespace和表名name共同指定一个数据文件;?代码28行:初始化模型流水线,指定来宾方和宿主方对应的任务发起者和party_id;代码第30-32行:定义reader,指定guest方和host方的使用数据;代码第34-36行:初始化dataIO,对双方样本进行初步分析,指定样本是否包含y值,该步骤也支持缺失值的数据填充;?代码第38行:初始化intersect隐私交集组件,用于计算多个数据源中用户id的交集,不公开交集外的任何用户id,FATE支持两种隐私交集方式:RAW和RSA。RSA相交方式比RAW方式更安全,但计算和通信成本高于RAW方式;?代码第39行:定义LR模型组件,同时指定LR模型参数,垂直联邦LR模型参数与传统机器学习LR基本一致;40行代码:定义一个模型评估器,评估的模型类型是二元分类模型;?代码第42-46行:将上述功能组件按照建模过程的先后顺序依次添加到流水线中;?代码第48-50行:编译流水线;初始化建模任务参数,设置指定work_node和backend;训练流水线;?代码第54行:指定管道部署上线时需要的功能组件;?代码第56-62行:定义模型预测的pipeline,并添加相应的组件。与用于模型训练的流水线相比,主要区别在于数据读取器;?代码第64行:使用模型预测;?代码第65行:savemodel参考:《联邦学习白皮书v2.0》AQuasi-NewtonMethodBasedVerticalFederatedLearningFrameworkforLogisticRegression《联邦学习的研究与应用》中国工业和信息化出版集团《联邦学习Federated Learning》
