HAN!!!!

1. 基本概念

1.1 异构图

异构图是指不止有一种类型的节点或者边,因此允许不同类型的边或者节点拥有不同维度的特征或者属性。例如作者在论文中列举的IMDB数据(图1),节点的类型包含演员,电影和导演,假如两部电影均由同一个演员参演完成,则可以建立一条电影-演员-电影(MAM)的meta-path或者由同一个导演执导完成,则meta-path的类型为电影-导演-电影(MDM)。

HAN!!!!_第1张图片

source ~/.bashrc # 如果你使用 bash source ~/.zshrc # 如果你使用 zsh

图1:异构图中的多种节点类型以及多种metapath类型

论文中给出异构图的定义为 G=(V,E) 由节点的集合 V 和节点之间的边 E 组成。异构图也与节点类型的映射函数 ϕ:V→A 以及连接类型的映射函数 ψ:E→R 相关联。 A 和 R 是预先定义好的节点的类型和连接的类型,其中 |A|+|R|≥2 。

1.2 Meta-Path

Meta-Path Φ 的格式为 A1→R1A2→R2⋯→RlAl+1 (缩写为 A1A2⋯Al+1 ),它描述了节点 A1 和 Al+1 之间的一个组合关系 R=R1∘R2∘⋯∘Rl , ∘ 代表了节点之间的组合操作。例如在图1.c中,两个电影之间可以有MAM和MDM两种关联方式。

1.3 基于meta-path的邻居

给定异构图中的一个节点 i 和一个meta-path Φ ,基于meta-path的邻居 NiΦ 定义为通过类别为 Φ 与节点 i 相连的节点,这里节点的邻居包含它自己。例如图1.d中, m1 有三个基于MAM的metapath的邻居。

上面介绍了异构图中非常重要的三个概念,下面我们详细介绍论文中提出的HAN算法。

2. 算法详解

HAN是一个两层的attention架构,分别是节点级别的attention→语义级别的attention,图2便是这个算法的详细结构。首先固定metapath的类别 Φi ,通过节点级别的attention将中心节点的基于 Φi 的邻居节点进行聚合,得到每个metapath的特征向量 ZΦi ,然后再通过语义级别的attention将特征向量 ZΦ 进行聚合,得到最终的特征向量 Z 。最后通过一个MLP得到这个节点的预测值 y~i 。

HAN!!!!_第2张图片

图2:HAN中的总体框架。(a)是节点级别的attention,聚合后得到每个类型节点的嵌入向量;(b)是语义级别的attention,聚合后得到中心节点的嵌入向量;(c)通过MLP得到预测结果。

2.1 节点级别Attention

在具体的任务中,一个节点在同一个metapath的邻居上有不同的重要性,而同一个中心节点的邻居可能有多种类别,每个类别的节点 ϕi 都有不同维度的特征向量,因此我们的第一步便是通过转换矩阵 Mi 将它们映射到相同的维度。设转换之前的特征向量为 hi ,转换之后的特征向量为 hi′ ,它们之间的计算方式为:

(1)hi′=Mϕi⋅hi.

有了维度相同的特征向量,下一步便是计算每个节点的权值,HAN使用的是self-attention来学习这个权值。对于一个给定的节点对 (i,j) ,它们之间通过metapath Φ 连接,它们之间的节点注意力值 eijΦ 表示节点 j 对节点 i 的重要性,计算方式为:

(2)eijΦ=attnode(hi′,hj′;Φ)=σ(aΦT⋅[hi′||hj′]).

其中 attnode 表示节点级别的attention,对于同一个metapath Φ ,不同基于这个metapath的邻居节点的权值是共享的。 σ 是sigmoid激活函数, ‖ 是拼接操作, aΦ 是节点级别的attention向量。然后通过softmax操作得到每个特征向量的权值系数:

(3)αijΦ=softmax(eijΦ)=exp⁡(σ(aΦT⋅[hi′||hj′]))∑k∈NiΦexp⁡(σ(aΦT⋅[hi′||hk′]))

最后,节点 i 最终的embedding的计算方式为:

(4)ziΦ=σ(∑j∈NiΦαijΦ⋅hj′)

在很多场景中,节点的类别有可能会非常多,这无疑增加了self-attention学习的困难程度,为了解决这个问题,HAN中使用了multi-head attention机制,其中头的个数设置为了8。

(5)ziΦ=‖k=1Kσ(∑j∈NiΦαijΦ⋅hj′)

对于给定的metapath集合 {Φ1,Φ2,⋯,ΦP} ,经过这个节点级别的attention之后,得到 P 组语义相关的embedding,表示为 {Zϕ1,Zϕ2,⋯,ZϕP} 。HAN!!!!_第3张图片

2.2 语义级别Attention

异构图除了有多种类别的节点,还有多种类别的边,语义级别的attention便是将不同类型的连接的embedding组合起来,如图2.b所示。假设每个类别的权值为 β ,它的计算方式抽象为:

(6)(β1,β2,⋯,βP)=attsem(Zϕ1,Zϕ2,⋯,ZϕP)

这里 attsem 表示语义级别的attention操作,它的目的是学习每一个边类型的重要性,它首先通过计算语义级别的attention向量 q 和转换之后的每个边类别的embedding得到的,计算方式为:

(7)wΦ=1|V|∑i∈VqT⋅tanh⁡(W⋅ziΦ+b)

其中 q 是语义级别的attention向量, W 是权值矩阵, b 是偏置向量,他们都是需要学习的向量,并且对于所有的metapath都是共享的。通过将softmax作用到根据式(7)得到的 wΦ ,我们便可以得到每个metapath类别的attention权值:

(8)βΦ=exp⁡(wΦi)∑i=1Pexp⁡(wΦi)

最终,根节点的嵌入表示为:

(9)Z=∑i=1PβΦi⋅ZΦi

一个更形象的对这两个算法的图示如图3所示:

HAN!!!!_第4张图片

图3:节点级别的attention和语义级别的attention

2.3 损失函数

HAN是一个半监督模型,我们根据数据集中的有标签数据,使用BP对模型进行训练。使用交叉熵损失函数得到这个算法的损失函数:

(10)L=−∑l∈YLYlln⁡(C⋅Zl)

其中 C 是分类器的参数, YL 是有标签的节点, Yl 和Zl 是有标签数据的标签值和预测值。

3. 总结

这篇文章的算法将attention机制应用到异构图领域中,因为异构图存在节点的多样性和边的多样性,因此作者将attention机制分成了节点级别的attention和语义级别的attention,整体思路非常清晰。

按照作者的思路进一步深入,当学习一个节点的特征时,不同的特征应该扮演着不同的作用,也许给特征层再加一层attention,或者根据图的结构的不同(出入度,邻居类别数等等)赋予不同的权值,也许会有更好的效果。

你可能感兴趣的:(神经网络)