目录
- 前言
- 正文
- 图注意力机制层(Graph Attentional Layer)
- 层的输入
- 注意力系数
- 归一化注意力系数
- 通过邻居节点更新自身节点
- 层的输出
- GAT相比于先前研究的优势
- 附作者简介
前言
之前在推荐排序上开发的一个算法,取得了不错的效果。其中就用到了图神经网络模块,该模块的一部分思想源于GraphSage和GAT,因此对GAT的算法及代码理解还是比较深的,上一篇博文介绍了GraphSage:《GraphSage -《Inductive Representation Learning on Large Graphs》论文详解》,本文对GAT算法部分进行剖析。
GAT的核心思想就是 加权聚合周围邻居的信息。其原理与GraphSage的Mean aggregator基本一致,只是作者增加了一些Tricks。
虽然GAT在论文中讨论的是有监督学习,但依旧可以使用GraphSage中论文提到的方式进行无监督学习。因为两者的层输出都是节点的embedding。
正文
图注意力机制层(Graph Attentional Layer)
层的输入
层的输入是节点特征的集合:
其中, 是节点个数, 是每个节点输入的特征维度。
注意力系数
注意力系数是每两个直接邻居节点之间的权重,包括节点本身的注意力系数。(作者表示,使用直接邻居而不是整个图的两个节点之间求注意力系数,相当于注入了结构信息。)
其中,,为全连接层 的参数; 是对节点特征的一个线性变换的参数,目的是为了增强表达能力; 是concat操作;(1)式的结果生成的注意力系数 ,图示如下:
表示节点 的特征对节点
归一化注意力系数
为了使系数在不同节点之间易于比较,对注意力系数进行归一化。
其中, 是节点 的直接邻居节点集合。(2)式表示对节点
综合(1)式可得归一化注意力系数的表达式为:
通过邻居节点更新自身节点
这里使用过注意力机制,对邻居进行加权求和,然后聚合到自己身上,其原理与GraphSage基本一致,只是作者做了一些trick。
- 加权求和
从上式可以看到,Attention的K,Q,V均来自输入节点,因此GAT的Attention是Self-Attention。 - Multi-head Attention
使用 Multi-head 可以稳定 Self-Attention 的学习过程,然后将每个 head 的输出进行concat。
其中, 是concat操作, 由第 个注意机制计算的归一化注意力系数;由于是concat,因此 。
在Transformer的Multi-Head Attention中,对拼接起来的Attention结果,使用一个线性变换再变化原来的维度。
作者认为在在网络的最终(预测)层concat多头注意力结果不合理,因此作者对多头进行了平均:
生成注意力系数及Multi-head Attention的解释如下图: - 右图中不同颜色表示不同的head,一共有三个head。
层的输出
输出节点也是节点特征的集合:
GAT相比于先前研究的优势
- 计算高效
Self-Attention层的可以跨所有边并行化,输出特征的计算可以跨所有节点并行化。(个人认为这一点不算优势,GraphSage也可以做到) - 可解释
类似于机器翻译Attention的可解释。 - Inductive learning
可以泛化到未见过的节点和图。(个人认为这一点也不算优势,GraphSage也可以做到) - 解决GraphSage的缺点
- GraphSage不能在推理期间访问所有邻居。(其实使用Mean Aggregator的GraphSage可以对所有邻居进行采样。)
- LSTM Aggregator有排序问题。
- GAT可以重新表述为MoNet的特定实例(这个需要分析一下,待续…)