图模型+Bert香不香?完全基于注意力机制的图表征学习模型Graph-Bert
作者 | 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 主要由四部分组成:
1、将原始图分解为无边子图(不考虑子图中的边信息)
2、节点输入特征的嵌入表示
3、基于图transformer的节点表征学习编码器,编码器的输出作为学习到的节点特征表示。
4、基于图transformer的解码器
(一)无边子图分解
这部分对应上图中的step1,主要将原始输入图分解为多个子图,每个子图都包含一个中心节点和固定数量的邻居节点,邻居节点就代表了中心节点的上下文信息,因此如何为中心节点选取邻居节点是这一步的关键。方法有很多种,本文采用的是top-K关系值方法,类似于KNN算法,计算每个节点与其他所有节点的关联(intimacy)程度,然后选取关系值最大的前K个点作为邻接节点。关系矩阵的计算方法采用pagerank算法:
表示列归一化(随机游走归一化)的邻接矩阵A,即
,D 是度矩阵,注意A和D都是相对于输入图而言的。给定图G以及该图的关系矩阵S,那么就可以得到图中任意节点vi的上下文信息:
这里节点vi的邻居节点vj既可以是距离较近的,也可以是距离较远的,并不局限于边连接。
(二)节点输入特征嵌入表示
节点的排序
不同于图片像素和句子中的词,图的节点并没有明确的顺序,理论上我们在表示节点特征时,交换任何两个节点在矩阵中的顺序都不应该影响最终结果(置换不变性),然而在用矩阵表示节点特征信息时,矩阵的行/列必须和权重矩阵(例如FC层)列/行进行对应,否则即便是同一特征矩阵,在不同的行排列下也会得到不同的计算结果,这显然是不合理的。因此还是需要按照一定的顺序来对每个子图的输入节点特征向量(矩阵)进行排序,从而得到特征矩阵(张量)。这里按照前面计算得到的关联值由大到小进行排序。
特征向量嵌入表示
通过四种方法来逐步得到每个节点特征向量的嵌入表示:
1、原始特征向量嵌入
这一步主要将原始特征嵌入到一个新的特征空间,对于不同类型的输入数据可以使用不同的Embed函数,例如对于图片可以使用CNN,对于序列信息则可以使用LSTM。
2、Weisfeiler-Lehman 绝对角色嵌入
这一步学习每个节点在全局图(即输入图)中的唯一表示,通过WL算法完成。WL算法根据节点在图中的结构位置来标记节点,结构位置相同的节点会得到相同的标记,这里的结构位置是指节点在完整图(而不是子图)中的位置,因此与子图无关。节点的WL绝对角色嵌入向量计算方法为:
这一步主要是获取节点全局位置的信息,详细细节可以参考原文。
3、基于关联值的相对位置嵌入
相较于上一步基于WL的全局位置嵌入,这一步主要是获取节点在子图中的局部信息:
P是一个位置函数,对于中心节点vi,P(vi)=1,对于其他的周围节点vj,和vi关联值越大,P(vj)越小。
4、基于节点距离的相对距离嵌入
这一步主要是平衡上面两步的嵌入值,通过计算两个节点在原始图(考虑边)中的相隔的边距离来计算嵌入值:
由于这一步是基于全局图的,因此不同子图中的相同节点之间得到的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 在图表征学习任务中的预训练和微调,对于预训练,主要考虑节点属性重建以及图结构恢复任务,对于表征学习相关应用,主要考虑节点分类和图聚类任务。
(一)模型预训练
1、节点原始特征重建
如何从学习到的节点特征表示中还原原始输入特征是采用预训练模型时需要关注的点:
在监督时自然采用和编码-解码器相同的监督方式:
考虑到节点的特征可能非常稀疏,这里额外加入了一个Mask矩阵:
2、图结构重建
通过图结构重建来保证模型能学习到图的结构信息,该任务依然是作为预训练任务。图的结构可以用一个标签向量y来表示,yij表示节点i和j之间的连接关系,包含两个值(i->j, j->i),因此我们需要预测的是:
损失函数采用多类交叉熵损失函数即可:
考虑到图比较稀疏时,大部分节点之间都没有连接(例如对于一个总节点数为100,平均1阶邻居节点数为5的图,其邻接矩阵就有95%的地方为0),需要对负例(即无连接的节点对)进行采样来保证正负例平衡。
通过将上述两种不同的学习任务与变量正则化项结合,我们可以定义正式训练前的目标函数。通过优化该目标函数将有助于对Graph-Bert进行有效的预训练。
(二)模型迁移与微调
在将Graph-Bert应用在新任务中时,既可以直接使用模型学习到的图特征表示,也可以根据实际情况做一些必要的调整。这里主要考虑节点分类和图聚类任务,其中图聚类任务可以直接使用学习到的特征表示,而节点分类还需要做一些调整。
1、节点分类
通过额外添加FC层和softmax来进行节点分类:
相应的损失函数为:
因此额外需要训练的就是FC层,通过将FC层和原来的Graph-Bert结合,并重新训练,就可以完成节点分类的任务。
2、图聚类
图聚类主要是将图中的节点分为多类,由于聚类属于非监督的无参算法,因此不需要额外添加权重,直接在学习到的节点特征上进行聚类即可,使用诸如K-means的算法就可以完成,需要优化的目标函数为:
该函数中仍然包含了一些变量,可以用EM算法来高效地学习,而不是反向传播。
总结
本文提出的Graph-Bert模型属于Bert模型在图结构数据上的拓展,在一定程度上降低了对节点间固有连接的依赖,使得模型可以更好的进行预训练和并行计算。笔者个人认为这种思想和点云很相似,具体区别还有待探究。
(*本文为AI科技大本营翻译文章,转载请微信联系 1092722531)
◆
精彩推荐
◆
1、评选进行中,参与投票即有机会参与抽奖,60+公开课免费学习
2、【Python Day——北京站】现已正式启动,「新春早鸟票」火热开抢!2020年,我们还将在全国多个城市举办巡回活动,敬请期待!活动咨询,可扫描下方二维码加入官方交流群~
CSDN「Python Day」咨询群 ????
来~一起聊聊Python
如果群满100人,无法自动进入,可添加会议小助手微信:婷婷,151 0101 4297(电话同微信)
推荐阅读
疫情严重,潜伏期也有传染性?科技公司在行动
召唤超参调优开源新神器:集XGBoost、TensorFlow、PyTorch、MXNet等十大模块于一身
5个可以帮助你提高工作效率的新AI工具
亚马逊机器学习服务:深入研究AWS SageMaker
从4个月到7天,Netflix开源Python框架Metaflow有何提升性能的魔法?
管理7k+工作流,月运行超10000万次,Lyft开源的Flyte平台意味着什么?
伯克利新无监督强化学习方法:减少混沌所产生的突现行为
机器推理文本+视觉,跨模态预训练新进展
你点的每个“在看”,我都认真当成了AI
相关文章:

