【图结构】之HAN:Heterogeneous Graph Attention Network
作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】
源代码地址:https://github.com/Jhy1993/HAN
论文地址:http://www.shichuan.org/doc/66.pdf
是在的基础上实现的,它的模型分为两部分:(1)节点级的注意力;(2)语义级的注意力。整个模型大致流程如下:首先确定元路径,使用元路径将异构图转换为同构图,邻接矩阵中两节点间有关系则为,没有关系则为;然后,对每一条元路径调用一次模型,生成与元路径个数相同的,此过程成为节点级注意力机制();最后,将生成的多个进行一个单层神经网络训练,得到元路径的权重,此过程称为语义级注意力机制()。
注意:邻接矩阵中记录的不再是两节点间的连通数。因为原本是用于同构图的,只在乎两节点间是否有关系,以此来确定邻居节点,与路径数无关。
一、节点级注意力
节点级注意力机制其实就是原封不动的模型,只不过是对每个元路径都调用了一次而已。从的部分我们可以看到,里面用的公式与论文中的公式是一模一样的,只不过加上了确定元路径的角标。因为的一个优点就是允许节点为其不同的邻居节点赋予不同的权重,把这个优点提取出来而已。不熟悉的同学可以阅读我的另一篇博文【图结构】之图注意力网络GAT详解。在这里不多做赘述。
二、语义级注意力
当求出每一个元路径的后,接下来就要对每个计算权重,也就是论文中所说的语义级注意力机制()。这部分的主要公式只有一个:
这个公式由于下标符号的原因,写的有点乱。等号左边的和等号右边的含义是不同的。表示元路径的权重,这里的表示元路径集合中第个元路径;而等号右边的代表每个节点(node),其中表示节点的集合(论文中这个符号的解释在PRELIMINARY Definition 3.1.中)。我们分三部分解释这个公式:
(1):这是一个单层神经网络,输入层为,表示在元路径下得到的节点的,是一个向量,大小为,为输出的维度。是一个待训练的权重矩阵,即全链接神经网络中边的权重,大小为,其中表示为元路径的数量。是偏差向量。得到的结果是一个向量,假定它为,则的大小为。
(2):是一个向量,大小为,可以理解为又进行了一个单层的神经网络。
以上公式中的和是被共享与所有的元路径和特定于语义的嵌入,目的是为了进行有意义的比较。也就是说,所有的都使用同一个神经网络以及里面的参数。
很多人到此仍然不明白这个公式为什么要这样写,不明白为公式(1)部分和公式(2)部分的作用。我对他的理解是:强行往语义路径上凑!。我们可以看到其实和的维度大小其实对最后结果的维度大小是一样的,因为最后公式(2)完成后会得到一个数。最后的这个“数”的大小是固定的,和起到的是中间过渡转换的作用,事实上,只要的行数与的列数相同就可以了。
综上所述,正是由于共用同一套权重矩阵,才能够将不同的元路径联系起来。
(3):每个元路径的每个节点的embedding都会计算出一个数值,将这些数值求和并求平均,即可得到该元路径的权重。
在获得每个元路径的重要性之后,我们通过softmax函数对其进行归一化。通过使用softmax函数归一化所有元路径的重要性,可以得到元路径的权重。
使用学习的权重作为系数,我们可以将这些特定于语义的嵌入融合在一起,以获得最终的嵌入。
通过半监督学习,对模型中的所有权重进行训练,最终得到一个提取好的。