Heterogeneous Graph Neural Network是发表在KDD 2019的一篇文章,提出了HetGNN模型,采用LSTM进行节点级别的聚合,采用注意力机制进行语义级别的聚合。
Motivation
作者认为现在的网络几乎都没有同时考虑异构网络的结构信息以及每个节点的异构内容信息(大概就是属性的意思吧)。
当前先进的GNNs并没有对异构图解决以下几个问题:
- 很多异构图中节点也许并没有和其他所有类型的邻居节点,以及不同节点的邻居个数也许不同,这就有一个问题:C1:如何采样异构图中节点的邻居,使得被采样的邻居与节点的嵌入表示强相关。
- 不同类别的节点都有非结构化的内容信息,且这些信息可能都不在一个表示空间中,比如文本、图像。问题:C2:如何编码节点内容信息,以处理不同节点的内容异构性。
- 不同类型的邻居节点对于节点的嵌入表示贡献也不同。问题:C3:考虑到不同节点类型的影响,如何聚合异构邻居的特征信息。
Definition
G = ( V , E , O V , R E ) ; O V : t h e s e t o f o b j e c t t y p e s ; R E : t h e s e t o f l i n k s t y p e s ; \begin{aligned} &G=(V,E,O_V,R_E);\\ &O_V:the{\,}set {\,}of {\,}object {\,}types;\\ &R_E:the{\,}set{\,}of {\,}links{\,}types;\\ \end{aligned} G=(V,E,OV,RE);OV:thesetofobjecttypes;RE:thesetoflinkstypes;
Model
总体来看,作者引入带有重启策略的随机游走方法为每个节点采样固定长度的异构邻居,然后利用节点异构内容编码器编码节点的异构内容,从而得到节点的初始嵌入表示,用LSTM作为聚合器聚合meta-path内的节点级信息,用注意力机制进行语义级别的聚合。
下面作者根据提出的三个问题一一给出了解决方案,最终提出了HetGNN模型。
Sampling Heterogeneous Neighbors(C1)
作者设计了一个异构邻居采样策略(RWR):
- 1.从节点 v v v出发,开始随机行走,迭代地以一定的概率遍历当前节点的邻居节点,或者返回到开始节点。直到成功采样到固定长度的节点。同时要保证在RWR(v)中,不同类别的节点都要被采样到。
- 2.依据类别进行分组,对于每一个节点类型 t t t,从RWR(v)中选择每个类别中出现频率 t o p k t top{\,}k_t topkt的节点,定为当前节点的邻居节点。
这个策略的好处是:
- 每个节点都能收集到所有类别的邻居;
- 每个节点的邻域大小是固定的,并且最经常访问到的被成功采样;
- 同一个类别的被分在同一组,这样可以使用基于类别的聚合方式。
Encoding Heterogeneous Contents(C2)
对于节点
v
v
v,其属性集
C
v
C_v
Cv,对于
C
v
C_v
Cv中第
i
i
i个属性的表示,用
x
i
x_i
xi表示,
f
1
(
v
)
f_1(v)
f1(v)表示节点
v
v
v的内容编码。
f
1
(
v
)
=
∑
i
∈
C
v
[
LSTM
→
{
F
C
θ
x
(
x
i
)
}
⊕
LSTM
←
{
F
C
θ
x
(
x
i
)
}
]
∣
C
v
∣
f_{1}(v)=\frac{\sum_{i \in \mathcal{C}_{v}}\left[\overrightarrow{\operatorname{LSTM}}\left\{\mathcal{F} C_{\theta_{x}}\left(\mathbf{x}_{i}\right)\right\} \oplus \overleftarrow{\operatorname{LSTM}}\left\{\mathcal{F} C_{\theta_{x}}\left(\mathbf{x}_{i}\right)\right\}\right]}{\left|C_{v}\right|}
f1(v)=∣Cv∣∑i∈Cv[LSTM{FCθx(xi)}⊕LSTM{FCθx(xi)}]作者认为属性集的遍历顺序并不重要。
Aggregating Heterogeneous Neighbors(C3)
聚合过程包括两个连续的步骤:(1)相同类型邻居节点聚合;(2)不同类型邻居节点聚合。
-
相同类型节点聚合
f 2 t ( v ) = A G v ′ ∈ N t ( v ) t { f 1 ( v ′ ) } f_{2}^{t}(v)=\mathcal{A} G_{v^{\prime} \in N_{t}(v)}^{t}\left\{f_{1}\left(v^{\prime}\right)\right\} f2t(v)=AGv′∈Nt(v)t{f1(v′)}节点 v v v类别 t t t的邻域表示为 N t ( v ) N_t(v) Nt(v), A G t \mathcal{A} G^t AGt可以被理解成是泛化的关于类别 t t t的聚合器,而这里作者采用Bi-LSTM:
f 2 t ( v ) = ∑ v ′ ∈ N t ( v ) [ L S T M → { f 1 ( v ′ ) } ⊕ LSTM ← { f 1 ( v ′ ) } ] ∣ N t ( v ) ∣ f_{2}^{t}(v)=\frac{\sum_{v^{\prime} \in N_{t}(v)}\left[\overrightarrow{L S T M}\left\{f_{1}\left(v^{\prime}\right)\right\} \oplus \overleftarrow{\operatorname{LSTM}}\left\{f_{1}\left(v^{\prime}\right)\right\}\right]}{\left|N_{t}(v)\right|} f2t(v)=∣Nt(v)∣∑v′∈Nt(v)[LSTM{f1(v′)}⊕LSTM{f1(v′)}] -
不同类型邻居节点聚合
不同类别的邻居会对节点 v v v最终的表示起不同程度的作用,因而作者这里采用注意力机制。
E v = α v , v f 1 ( v ) + ∑ t ∈ O V α v , t f 2 t ( v ) \mathcal{E}_v=\alpha^{v,v}f_1(v)+\sum_{t∈O_V}\alpha^{v,t}f_2^t(v) Ev=αv,vf1(v)+t∈OV∑αv,tf2t(v)节点本身的内容编码 f 1 ( v ) f_1(v) f1(v)和type-based聚合嵌入 f 2 t ( v ) f_2^t(v) f2t(v)放入一个结合 F ( v ) \mathcal{F}(v) F(v),最终节点 v v v的表示可以写成:
E v = ∑ f i ∈ F ( v ) α v , i f i α v , i = exp { Leaky ReL U ( u T [ f i ⊕ f 1 ( v ) ] ) } ∑ f j ∈ F ( v ) exp { LeakyReLU ( u T [ f j ⊕ f 1 ( v ) ] ) } \begin{array}{c} \mathcal{E}_{v}=\sum_{f_{i} \in \mathcal{F}(v)} \alpha^{v, i} f_{i} \\ \alpha^{v, i}=\frac{\exp \left\{\text { Leaky } \operatorname{ReL} U\left(u^{T}\left[f_{i} \oplus f_{1}(v)\right]\right)\right\}}{\sum_{f_{j} \in \mathcal{F}(v)} \exp \left\{\text { LeakyReLU }\left(u^{T}\left[f_{j} \oplus f_{1}(v)\right]\right)\right\}} \end{array} Ev=∑fi∈F(v)αv,ifiαv,i=∑fj∈F(v)exp{ LeakyReLU (uT[fj⊕f1(v)])}exp{ Leaky ReLU(uT[fi⊕f1(v)])}