闭关纪要17.Google app engine的简单应用
在上面用了十一篇博客的文章详细的介绍了,Step1账户登录系统之后,从现在开始,继续写闭关纪要,因为Step1账户登录系统也是闭关工作的一部分,因此保留序号,这篇纪要在上次的闭关纪要5.WML,UTF-8,BOM,签名及其…
Redis源码解析——内存管理
在《Redis源码解析——源码工程结构》一文中,我们介绍了Redis可能会根据环境或用户指定选择不同的内存管理库。在linux系统中,Redis默认使用jemalloc库。当然用户可以指定使用tcmalloc或者libc的原生内存管理库。本文介绍的内容是在这些库的基础上&#…

poj_2479 动态规划
题目大意 给定一列数,从中选择两个不相交的连续子段,求这两个连续子段和的最大值。 题目分析 典型的M子段和的问题,使用动态规划的方法来解决。 f[i][j] 表示将A[1...i] 划分为j个不相交连续子串,且A[j]属于第i个子串,…
Redis源码解析——字典结构
C语言中有标准的字典库,我们可以通过pair(key,value)的形式存储数据。但是C语言中没有这种的库,于是就需要自己实现。本文讲解的就是Redis源码中的字典库的实现方法。(转载请指明出于breaksoftware的csdn博客) 一般情况下…
十步,教你把Python运行速度提升 30%
作者 | Martin Heinz译者 | 陆离编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】一直以来,诟病 Python语言的人经常说,他们不想使用的一个原因是 Python 的速度太慢了。不管使用哪一种编程语言,程序…

