草庐IT

联邦GNN综述与经典算法介绍

Jcloud 2023-03-28 原文

作者:京东科技 李杰

联邦学习和GNN都是当前AI领域的研究热点。联邦学习的多个参与方可以在不泄露原始数据的情况下,安全合规地联合训练业务模型,目前已在诸多领域取得了较好的结果。GNN在应对非欧数据结构时通常有较好的表现,因为它不仅考虑节点本身的特征还考虑节点之间的链接关系及强度,在诸如:异常个体识别、链接预测、分子性质预测、地理拓扑图预测交通拥堵等领域均有不俗表现。

那么GNN与联邦学习的强强组合又会擦出怎样的火花?

通常一个好的GNN算法需要丰富的节点特征与完整的连接信息,但现实场景中数据孤岛问题比较突出,单个数据拥有方往往只有有限的数据、特征、边信息,但我们借助联邦学习技术就可以充分利用各方数据安全合规地训练有强劲表现的GNN模型。

读罢此文,您将获得如下知识点:

•GNN经典算法原理及计算模型

•联邦学习定义与分类

•联邦GNN的两种分类方法及细节

•基于横向联邦的FedGNN模型(微软亚研,2021)、基于纵向联邦的VFGNN模型(浙大+蚂蚁,2022)

一、GNN原理

1.1 图场景及数据表示

能用图刻画的场景很多,比如:社交网络、生物分子、电商网络、知识图谱等。

图最基础且通用的分类是将其分为:同构图(一种节点+一种边)与异构图(节点类型+边类型>2),相应的示意图如下。

一般来说,原始的图数据由两部分组成:节点数据(节点类型+节点ID+节点特征)、边数据(边类型+起点+终点)。原始数据经过解析处理后载入图存储模块,图存储的基本形式为邻接矩阵(COO),但一般出于存储与计算开销考虑采用稀疏存储表示(CSC/CSR)。

1.2 GNN任务分类

GNN任务一般分为如下四类:

•节点/边分类:异常用户识别。

•链接预测:user-item购物倾向、知识图谱补全。

•全图分类:生物分子性质预测。

•其他:图聚类、图生成。

1.3 GNN算法原理

我们以GraphSAGE为例讲解GNN的计算原理[1],大致包含三个过程:采样、聚合、拟合目标。GraphSAGE示意图如下:

GraphSAGE算法的伪代码如下:

下面我们给合实例与公式详细说明其计算过程,下图先给出采样过程与消息传递过程的框架原理。

下图给出了具体的消息传递执行过程。

二、联邦学习

之前机器学习模型训练的经典架构是:数据中心从各客户端或机构收集原始数据后,在数据中心对收集的全体数据进行模型训练。近年来随着数据隐私保护法规的颁布和数据安全意识的提升,机构间交换明文数据就不可行了。如何综合多个用户或机构间数据来训练模型?联邦学习技术应运而生。联邦学习一般分为如下两大类[2]:

•联邦学习(横向):两个机构拥有较多相同特征,但是重合样本ID很少。比如:北京医院和上海医院的病人数据。

•联邦学习(纵向):两个机构拥有较多相同样本ID,但是机构间重合特征较少。比如:北京银行和北京保险公司的客户数据。

2.1 横向联邦学习

如上图所示,左边红虚线框内是数据表示,即重合样本较少,但特征相同。右边是经典的横向FedAvg算法,每个客户端拥有同样的模型结构,初始权重由server下发至客户端,待各客户端更新本地模型后,再将梯度/权重发送至server进行聚合,最后将聚合结果下发给各客户端以更新本地模型。

2.2 纵向联邦学习

如上图所示,左边红虚线框内代表数据表示,即两方拥有较多相同样本ID,但是重合特征较少。右边是经典的两方纵向DNN模型训练架构[3],其中A方bottom层结果要发送至B方,而B方拥有label,用来计算loss及梯度,详细过程参考[4]。

三、联邦GNN

3.1 联邦GNN分类

3.1.1 图对象+数据划分

根据图数据在客户端的分布规则,具体以图对象(图、子图、节点)与数据划分(横向、纵向)角度来看,可以将联邦GNN分为四类[5]:

1)inter-graph FL

在此分类中,客户端的每条样本是图数据,最终的全局模型处理图级别的任务。此架构广泛应用在生物工程领域,通常用图来表示分子结构,其中节点表示原子,边表示原子间的化学键。在药物特性研究方面可以应用此技术,每个制药厂k都维护了自己的分子-属性数据集

