查看原文
其他

【源头活水】地表最强图神经网络竟然是transformer

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—养生的控制人
地址:https://zhuanlan.zhihu.com/p/382596977


01

参赛感想
从去年底开始陆续做了点图机器学习相关的工作,今年的KDD CUP刚好有图机器学习赛道,一时兴起就决定参加一下。果然被虐的体无完肤,投入的时间大约两周,说几点比赛感想:
题目质量不错,验证集和测试集的分布较为一致,线下线上差距不算大
不过数据量很大,即使选择了数据量最少的图回归问题来做也要跑个10+小时一个模型
idea比不过,还在思考着如何设计pooling策略,榜一大佬用起了transformer,respect!
机器比不过,个人参赛的话实在迭代不了几版模型更别说优化参数了
Anyways,学习一下大佬的模型,跟大家分享一下。(前排都是多模型的集成,这里就介绍下Graphormer),个人理解可能有误,欢迎讨论,不喜轻喷。

02

赛题简介
图回归赛题的任务简单来说就是给定一个分子式(就是一个图),我们需要去预测这个分子的 HOMO-LUMO energy gap,因此模型输入就是一个图,图上的节点和边的特征,模型的输出就是整个图的特征表示。常规的做法可以采用图神经网络进行特征提取,得到每个节点的embedding后再采用一定的pooling策略获得整个图的一个embedding。

03

Graphormer
作者的论文和代码已经放出
https://github.com/microsoft/Graphormer/tree/ogb-lsc
介绍前回顾一下transformer,目前一般说transformer通常指的encoder部分,也就由多头注意力机制和前馈神经网络组成。(不了解transformer的可以参考以前的博文)
https://zhuanlan.zhihu.com/p/343286144

自注意力机制:令输入表示输入,自注意力机制将输入分别经过三个矩阵进行线性变换,然后得到一个权重矩阵  ,将权重矩阵进行归一化后对value进行加权平均后输出。

前馈神经网络,简单来说就是线性层,通常会加上layer normalization(LN)和shortcut操作:

接下来回到作者提出的Graphormer,个人理解其创新点在于两个层面:
特征层面,如何把图结构表征到节点特征当中
注意力层面,如何改造attention机制使得更适合graph结构


04

特征层面
对于一个图来说,节点的中心性(Centrality)通常被用来衡量该节点在图中的重要性,鉴于此,可以在原始节点特征上叠加上这类信息

本质上就是考虑了节点的出度和入度,进行线性变化后进行相加。这样在node embedding中就显式考虑了node importance,用于后续的注意力机制的输入。
self.in_degree_encoder = nn.Embedding(512, hidden_dim, padding_idx=0)self.out_degree_encoder = nn.Embedding(512, hidden_dim, padding_idx=0)node_feature = node_feature + self.in_degree_encoder(in_degree) + self.out_degree_encoder(out_degree)


05

注意力层面

original的transformer的注意力机制使得它具有全局的感受野,前提是对于每一个token需要指定一个位置,比如一个句子中不同词的位置可以用  来代表序列中不同位置的编码。对于图来说并不存在序列这样的位置特性,那么我们应该如何考虑图中不同节点的位置信息呢?
图的结构通常为非欧空间,两个节点的位置关系可以用节点之间的最短路径来表示(没有关联的两个节点之间的最短路径为-1),并进行函数映射得到节点之间的“邻居”注意力(我自己起的名字)

比如学到的b是个单调减函数,那就表达了最短路径越大的节点之间的关系越小,这也是图神经网络中的基本思想:越近的邻居的信息越重要
将这一特征融入注意力矩阵,使得注意力系数也包含了图中节点的相对位置(连接关系)信息

此外,graph相关的任务中通常还有边的信息(表示边的特征向量)可以被利用,每条边连接着两个节点,对于有序节点对(  ),它们之间的最短路径为,则可以用路径的加权平均得到两个节点之间边的相关信息

将这个信息也一起融入到注意力机制

上面考虑的空间特征和边特征最终也就变成了注意力机制中的偏置项(attn_bias),相比于原来的注意力机制的区别在于第三行加入了偏置项:
# Scaled Dot-Product Attention.# Attention(Q, K, V) = softmax((QK^T)/sqrt(d_k))Vq = q * self.scalex = torch.matmul(q, k) # [b, h, q_len, k_len]x = x + attn_biasx = torch.softmax(x, dim=3)x = self.att_dropout(x)x = x.matmul(v) # [b, h, q_len, attn]
那么Graphormer有多强大呢?作者证明了通过选择合适的权重和距离函数,Graphormer可以包含常见的图神经网络模型(比如GIN, GCN, GraphSAGE)。

06

文外讨论
把Spatial Encoding和Edge Encoding一起放到注意力系数中以相加的形式是否能够改进?
1. 加权、相乘?
2. 把  的三部分进行拆分,三个分支的网络分别学习不同层面的信息,然后再后面再对三个分支的网络输出进行concat或者attention是否有帮助?

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存