【图结构】之HAN:Heterogeneous Graph Attention Network

作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】


HANHAN源代码地址:https://github.com/Jhy1993/HAN
HANHAN论文地址:http://www.shichuan.org/doc/66.pdf

HAN\qquad HAN是在GATGAT的基础上实现的,它的模型分为两部分:(1)节点级的注意力;(2)语义级的注意力。整个模型大致流程如下:首先确定元路径,使用元路径将异构图转换为同构图,邻接矩阵中两节点间有关系则为11,没有关系则为00;然后,对每一条元路径调用一次GATGAT模型,生成与元路径个数相同的node  embeddingnode \; embedding,此过程成为节点级注意力机制(Nodelevel  AttentionNode-level \; Attention);最后,将生成的多个embeddingembedding进行一个单层神经网络训练,得到元路径的权重,此过程称为语义级注意力机制(Semanticlevel  AttentionSemantic-level \;Attention)。

注意:邻接矩阵中记录的不再是两节点间的连通数。因为GATGAT原本是用于同构图的,只在乎两节点间是否有关系,以此来确定邻居节点,与路径数无关。

一、节点级注意力

\qquad节点级注意力机制其实就是原封不动的GATGAT模型,只不过是对每个元路径都调用了一次GATGAT而已。从HANHANNodelevel  AttentionNode-level \; Attention部分我们可以看到,里面用的公式与GATGAT论文中的公式是一模一样的,只不过加上了确定元路径的角标。因为GATGAT的一个优点就是允许节点ii为其不同的邻居节点赋予不同的权重,HANHAN把这个优点提取出来而已。不熟悉GATGAT的同学可以阅读我的另一篇博文【图结构】之图注意力网络GAT详解。在这里不多做赘述。

二、语义级注意力

\qquad当求出每一个元路径的embeddingembedding后,接下来就要对每个embeddingembedding计算权重,也就是论文中所说的语义级注意力机制(Semanticlevel  AttentionSemantic-level \;Attention)。这部分的主要公式只有一个:
wΦi=1ViVqTtanh(WziΦ+b)w_{\Phi_i}=\frac{1}{|V|}\sum_{i \in V}q^T\cdot tanh(W\cdot z^\Phi_i +b)\qquad\qquad\qquad ★
\qquad这个公式由于下标符号的原因,写的有点乱。等号左边的ii和等号右边的ii含义是不同的。wΦiw_{\Phi_i}表示元路径Φi\Phi_i的权重,这里的ii表示元路径集合中第ii个元路径;而等号右边的ii代表每个节点(node),其中VV表示节点的集合(论文中这个符号的解释在PRELIMINARY Definition 3.1.中)。我们分三部分解释这个公式:

\qquad(1)tanh(WziΦ+b)tanh(W\cdot z^\Phi_i +b):这是一个单层神经网络,输入层为ziΦz^\Phi_i,表示在元路径Φ\Phi下得到的节点iiembeddingembeddingziΦz^\Phi_i是一个向量,大小为F×1F' \times1FF'为输出embeddngembeddng的维度。WW是一个待训练的权重矩阵,即全链接神经网络中边的权重,大小为P×FP\times F',其中PP表示为元路径的数量。bb是偏差向量。得到的结果是一个向量,假定它为QQ,则QQ的大小为P×1P\times 1

\qquad(2)qTQq^T\cdot QqTq^T是一个向量,大小为1×P1\times P,可以理解为又进行了一个单层的神经网络。

\qquad以上公式中的WWqTq^T是被共享与所有的元路径和特定于语义的嵌入,目的是为了进行有意义的比较。也就是说,所有的nodeembeddingnode embedding都使用同一个神经网络以及里面的参数。

很多人到此仍然不明白这个公式为什么要这样写,不明白为公式(1)部分和公式(2)部分的作用。我对他的理解是:强行往语义路径上凑!。我们可以看到其实WWqTq^T的维度大小其实对最后结果的维度大小是一样的,因为最后公式(2)完成后会得到一个数。最后的这个“数”的大小是固定的,WWqTq^T起到的是中间过渡转换的作用,事实上,只要WW的行数与qTq^T的列数相同就可以了。

\qquad综上所述,正是由于共用同一套权重矩阵,才能够将不同的元路径联系起来。

\qquad(3)1ViVqTQ\frac{1}{|V|}\sum_{i \in V}q^T\cdot Q:每个元路径的每个节点的embedding都会计算出一个数值,将这些数值求和并求平均,即可得到该元路径的权重。

【图结构】之HAN:Heterogeneous Graph Attention Network

\qquad在获得每个元路径的重要性之后,我们通过softmax函数对其进行归一化。通过使用softmax函数归一化所有元路径的重要性,可以得到元路径的权重。

βΦi=exp(wΦi)i=1Pexp(wΦi)\beta_{\Phi_i}=\frac{exp(w_{\Phi_i})}{\sum_{i=1}^{P}exp(w_{\Phi_i})}

\qquad使用学习的权重作为系数,我们可以将这些特定于语义的嵌入融合在一起,以获得最终的嵌入ZZ
Z=i=1PβΦiZΦiZ = \sum_{i=1}^{P}\beta_{\Phi_i}\cdot Z_{\Phi_i}

\qquad通过半监督学习,对模型中的所有权重进行训练,最终得到一个提取好的node  embeddingnode \; embedding