,但都不想分享给竞争对手。借助inter-graph FL技术,多家药厂就可以合作研究药物性质。在此例中,全局模型为:

2)horizontal intra-graph FL

上图中全部客户端拥有的数据构成完整的图,其中虚线表示本应存在但实际不存在的边。此类架构中,每个客户端对应的子图拥有相同的特征空间和标签空间但拥有不同的ID。在此设置下,全局GNN模型一般处理节点类任务和边任务:

3)vertical intra-graph FL

此类架构中,客户端共享相同的ID空间,但不共享特征和标签空间。上图中的垂直虚线代表拥有相同ID的节点。在此架构中全局模型不唯一,这取决于多少客户端拥有标签,同时也意味着此架构可进行multi-task learning。此架构主要用来以隐私保护的方式聚合各客户端相同节点的特征,共享相同节点的标签。如果不考虑数据对齐和数据共享问题,则相应的目标函数定义为:

此架构一般应用在机构间合作,如反洗钱。犯罪分子采用跨多个机构的复杂策略进行洗钱活动,这时可应用此架构,通过机构间合作识别出洗钱行为。

4)graph-structured FL

此架构用来表示客户端之间的拓扑关系,一个客户端相当于图中一个节点。此架构会基于客户端拓扑聚合本地模型,全局模型可以处理联邦学习领域的各种任务和目标函数。全局GNN模型旨在通过客户端之间的拓扑关系挖掘背后的隐含信息。此架构的经典应用是联邦交通流量预测,城市中的监控设备分布在不同的地方,GNN用来描述设备间的空间依赖关系。以上图为例全局GNN模型的聚合逻辑如下:

本节总结

3.1.2 二维分类法

根据参考文献[6],我们可以从2个维度对FedGNNs进行分类。第一个维度为主维度,聚焦于联邦学习与GNN如何结合;第二个维度为辅助维度,聚焦于联邦学习的聚合逻辑,用来解决不同level的图数据异构性。其分类汇总图大致如下:

1)GNN-assisted FL

借助结构化的客户端来提升联邦学习训练效果,用虚线来表示客户端之间的网络拓扑关系。此架构一般分为两种形式:

•中心化架构:拥有客户端间的全局网络拓扑。可训练GNN模型提升联邦聚合效果,也可帮助客户端更新本地模型。

•非中心化架构:客户端间的全局网络拓扑必须提前给定,这样拥有子图的客户端就可以找到它在图中的邻居。

2)FL-assisted GNN

借助分散的图数据孤岛来提升GNN模型效果,具体通过联邦学习把图数据孤岛组织起来训练一个全局GNN模型。根据客户端是否有相同节点,此架构可分为如下两类:

•horizontal FedGNN:各客户端拥有的重叠节点不多,有可能会丢失跨客户端的链接,通常需要较复杂的处理方法。

•vertical FedGNN:各客户端拥有相同的节点集合,但持有的特征不相同。根据特征的分区方式不同,相应的处理方法也随之变化。

3)Auxiliary taxonomy

辅助分类聚焦于解决联邦学习客户端之间的异构性问题。具体可以分为三类:

•客户端拥有相同ID:可将节点特征或中间表征上传至联邦服务器进行联邦聚合。常用于vertical FedGNN和有部分重复节点的水平FedGNN。

•客户端拥有不同节点但相同网络结构:联邦聚合对象主要是模型权重和梯度。常用于GNN-assisted FL和无重复节点的horizontal FedGNN。

•客户端拥有不同网络结构:先把本地模型做成图,然后将GNN作用于图之上。联邦聚合对象是GNN权重和梯度,常用于centralized FedGNN。

3.2 FedGNN

3.2.1 问题定义

3.2.2 FedGNN原理与架构

如上图,FedGNN[7]由一个中心服务器和大量客户端组成。客户端基于其用户交互物品与邻居客户端在本地维护了一个子图。客户端基于本地子图学习user/item embedding,以及GNN模型,然后将梯度上传给中心服务器。中心服务器用来协调客户端,具体是在训练过程中聚合从多个客户端收集的梯度(基于FedAvg算法),并将聚合后的梯度回传给客户端。如下我们将依次介绍一些技术细节。

FedGNN的完整算法流程见下述Algorithm1,其中有两个隐私保护模块:其一是隐私保护模型更新(Algorithm1的9-11行),用来保护梯度信息;其二是隐私保护user-item图扩充模块(Algorithm1中第15行),用来对user和item的高阶交互进行建模。

