图神经网络的任务可以分为直推式(Transductive)学习与归纳(Inductive)学习:
Inductive learning,翻译成中文可以叫做 “归纳式学习”,就是从已有数据中归纳出模式来,应用于新的数据和任务。在图学习的训练过程中,看不到没有标注的节点,训练时只需要图的局部,不必一次性输入整张图,由于这个特性,归纳式学习是可以迁移的。即,在这个图上训练好的模型,可以迁移到另外一个图中使用。
Transductive learning,翻译成中文可以叫做 “直推式学习”,指的是由当前学习的知识直接推广到给定的数据上。就是训练期间可以看到没有标注的节点(训练需要整个图里面所有的节点参与),那么换一个图就需要重新训练。
之前对将卷积网络推广到图结构的研究主要包括谱方法(spectral approaches)和非谱方法(non-spectral approaches)。
谱方法(代表:GCN)学习到的滤波器依赖于拉普拉斯特征基,而拉普拉斯特征基依赖于图的结构。因此,在特定结构上训练的模型不能直接应用于具有不同结构的图。必须基于相应的图结构才能学到拉普拉斯矩阵,对于一个图结构训练好的模型,不能运用于另一个图结构,这就是GCN的一大弊端:无法完成inductive任务,即无法处理动态图。
非谱方法(代表:GraphSAGE)以归纳的方式计算节点表示,通过对每个节点的固定大小的邻域进行采样,然后对其执行特定的聚合器(例如对所有采样邻域的特征向量取平均值)。取得了很好的效果。
本文引入了一种基于注意力的架构来执行图结构数据的节点分类。其思想是通过对其邻居节点的自注意力策略计算图中每个节点的隐藏表示。它具有以下几个特性:
模块的输入:节点特征的集合 h h h:
h = { h 1 , h 2 , . . . , h N } h ⃗ i ∈ R F h={\{h_1,h_2,...,h_N\}}\ \ \vec h_i\in R^F h={h1,h2,...,hN} hi∈RF 其中,N是节点数量,F是每个节点的特征维度,模块的输出是更新后的节点特征集合 h ′ h^{'} h′,为了获得更新的特征矩阵,首先对每个节点应用一个权值共享的参数矩阵 W ∈ R F ′ × F W\in R^{F^{'}×F} W∈RF′×F,然后我们对每个节点对执行自注意力机制: a : R F ′ × R F = R a:R^{F^{'}}×R^F=R a:RF′×RF=R计算相应的注意力系数, e i j e_{ij} eij表示节点j对节点i的重要性:
e i j = a ( W h i , W h j ) e_{ij}=a(Wh_i,Wh_j) eij=a(Whi,Whj) 在GAT中,作者提出两种运算方式:Global graph attention和Mask graph attention,Global graph attention指的是就是每一个顶点i都对于图上所有顶点都进行attention运算。这种方法的弊端明显:(1)计算量大;(2)丢掉了图结构特征,无异于自废武功。Mask graph attention指的是注意力机制的运算只在邻居顶点上进行。很明显,这才是正确的打开方式,对于每一个节点i,我们对每一个节点 j ∈ N i j \in N_i j∈Ni计算他们的注意力系数, N i N_i Ni就是节点i的所有一阶邻居节点,然后应用一个softmax归一化:
a i j = s o f t m a x j ( e i j ) = e x p ( e i j ) ∑ k ∈ N i e x p ( e i k ) a_{ij}=softmax_j(e_{ij})=\frac {exp(e_{ij})}{\sum_{k\in N_i}exp(e_{ik})} aij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij) 文章所使用的注意力机制a是一个单层前馈网络,参数化为 a ⃗ ∈ R 2 F ′ \vec a\in R^{2F^{'}} a∈R2F′,应用LeakyReLU非线性激活函数,最终的展开式为:
a i j = e x p ( L e a k y R e L U ( a ⃗ T [ W h ⃗ i ∣ ∣ W h ⃗ j ] ) ) ∑ k ∈ N i e x p ( L e a k y R e L U ( a ⃗ T [ W h ⃗ i ∣ ∣ W h ⃗ k ] ) ) a_{ij}=\frac {exp(LeakyReLU({\vec a}^T[W\vec h_i||W\vec h_j]))}{\sum_{k\in N_i}exp(LeakyReLU({\vec a}^T[W\vec h_i||W\vec h_k]))} aij=∑k∈Niexp(LeakyReLU(aT[Whi∣∣Whk]))exp(LeakyReLU(aT[Whi∣∣Whj])) 其中 ∣ ∣ || ∣∣表示串联操作,可视化的样子:
但是这样显得有些单薄了,作者又发现使用多头注意力可以为模型带来进一步提升,于是就变成了这样的情况:
上图是节点1在其邻域上的多头注意(三头)的图示。不同的箭头样式和颜色表示独立的注意力计算。通过将每个头部的聚合特征进行连接或平均,对特征矩阵进行更新。于是,假如我们加入了k头注意力机制,公式就变成了:
h i ′ ⃗ = ∣ ∣ k = 1 K σ ( ∑ j ∈ N i α i j k W k h i ⃗ ) \vec{h_i^{'}}={||_{k=1}^K}\sigma(\sum_{j\in N_i}\alpha_{ij}^kW^k\vec{h_i}) hi′=∣∣k=1Kσ(j∈Ni∑αijkWkhi) 其中, ∣ ∣ || ∣∣表示拼接, α i j k \alpha_{ij}^k αijk表示第k个头的归一化注意力系数, W k W^k Wk是线性变换的参数矩阵,如果是拼接的设置,那我们最终会得到的每个节点的特征维度就不再是 F F F,而是 K F KF KF。对于最终预测层,concate操作可能不那么敏感了,所以我们直接用K平均来取代concate操作:
h i ′ ⃗ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h i ⃗ ) \vec{h_i^{'}}=\sigma(\frac 1K{\sum_{k=1}^K}\sum_{j\in N_i}\alpha_{ij}^kW^k\vec{h_i}) hi′=σ(K1k=1∑Kj∈Ni∑αijkWkhi) 到这里,模型的推导的就结束了。
文章在四个经典的数据集上进行试验,数据集信息:
1、半监督学习transductive learning,实验设置:
两层 GAT
在Cora 数据集上优化网络结构的超参数,应用到Citeseer 数据集
第一层 8 head, F’=8 , ELU 作为非线性函数
第二层为分类层,一个 attention head 特征数C,后跟 softmax 函数,为了应对小训练集,正则化(L2)
两层都采用 0.6 的dropout,相当于计算每个node位置的卷积时都是随机的选取了一部分近邻节点参与卷积
实验结果:
2、归纳学习inductive learning,实验设置:
三层GAT 模型
前两层 K=4, F1=256 ,ELU作为非线性函数
最后一层用来分类 K=6, F’=121,激活函数为sigmoid
该任务中训练集足够大不需要使用正则化和 dropout
论文地址:https://arxiv.org/abs/1710.10903
代码地址: https://github.com/Diego999/pyGAT
欢迎点赞 关注 留言私信交流 如有错误敬请指正!
本文的引用部分来自:图注意力网络(GAT)详解