深入理解图注意力机制(Graph Attention Network)
©PaperWeekly 原创 · 作者|纪厚业
学校|北京邮电大学博士生
研究方向|异质图神经网络及其应用
图神经网络已经成为深度学习领域最炽手可热的方向之一。作为一种代表性的图卷积网络,Graph Attention Network (GAT) 引入了注意力机制来实现更好的邻居聚合。通过学习邻居的权重,GAT 可以实现对邻居的加权聚合。因此,GAT 不仅对于噪音邻居较为鲁棒,注意力机制也赋予了模型一定的可解释性。
下图概述了 Graph Attention Network 主要做的事情。
深入理解图注意力机制
2.1 非对称的注意权重
这种非对称性在图数据上有什么用呢?一个简单的例子:在社交网络中,有一个大 V 和一个普通用户互相关注。但是,大 V 对于普通用户的重要性和普通用户对大 V 的重要性明显是不一样的。
完整的图注意力公式如下:
2.2 可有可无的 LeakyRelu?
这里对原始 GAT 论文中的公式进行了展开解读,一是为了更深入的理解图注意力机制,二是后面的代码解读需要用到这种展开。
2.3 Transformer Vs GAT
上述过程和 GAT 的核心思想非常相似:都是通过探索输入之间的关联性(注意力权重),通过对上下文信息(句子上下文/节点邻居)进行聚合,来获得各个输入(单词/节点)的表示。
在 GAT 中,作者对自注意力进行了简化。每个节点无论是作为中心节点/上下文/聚合输出,都只用一种表示 。也就是说,在 GAT 中,。 在图上,节点的邻居是一个集合,具有不变性。Transformer 将文本隐式的建图过程中丢失了单词之间的位置关系,这对 NLP 的一些任务是很致命的。为了补偿这种建图损失的位置关系,Transformer 用了额外了的位置编码来描述位置信息。
核心代码解读
https://github.com/PetarV-/GAT
但是,这份代码对于初学者来说较难理解。这里对 GAT 的核心代码进行简要的解读和介绍。
def attn_head(seq, out_sz, bias_mat,
activation, in_drop=0.0, coef_drop=0.0, residual=False):
这里有 3 个比较核心的参数:
seq 指的是输入的节点特征矩阵,大小为 [num_graph, num_node, fea_size] out_sz 指的是变换后的节点特征维度,也就是 后的节点表示维度。 bias_mat 是经过变换后的邻接矩阵,大小为 [num_node, num_node]。
seq_fts = tf.layers.conv1d(seq, out_sz, 1, use_bias=False)
也就是说,seq_fts 的大小为 [num_graph, num_node, out_sz]。
f_1 = tf.layers.conv1d(seq_fts, 1, 1)
f_2 = tf.layers.conv1d(seq_fts, 1, 1)
经过 tf.layers.conv1d(seq_fts, 1, 1) 之后的 f_1 和 f_2 维度均为 [num_graph, num_node, 1]。
将 f_2 转置之后与 f_1 叠加,通过广播得到的大小为 [num_graph, num_node, num_node] 的 logits,就是一个注意力矩阵:
coefs = tf.nn.softmax(tf.nn.leaky_relu(logits) + bias_mat)
那么,bias_mat 是如何实现的呢?直接的想法就是只含有 0,1 的邻接矩阵与注意力矩阵相乘,从而对邻居进行 mask。但是,直接用 0,1mask 会有问题。
def adj_to_bias(adj, sizes, nhood=1):
...
...
return -1e9 * (1.0 - mt)
然后,将 bias_mat 和注意力矩阵相加,进而将非节点邻居进行 mask。
vals = tf.matmul(coefs, seq_fts)
Graph Attention Network 作为首次将图注意力机制引入到图神经网络中的工作,已经在很多领域得到了广泛应用。受益于注意力机制,GAT 能够过滤噪音邻居,提升模型表现并可以对结果实现一定的解释。
点击以下标题查看更多往期内容:
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。