字符串转换成NSDate类型的 为nil解决方法
方法一 通过下列函数来解决 但是得到的日期会改变 修改方法fix- (NSDate *)timeForString:(NSString *)string {NSMutableString *timeString [[NSMutableString alloc] initWithString:string]; [timeString setString:[timeString stringByReplacingOccurrence…
Redis源码解析——字典基本操作
有了《Redis源码解析——字典结构》的基础,我们便可以对dict的实现进行展开分析。(转载请指明出于breaksoftware的csdn博客) 创建字典 一般字典创建时,都是没有数据的,但是字典类型需要确定,所以我们看到R…

[转]控制 Cookie 的作用范围
默认时,网站的所有 Cookies 都一起被存储在客户端,并且所有 Cookies 连同网站的任何请求一起被发送到服务器。换句话说,网站中的每个页面都能够为网站获取所有的 Cookies。但是,你能够通过两个方式来设置 Cookies 的作用范围&…
强化学习70年演进:从精确动态规划到基于模型
作者 | Nathan Lambert译者 | 泓礼编辑 | 夕颜出品 | AI科技大本营(ID: rgznai100)【导读】这是一份帮你了解强化学习算法本质的资源,无需浏览大量文档,没有一条公式,非常适合学生和研究人员阅读。作为强化学习研究人员…

Android ActionBar相关
1.Android 5.0 删除ActionBar下面的阴影 于Android 5.0假设你发现的ActionBar下面出现了阴影,例如,下面的设置,以消除阴影: getActionBar().setElevation(0); Android 5.0之前能够用以下代码消除阴影: <item name&q…
Redis源码解析——字典遍历
之前两篇博文讲解了字典库的基础,本文将讲解其遍历操作。之所以将遍历操作独立成一文来讲,是因为其中的内容和之前的基本操作还是有区别的。特别是高级遍历一节介绍的内容,充满了精妙设计的算法智慧。(转载请指明出于breaksoftwar…
开发者在行动!中国防疫开源项目登上GitHub TOP榜
整理 | 唐小引出品 | CSDN(ID:CSDNnews)【导读】用开发者们的方式支援这场没有硝烟的战争!截止北京时间 1 月 28 日下午 15:47,全国确诊新型冠状病毒的数字已经到达了 4586 例,疑似高达 6973 例,…

像童话一样学习OSPF原理
可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成几个 区(area),现在我们来看看区域内的某一个人(你所在的机器root)是怎样得到一张 世界地图(routing table)的。 首先,你得跟你周围的人(…

队列——PowerShell版
继续读啊哈磊《啊哈!算法》感悟系列——队列 地铁售票处排队,先来的人先到队首先买完先走,后来的人排在队尾等候后买完后走。 想买票,必须排在队尾;买完票,只能从队首离开。 这种先进先出(First…

Redis源码解析——双向链表
相对于之前介绍的字典和SDS字符串库,Redis的双向链表库则是非常标准的、教科书般简单的库。但是作为Redis源码的一部分,我决定还是要讲一讲的。(转载请指明出于breaksoftware的csdn博客) 基本结构 首先我们看链表元素的结构。因为…

12月第三周安全要闻回顾:浏览器安全不容忽视,SSL弱点影响网站安全
本周(081215至081221)安全方面的新闻众多,主要集中在***与威胁趋势方面。浏览器安全方向波澜起伏,微软推出了针对上周公开的IE7新漏洞的紧急安全补丁,但目前互联网上针对该漏洞的大规模***仍在继续,******的…
GPT2文本生成有问题?这里有些潜在解决思路
作者 | Leo Gao译者 | 凯隐编辑 | 夕颜出品 | AI科技大本营(ID: rgznai100) 【导读】在过去的一年中,人们对文本生成模型的兴趣重新燃起,这在很大程度上要归功于GPT2,它主要展示了使用更大模型、更大数据和更大计算量的…

HTML5学习之二:HTML5中的表单2
(本内容部分节选自《HTML 5从入门到精通》) 对表单的验证 ———————————————————————————————————————————————————————— •1、required属性 required属性主要目的是确保表单控件中的值已填写。在提交时&…
Redis源码解析——有序整数集
有序整数集是Redis源码中一个以大尾(big endian)形式存储,由小到大排列且无重复的整型集合。它存储的类型包括16位、32位和64位的整型数。在介绍这个库的实现前,我们还需要先熟悉下大小尾内存存储机制。(转载请指明出于…
GitHub标星1.2w+,Chrome最天秀的插件都在这里
作者 | Rocky0429来源 | Python空间(ID: Devtogether)大家好,我是 Rocky0429,一个沉迷 Chrome 不能自拔的蒟蒻...作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥,当我第一次了解 Chrome 的时候ÿ…

基础篇 第四节 项目进度计划编辑 之 任务关联性设定
1.任务关联性的类型 ◎完成 —— 开始 FS ◎开始 —— 开始 SS ◎开始 —— 完成 SF 完成 —— 完成 FF 2.设定任务关联性 三种方法: ◎在条形图中直接拖拽 ◎在“前置任务”列中编辑 ◎在“任务信息”中的“前置任务”选项卡中编辑 3.设定“延隔时间” 延隔时间小于…
开坑,写点Polymer 1.0 教程第3篇——组件注册与创建
之前一篇算是带大家大致领略了一下Polymer的风采。这篇我们稍微深入一丢丢,讲下组件的注册和创建。 创建自定义组件的几种方式 这里我们使用Polymer函数注册了一个自定义组件"my-element" // register an element Polymer({is: my-element,created: funct…
Redis源码解析——Zipmap
本文介绍的是Redis中Zipmap的原理和实现。(转载请指明出于breaksoftware的csdn博客) 基础结构 Zipmap是为了实现保存Pair(String,String)数据的结构,该结构包含一个头信息、一系列字符串对(之后把一个“字符串对”称为一个“元素…

IIS7入门之旅:(3)CGI application和FastCGI application的区别
前言: 一如既往地,IIS支持通过提供pluggable module来提供对第3方script的支持,例如php等。在IIS7中,对于CGI的支持有了一个新的变化,就是同时提供了2种CGI支持模块,分别为:CGIModule (cgi.dll)和FastCGIMo…

抗击疫情!阿里云为加速新药疫苗研发提供免费AI算力
1月29日,阿里云正式宣布:疫情期间,向全球公共科研机构免费开放一切AI算力,以加速本次新型肺炎新药和疫苗研发。 目前,中国疾控中心已成功分离病毒,疫苗研发和药物筛选仍在争分夺秒地进行。新药和疫苗研发期…
SpriteBuilder中如何平均拉伸精灵帧动画的距离
首先要在Timeline中选中所有的精灵帧,可以通过如下2种的任意一种办法达成: 1按下Shift键的同时鼠标单击它们 2鼠标在Timeline空白区拖拽直到拉出的矩形包围住所有精灵帧方块后放开鼠标。 你可以通过查看Timeline中精灵帧方块上是否有阴影来辨识是否选中…

C++拾趣——类构造函数的隐式转换
之前看过一些批判C的文章,大致意思是它包含了太多的“奇技淫巧”,并不是一门好的语言。我对这个“奇技淫巧”的描述颇感兴趣,因为按照批判者的说法,C的一些特性恰巧可以让一些炫耀技术的同学有了炫耀的资本——毕竟路人皆知的东西…
数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人
作者 | Just出品 | AI科技大本营(ID:rgznai100)新型肺炎疫情防控战在各大互联网科技公司拉响,阿里、百度等公司陆续对外提供相应技术和产品。当前,疫情当前防控一线人员紧缺,多地政务热线迎来大波问询市民,…

路由器互联端口处于不同网段的路由方法和原理
如下图:两台cisco路由器相连接的两个端口不在同一个网络,如何实现两台路由器的互联?初看似乎绝对不可能,但是这是可行的,而且我已经把这个变成了现实。这里讲述配置的方法,以及解释原理。这个就要讲到路由原…