3.2.3 隐私保护模型更新

embedding梯度和模型梯度(GNN+rating predictor)直接传输会泄露隐私,因此需要对此进行安全防护。因为每个客户端维护了全量item的embedding表,通过同态加密保护梯度就不太现实(大量的存储和通信开销),文献[7]提出两个机制来保护模型更新过程中的隐私保护。

1)伪交互物品采样

随机采样M个用户并未交互过的物品,根据交互物品embedding梯度分布随机生成伪交互物品embedding梯度。于是第i个用户的模型和embedding梯度修改为

2)采用LDP(本地差分隐私)护本地梯度

首先通过梯度的无穷范数和阈值 δ 对梯度进行截断,然后基于LDP思想采用0均值拉普拉斯噪声对前述梯度进行扰动,从而实现对用户隐私的保护。相应的公式表达为:

g i=clip(g i​,δ)+Laplace(0,λ)。受保护的梯度再上传到中心服务器进行聚合。

3.2.4 隐私保护图扩充

客户端本地user-item图以隐私保护方式找到邻居客户端,以达到对本地图自身的扩充。在中心化存储的GNN场景中,user与item的高阶交互可通过全局user-item图方便获取。但非中心化场景中,在遵守隐私保护的前提下要想求得user-item高阶交互不是易事。文章提出通过寻找客户端的匿名邻居以提升user和item的表征学习,同时用户隐私不泄露,详细过程如下:

首先,中心服务器生成公钥并分发给各客户端。客户端收到公钥后,利用同态加密技术对交互物品ID进行加密处理。前述加密ID和用户embedding被上传至第三方服务器(不需要可信),通过PSI技术找到有相同交互物品的用户,然后为每个用户提供匿名邻居embedding。最后,我们把用户的邻居用户节点连接起来,这样就以隐私保护的方式添加了user-item的高阶交互信息,丰富了客户端的本地user-item子图。

3.3 VFGNN

3.3.1 数据假设

训练一个好的GNN模型通常需要丰富的节点特征和完整的连接信息。但是节点特征和连接信息通常由多个数据方拥有,也就是所谓的数据孤岛问题。下图我们给出图数据纵向划分的例子[8],其中三方各自拥有节点不同的特征,各方拥有不同类型的边。

3.3.2 算法架构及流程

安全性假设:数据拥有方A,B,C和服务器S都是半诚实的,并且假定服务器S和任一数据拥有方不会合谋。这个安全假设符合大多数已有工作,并且和现实场景比较契合。

上图即为VFGNN的架构图,它的计算分为两大部分:

•隐私数据相关计算:一般在数据拥有方本地进行。在GNN场景中,隐私数据有:节点特征、label、边信息。

•非隐私数据相关计算:一般将计算权委托给半诚实server,主要是出于计算效率的考虑。

考虑到数据隐私性的问题,上述计算图分为如下三个计算子图,且各自承担的工作如下:

CG1:隐私特征和边相关计算。 先利用节点隐私特征生成initial node embedding,这个过程是多方协同工作的。接着通过采样找到节点的多跳邻居,再应用聚合函数生成local node embedding。

CG2:非隐私数据相关计算。 出于效率考虑,作者把非隐私数据相关计算委托给半诚实服务器。此服务器把从各方收集的local node embedding通过不同的COMBINE策略处理生成global node embedding。接着可以进行若干明文类的操作,比如max-pooling、activation(这些计算在密文状态下不友好)。进行一系列明文处理后,我们得到最后一个隐层输出ZL​,然后把它发送给拥有label的数据方计算预测值。

CG3:隐私标签相关计算。 以节点分类任务为例 ,当收到ZL​后可以快速计算出预测值,具体通过softmax函数进行处理。

3.3.3 重要组件

Generating Initial Node Embedding

如果各方独立生成initial node embedding(上图a),则遵循如下计算公式:

如果各方协同生成initial node emb,则可按上图b中应用MPC技术进行处理。

Generating Local Node Embedding

基于前述生成的initial node embedding,及节点的多跳邻居节点,应用聚合函数可以生成local node embedding。邻居节点的聚合操作必须在本地进行而不需要多方协同,目的是保护隐私的边信息。一个节点的邻居节点聚合操作和常规GNN一样,以GraphSAGE为例节点的聚合操作是通过采样和聚合特征形成了local node embedding,具体公式如下:

