FATE是微众银行开发的联邦学习平台,是全球首个工业级的联邦学习开源框架,在github上拥有近4000stars,可谓是相当有名气的,该平台为联邦学习提供了完整的生态和社区支持,为联邦学习初学者提供了很好的环境,否则利用python从零开发,那将会是一件非常痛苦的事情。本篇博客内容涉及《联邦学习实战》第十四章内容,使用的fate版本为1.6.0,fate的安装已经在这篇博客中介绍,有需要的朋友可以点击查阅。本章内容为构建公平的大数据交易市场,随着人工智能的迅速发展,海量的数据已经成为了帮助训练更好模型的最重要的燃料,但是隐私泄露问题阻碍着大量的数据无法流通入市场中,如果采用联邦学习技术,让数据不出本地,就能够帮助模型进行训练,同时用户的隐私也不会泄露,这将会是两全其美的好事,所以,构建公平的大数据交易市场的意义极为重要。
世界各国和中国政府也意识到大数据对未来发展的意义,并且均已经在国家层面进行战略部署,纷纷发布各种与数据相关的战略计划。数据商品与传统商品相比,前景更为广阔,同时也面临许多挑战,主要包括:
指一种对数据进行买卖的行为,企业或政府可以通过交易平台,找到所需的数据资源。大数据交易由三方共同参与,分别为数据提供方,大数据交易平台和数据需求方。
交易平台主要分为三种模式:
数据确权是指数据交易后,数据的所有权和控制权归属问题。数据确权也被普遍任务是数据交易中首要解决的问题,产权归属是交易的前提与基础。
但是由于数据在交易中具有流动性、实时性、复杂性和易复制性等特点,很难进行统一的界定。大数据交易面临的产权归属主要面临四大瓶颈:
当前的数据所有权很多时候是由平台与用户单独签订的协议,比如使用微信时要遵循《腾讯微信软件许可服务协议》。
根据贵阳大数据交易所在2016年推出的《数据定价办法》对数据的定价进行了量化,将数据的影响因素归结为数据品种、时间跨度、数据深度、数据的实用性、完整性以及数据样本的覆盖度等六个维度。
在基于联邦学习构建的大数据交易市场中,卖家并不直接将数据放在交易平台上进行交易,而是组建一个联邦学习网络,通过这个网络,在各个参与方不出本地的前提下,联合各参与方构建更多的二次开发产品,包括联邦模型、联邦数据分析、联邦画像数据等。这些产品通过交易平台对用户进行销售。
相对于传统的大数据市场,这种新型交易平台的优势:
要想数据交易市场在一个良性环境下持续并长久的运行,需要一种激励机制,通过激励数据所有者贡献有价值的数据,可以更好地调动各参与方的积极性。此外,数据交易市场的数据提供方和数据交易平台在数据存储和训练上都需要一定的资源成本开销,公平的激励策略能够帮助各参与方从联邦学习生态中受益。
SHapley(SV)是公平定量评估用户边际贡献度的常用指标。SV起源于合作博弈,并被广泛应用于很多领域,从经济学、信息论到机器学习。SV之所以火热,是因为它具有公平性、个体理性化和可加性等优越性质。在联邦学习中,一个参与节点的SV能够评估该节点对聚合最终模型的边际贡献量。然而SV开销大,计算复杂的为O(n!),n为节点数量。
上一章引入了联邦激励机制的概念,本章详细介绍一种基于区块链的联邦学习P2P支付系统,简称为联邦币,以实现基于SV值的公平激励分配。
在FedCoin中,区块链共识节点计算Shapley值,并基于Shapley工作量证明共识协议创建新的区块。在PoSap机制中,出块奖励是联邦学习任务奖励的一部分,通过共识节点对联邦学习节点的Shapley值计算来决定写块权,从而引导区块链共识算力服务于联邦学习激励分配。
与流行的比特币相比,FedCoin采用的PoSap共识机制改进了BitCoin中PoW工作量证明中无意义的散列运算。通过基于真实数据的仿真实验,FedCoin能够公平地评估各参与方对全局模型基于SV的贡献度,并保证达到共识所需的计算资源有限(即在有限的资源内一定能共识)。
这里我简要介绍下联邦学习激励机制的问题描述,这部分首先介绍了FL任务的优化问题,通过SGD求解,计算每个节点的梯度,并将梯度上传到中心节点进行聚合,在这个过程中,计算每个节点的SV,可由下式计算得到:
ϕ i = ∑ S ( K − S − 1 ) ! − S ! K ! ( F S ( w ) − F S ∪ i ( w ) ) \phi _{i}=\sum_{S}\frac{(K-S-1)!-S!}{K!}(F_S(w)-F_{S\cup i}(w)) ϕi=S∑K!(K−S−1)!−S!(FS(w)−FS∪i(w))
S是不包含节点i的任意子集,K是总节点个数, F S ( w ) F_S(w) FS(w)是模型参数w在节点集合S上的损失函数。
可以观察到 ϕ i \phi _{i} ϕi是一个随着参与节点数量增长的NP难问题,我们可以把这个过程看成是K!次全排列中计算节点的边际贡献的平均值。
回到系统的设计,FedCoin系统包括两个参与者网络:联邦学习网络和P2P区块链网络。参与网络的节点用户可以分为四类:联邦学习模型需求方(任务方),联邦学习客户端,联邦学习服务器和区块链共识节点。
因此,联邦学习通过联邦学习服务器将联邦学习网络和区块链网络连接在一起。需要注意的是,SapPrice和TrainPrice随着训练轮次的增加而减少,而训练的总支付可以在轮次之间按照场景定制化分配。
区块链网络中共识节点也称为“矿工”。当矿工从联邦学习网络中接收到SV的计算任务后,矿工为每一个联邦学习客户端节点计算SV,并构建向量 S = [ s k ] k ∈ [ 1 , K ] S=[s_k]_{k\in[1,K]} S=[sk]k∈[1,K],其中 s k s_k sk提供模型参数 w k ∈ W w_k\in W wk∈W的客户端的SV。每个矿工按照算法1独立计算SV向量。由于挖矿的目标是竞争计算SV向量,从而证明矿工的计算能力,将该算法命名为PoSap。
算法1的输入来自联邦学习网络的任务规范,输出是一个写入激励分配支付的新区块。
算法2是验证区块算法,即算法1中VerifyBlock函数。
每当一个矿工接收到一个新的区块Blk时,矿工根据算法2验证这个区块,一旦验证通过,该新区块被更新到本地区块链,挖矿终止。一个新区块需要满足三个条件才能通过验证。
字段名称 | 解释 |
---|---|
区块ID | 区块高度 |
获胜者ID | 区块生成者标志 |
平均S | 算法13行计算出的SV |
前一个区块散列 | 前一个区块的散列值 |
获胜者S | 获胜者计算出的SV |
难度 | 所需难度D |
Merkle树根 | 区块体中交易组织成的Merkle树根 |
区块体中记录两类数据:任务规范(包括算法1的所有输入),区块链网络中的交易。
新区块的挖掘速度是动态调整的。影响因素有两个:矿工的总挖矿能力和生成区块的速度。在相同的挖矿能力下, 随着生成区块速度的提高,挖矿难度会相应降低。在相同区块生成速度的情况下,挖矿难度会随着挖矿能力的提高而提高。难度更新可以通过部署智能合约来实现。
联邦学习模型需求方通过转账V个FedCoin给联邦学习服务器来实现联邦任务的发布,当该笔交易记录到区块上后,联邦学习服务器在客户端发布学习任务规范。V的值应该不大于请求者的联邦学习模型的价值。为了合理分配V,所有节点都应该注册一个交易账户。然后将V的值分成以下三部分。
PoSap的安全性与比特币类似,鼓励矿工向系统贡献其计算资源,当系统中矿工的数量和算力足够多时,该系统的安全性随之提升。此外,还要设计一个抵御大型矿池的形成的支付方案,FeCoin不能抵御超过50%的矿工共谋攻击。
对于自私挖矿策略的安全性讨论,即讨论区块胜利者不发布有效区块而继续挖掘下一个区块,从而获得挖掘上的时间优势问题。
FedCoin的演示Demo和展示视频的链接附上,请各位尝试和观看。
虽然是一篇介绍联邦学习与区块链相结合的应用内容,没有实操部分,全是文字的内容也十分乏味,但是通过这一章内容的学习,又一次拓宽了我的思维,对于联邦学习中的激励问题,可以通过区块链的可信计算来解决奖励分配,这让大数据交易更为安全和直观,从某种意义上来说还很好的衡量了大数据的价值。希望在日后遇到相同情景的需求下,我也能够合理利用联邦学习的激励机制,来解决奖励分配问题。