做者 | Jiawei Zhang、Haopeng Zhang、Congying Xia、Li Sun
译者 | 凯隐
编辑 | Jane
出品 | AI科技大本营(ID:rgznai100)
【导读】本文提出了一种全新的图神经网络 Graph-Bert,仅仅基于 Attention 机制而不依赖任何类卷积或聚合操做便可学习图的表示,而且彻底不考虑节点之间的链接信息。经过将原始图分解为以每一个节点为中心的多个子图来学习每一个节点的表征信息,这不只能解决图模型的预训练问题,还能经过并行处理还提升效率。
论文地址:
https://arxiv.org/abs/2001.05140
简介
传统的图神经网络存在许多严重影响模型性能的问题,例如模型假死和过于平滑问题。模型假死和过于平滑均可以归结于传统 GNN 的类卷积特征学习方式以及基于聚合操做(mean,max,sum)的信息更新方式,这会致使随着模型层数加深,模型会逐渐丧失对输入的响应,所以通常GNN都是只堆叠不超过两层。同时,模型学习到的不一样节点的表征信息也会愈发类似,从而变得没法区分。此外,因为传统GNN都考虑图中的固有内在链接(即边),所以没法对图数据进行并行化处理。
为了解决以上问题,本文提出了Graph-Bert,Bert 是一个用于NLP的模型,其核心在于 attention 机制,将这种机制拓展到图结构数据上,即是 Graph-Bert。Graph-Bert 将原始图采样为多个子图,而且只利用attention机制在子图上进行表征学习,而不考虑子图中的边信息。所以Graph-Bert能够解决上面提到的传统GNN具备的性能问题和效率问题。
此外,传统 GNN 受限于图结构的多样性,没法进行跨任务的预训练,而 Graph-Bert 因为不考虑图中的边信息,所以并不受限于图结构,能够很好地进行预训练和迁移学习。
模型结构介绍
Graph-Bert 主要由四部分组成:
一、将原始图分解为无边子图(不考虑子图中的边信息)
二、节点输入特征的嵌入表示
三、基于图transformer的节点表征学习编码器,编码器的输出做为学习到的节点特征表示。
四、基于图transformer的解码器
(一)无边子图分解
这部分对应上图中的step1,主要将原始输入图分解为多个子图,每一个子图都包含一个中心节点和固定数量的邻居节点,邻居节点就表明了中心节点的上下文信息,所以如何为中心节点选取邻居节点是这一步的关键。方法有不少种,本文采用的是top-K关系值方法,相似于KNN算法,计算每一个节点与其余全部节点的关联(intimacy)程度,而后选取关系值最大的前K个点做为邻接节点。关系矩阵的计算方法采用pagerank算法:

表示列归一化(随机游走归一化)的邻接矩阵A,即