GraphSAGE中,常用的聚合函数有:Mean、LSTM、Pooling。接着数据拥有方把local node embedding发送给半诚实服务器,以进行COMBINE操作及后续的非隐私数据计算逻辑。

Generating Global Node Embedding

对各方传来的local node embedding执行combine操作可以生成global node embedding。combine策略一般是可训练且高表达容量,文章给出了三种策略:

1)Concat

2)Mean

3)Regression

3.3.4 隐私保护DP

如果在前向过程中把local node embedding直接传给半诚实服务器,或在反向传播过程中直接传递梯度信息很可能造成信息泄露。本文提出了两种基于DP的方法用来保护信息发布过程,算法流程如下:

3.3.5 VFGNN前向算法

以GraphSAGE处理节点分类任务为例,VFGNN算法的前向过程描述如下:

3.4 其他算法及项目

最近四年出现的联邦GNN算法[9]:

开源项目有:FedGraphNN[10]。

参考资料

1.Hamilton W, Ying Z, Leskovec J. Inductive representation learning on large graphs[J]. Advances in neural information processing systems, 2017, 30.

2.Yang Q, Liu Y, Chen T, et al. Federated machine learning: Concept and applications[J]. ACM Transactions on Intelligent Systems and Technology (TIST), 2019, 10(2): 1-19.

  1. https://fate.readthedocs.io/en/develop/_build_temp/python/federatedml/nn/hetero_nn/README.html

4.Zhang Y, Zhu H. Additively homomorphical encryption based deep neural network for asymmetrically collaborative machine learning[J]. arXiv preprint arXiv:2007.06849, 2020.

5.Zhang H, Shen T, Wu F, et al. Federated graph learning--a position paper[J]. arXiv preprint arXiv:2105.11099, 2021.

6.Liu R, Yu H. Federated graph neural networks: Overview, techniques and challenges[J]. arXiv preprint arXiv:2202.07256, 2022.

7.Wu C, Wu F, Cao Y, et al. Fedgnn: Federated graph neural network for privacy-preserving recommendation[J]. arXiv preprint arXiv:2102.04925, 2021.

8.Chen C, Zhou J, Zheng L, et al. Vertically federated graph neural network for privacy-preserving node classification[J]. arXiv preprint arXiv:2005.11903, 2020.

9.《图联邦学习进展与应用》 史春奇

  1. https://github.com/FedML-AI/FedML/tree/master/python/app/fedgraphnn

有关联邦GNN综述与经典算法介绍的更多相关文章

  1. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  4. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  5. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  6. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  7. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  8. ruby - 在 Ruby 中实现 Luhn 算法 - 2

    我一直在尝试用Ruby实现Luhn算法。我一直在执行以下步骤:该公式根据其包含的校验位验证数字,该校验位通常附加到部分帐号以生成完整帐号。此帐号必须通过以下测试:从最右边的校验位开始向左移动,每第二个数字的值加倍。将乘积的数字(例如,10=1+0=1、14=1+4=5)与原始数字的未加倍数字相加。如果总模10等于0(如果总和以零结尾),则根据Luhn公式该数字有效;否则无效。http://en.wikipedia.org/wiki/Luhn_algorithm这是我想出的:defvalidCreditCard(cardNumber)sum=0nums=cardNumber.to_s.s

  9. Ruby 斐波那契算法 - 2

    下面是我写的一个计算斐波那契数列中的值的方法:deffib(n)ifn==0return0endifn==1return1endifn>=2returnfib(n-1)+(fib(n-2))endend它工作到n=14,但在那之后我收到一条消息说程序响应时间太长(我正在使用repl.it)。有人知道为什么会这样吗? 最佳答案 Naivefibonacci进行了大量的重复计算-在fib(14)fib(4)中计算了很多次。您可以将内存添加到您的算法中以使其更快:deffib(n,memo={})ifn==0||n==1returnnen

  10. ruby-on-rails - Rails add_index 算法 : :concurrently still causes database lock up during migration - 2

    为了防止在迁移到生产站点期间出现数据库事务错误,我们遵循了https://github.com/LendingHome/zero_downtime_migrations中列出的建议。(具体由https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in概述),但在特别大的表上创建索引期间,即使是索引创建的“并发”方法也会锁定表并导致该表上的任何ActiveRecord创建或更新导致各自的事务失败有PG::InFailedSqlTransaction异常。下面是我们运行Rails4.2(使用Acti

随机推荐