,D 是度矩阵,注意A和D都是相对于输入图而言的。给定图G以及该图的关系矩阵S,那么就能够获得图中任意节点vi的上下文信息:
这里节点vi的邻居节点vj既能够是距离较近的,也能够是距离较远的,并不局限于边链接。
(二)节点输入特征嵌入表示
不一样于图片像素和句子中的词,图的节点并无明确的顺序,理论上咱们在表示节点特征时,交换任何两个节点在矩阵中的顺序都不该该影响最终结果(置换不变性),然而在用矩阵表示节点特征信息时,矩阵的行/列必须和权重矩阵(例如FC层)列/行进行对应,不然即使是同一特征矩阵,在不一样的行排列下也会获得不一样的计算结果,这显然是不合理的。所以仍是须要按照必定的顺序来对每一个子图的输入节点特征向量(矩阵)进行排序,从而获得特征矩阵(张量)。这里按照前面计算获得的关联值由大到小进行排序。
经过四种方法来逐步获得每一个节点特征向量的嵌入表示:
一、原始特征向量嵌入
这一步主要将原始特征嵌入到一个新的特征空间,对于不一样类型的输入数据可使用不一样的Embed函数,例如对于图片可使用CNN,对于序列信息则可使用LSTM。
二、Weisfeiler-Lehman 绝对角色嵌入
这一步学习每一个节点在全局图(即输入图)中的惟一表示,经过WL算法完成。WL算法根据节点在图中的结构位置来标记节点,结构位置相同的节点会获得相同的标记,这里的结构位置是指节点在完整图(而不是子图)中的位置,所以与子图无关。节点的WL绝对角色嵌入向量计算方法为:
这一步主要是获取节点全局位置的信息,详细细节能够参考原文。
三、基于关联值的相对位置嵌入
相较于上一步基于WL的全局位置嵌入,这一步主要是获取节点在子图中的局部信息:
P是一个位置函数,对于中心节点vi,P(vi)=1,对于其余的周围节点vj,和vi关联值越大,P(vj)越小。
四、基于节点距离的相对距离嵌入
这一步主要是平衡上面两步的嵌入值,经过计算两个节点在原始图(考虑边)中的相隔的边距离来计算嵌入值:
因为这一步是基于全局图的,所以不一样子图中的相同节点之间获得的H值是相同的。
(三)基于编码-解码器的图Transformer
谷歌提出的Transformer模型是一种基于全attention的sequence to sequence模型,在NLP任务上取得了比LSTM更好的成绩。这里将Transformer方法推广到了图结构数据。首先将上面计算到的四种嵌入表示聚合,以做为编码器的输入:
聚合方法能够有多种,例如max, sum, mean等。以后经过多层attention操做来逐步更新节点的表示:
QKV都是输入特征矩阵H(l-1)的复制,这里额外添加了一个mask矩阵M,能够学习到子图的上下文信息。
整个Transoformer包含2K层,前K层是编码器,后K层是解码器,经过自回归来监督训练,最终编码器的输出即为学习到的节点特征表示zi。此外还在编码器输入和输入之间添加了res链接。
Graph-Bert预训练与微调
主要介绍 Graph-Bert 在图表征学习任务中的预训练和微调,对于预训练,主要考虑节点属性重建以及图结构恢复任务,对于表征学习相关应用,主要考虑节点分类和图聚类任务。
(一)模型预训练
一、节点原始特征重建
如何从学习到的节点特征表示中还原原始输入特征是采用预训练模型时须要关注的点:
在监督时天然采用和编码-解码器相同的监督方式:
考虑到节点的特征可能很是稀疏,这里额外加入了一个Mask矩阵:
二、图结构重建
经过图结构重建来保证模型能学习到图的结构信息,该任务依然是做为预训练任务。图的结构能够用一个标签向量y来表示,yij表示节点i和j之间的链接关系,包含两个值(i->j, j->i),所以咱们须要预测的是:
损失函数采用多类交叉熵损失函数便可:
考虑到图比较稀疏时,大部分节点之间都没有链接(例如对于一个总节点数为100,平均1阶邻居节点数为5的图,其邻接矩阵就有95%的地方为0),须要对负例(即无链接的节点对)进行采样来保证正负例平衡。
经过将上述两种不一样的学习任务与变量正则化项结合,咱们能够定义正式训练前的目标函数。经过优化该目标函数将有助于对Graph-Bert进行有效的预训练。
(二)模型迁移与微调
在将Graph-Bert应用在新任务中时,既能够直接使用模型学习到的图特征表示,也能够根据实际状况作一些必要的调整。这里主要考虑节点分类和图聚类任务,其中图聚类任务能够直接使用学习到的特征表示,而节点分类还须要作一些调整。
一、节点分类
经过额外添加FC层和softmax来进行节点分类:
相应的损失函数为:
所以额外须要训练的就是FC层,经过将FC层和原来的Graph-Bert结合,并从新训练,就能够完成节点分类的任务。
二、图聚类
图聚类主要是将图中的节点分为多类,因为聚类属于非监督的无参算法,所以不须要额外添加权重,直接在学习到的节点特征上进行聚类便可,使用诸如K-means的算法就能够完成,须要优化的目标函数为:
该函数中仍然包含了一些变量,能够用EM算法来高效地学习,而不是反向传播。
总结
本文提出的Graph-Bert模型属于Bert模型在图结构数据上的拓展,在必定程度上下降了对节点间固有链接的依赖,使得模型能够更好的进行预训练和并行计算。笔者我的认为这种思想和点云很类似,具体区别还有待探究。
(*本文为AI科技大本营翻译文章,转载请微信联系 1092722531)
一、评选进行中,参与投票即有机会参与抽奖,60+公开课免费学习
微信
二、【Python Day——北京站】现已正式启动,
「新春早鸟票」火热开抢!
2020年,咱们还将在全国多个城市举办巡回活动,敬请期待!
活动咨询,
可扫描下方二维码加入官方交流群~
CSDN「Python Day」咨询群
🔽
来~一块儿聊聊Python

若是群满100人,没法自动进入,可添加会议小助手微信:婷婷,151 0101 4297(电话同微信)网络