【异构图笔记,篇章3】GATNE论文阅读笔记与理解:General Attributed Multiplex HeTerogeneous Network Embedding
本文仅供学习,未经同意请勿转载。若使用本博文的PPT图像请注明来源,感谢配合。
本文笔记纯属个人理解,如果有错的地方,欢迎大家批评指正😂。相互学习于促进😀
近期更新会很慢,但希望每一次笔记公开的质量都不是水文,也望理解
上期回顾
在【图-注意力笔记,篇章2】中,我们了解了Graph Transformer的两种经典模型,要知道Graphomer在注意力机制中加入拓扑信息来提高Graph的学习。而且从不同的Graph Transformer的优化机制来看,其实Graph学习的重点之一就是怎么更好地融合节点特征、边特征,拓扑特征等。那有没有不同Graph Transformer的研究,但也是采用类似的方法来更好的优化Graph的表征呢?答案当然是肯定的。这也是我首先公开这篇笔记的原因。而且他与篇章1中的RGCN中有类似的结构,对RGCN不了解的可以看去看一下RGCN笔记【异构图笔记,篇章1】RGCN:Modeling Relational Data with Graph Convolutional Networks。
虽然它实际上也更加偏向RGAT,但是其注意力机制的采用还是跟RGAT略有不同。RGAT相对RGCN实际上就是加上注意力机制,有关RGAT的笔记会在【异构图笔记,篇章2】进行公开。相对RGAT,笔者认为GATNE论文阅读的重要性高于RGAT,所以这里先公开篇章3。
下面我们来看看GATNE主要是通过什么途径来更好的优化Graph的学习吧。
论文信息概览
-
paper name:《Representation Learning for Attributed Multiplex Heterogeneous Network》
-
作者原文讲解博客:https://www.aminer.cn/research_report/5cf49ed300eea1f1d521d71f?download=false
-
来源:KDD ,阿里达摩院,清华大学
-
年限:2019
-
笔记记录时间:2022年8月
-
博客公开笔记时间:2023年3月19日
论文要点快览
- 驱动数据任务:电商推荐系统场景
- 主要的问题:多属性异构图的embedding,链接预测任务
- 核心要点(主要贡献点):考虑不同关系对节点的影响,考虑了多样化的节点属性,考虑通用空间和特殊空间的属性(这个点后面会讲),提出了大规模多元异构属性的网络,而且支持transductive 和 inductive 的学习范式。
- 做法简述:分别从特殊和通用的角度看待Graph拓扑特征空间(也就是论文里的base Embedding和Edge Embedding), 在特殊空间(各种异构的Edge Embedding)中采用类RGCN的思想策略生成Edge Embedding, 同时融合不同类型节点属性的特征和通用空间下的边特征来获取各节点的embedding,然后通过Graph上给定的mate-path进行随机游走获取不同path,通最后过词袋模型(特征拼接,编码与解码),最大化path中各节点在给定context中出现的概率,以此优化更新节点最后的表征。
- 应用场景:比较合适大规模多中节点类型,多边类型的Graph场景
- 与RGCN的对比:在异构图的基础上,更多的融合了节点表征,边的表征,考虑了节点的多样性,考虑了边的特征,而且还考虑了总体视角(通用空间)的影响。
- 与Graphormers对比:同样通过边信息的融合来提升模型的效果,同样考虑了总体视角的影响。不同的是Graphormer仅考虑节点重要性,而GATNE考虑的是节点的类型。不同的是GATNE考虑了不同边类型的影响(这里实际上是没有特征),而Graphormer考虑的是边的特征编码。
- 局限性:不太适合小图,模型相对小图而言过于复杂。
论文内容介绍
背景
GATNE作者根据Graph的类型(比如同构/异构)和属性特征(边、节点)将目前的Graph研究划分为六类,如下表所示:
可以看出基于最复杂Graph(即为AMHEN:考虑属性,考虑异构边,考虑异构节点)的研究是最少的。哈哈,正所谓“世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉”。但实际上最复杂的Graph最符合现实世界中的Graph(世界之大无奇不有)。同时,GATNE作者也总结了目前基于AMHEN(属性多重异构网络)研究的挑战:
- 如何处理好异构边
也就是怎么样从不同的关系学到边的统一嵌入表示呢? - 如何解决冷启动问题
所谓冷启动问题就是指在数据匮乏的情况下,怎么利用好现有数据满足模型学习需求。也就是怎么更好的利用无标注数据等。
要知道大多数的Graph模型都是transductive learning(直推式学习),当来了一个新的数据,比如电商系统中新来了一个用户user或者商品item,怎么在模型训练完毕的时候利用或者Embedding它呢?是否需要重新训练呢?但是重新训练不符合实际。这就是Graph中Embedding的冷启动问题。 - 如何扩展到大规模网络
在现实世界中的Graph网络比如社交,电商,引用等都是大规模图,那怎么扩展到大规模图也是一个挑战。
Transductive/Inductive learning的区别
知识点补充
可能看到上面,有些学友们就不知道什么是transductive learning,什么是inductive learning了。这两个是机器学习的概念。这里占用一丢丢篇幅给上述的学友们补充一下啦。了解的学友可以直接跳到下面一步啦…
- 在机器学习中:
-
Transductive learning(直推式学习,有的也就叫转导学习)
- 测试集(除了标签)可能会出现在训练集中的学习叫做Transductive learning
- 训练的输入:
- 半监督学习:输入特征为训练集及测试集的特征,输入标签为训练集的标签
- 监督学习:输入特征为训练集特征,输入标签为训练集的标签
- 测试:
- 测试集添加新的数据之后需要重新训练(这里主要指半监督学习的情况)
-
Inductive learning(归纳式学习)
- 测试集完全不会出现在训练集中的学习叫做Inductive learning
- 训练的输入:
- 半监督学习:输入特征为训练集及未标记集合的特征,输入标签为训练集的标签
- 监督学习:输入特征为训练集特征,输入标签为训练集的标签
- 测试:
- 测试集添加新的数据之后不需要重新训练
-
- 在Graph learning中:(这里只讲节点层面任务,图层面任务跟机器学习是一样的)
- Transductive learning(直推式学习,有的也就叫转导学习)
无论是训练、测试还是验证集,全图都能够被观测到。分割的只是节点标签数据。 - Inductive learning(归纳式学习)
将整个图的链接断开,形成多个图,每个图是原来大图的子图。然后训练,测试验证集都是不同的子图。
- Transductive learning(直推式学习,有的也就叫转导学习)
总结: 简单来说,transductive和inductive的区别在于我们想要预测的样本,是不是我们在训练的时候已经见(用)过的。通常transductive比inductive的效果要好,因为至少见过,有个印象。
论文核心内容介绍
GATNE论文基于Transductive 和Inductive learning主要提出两个GATNE框架,一个是GATNE-T(玫红色),另外一个是GATNE-I(橙色)。
从上面的PPT可以很明显的看出来,GATNE-T框架中不考虑节点带属性的情况,GATNE-I框架中边的表征(Base Embedding和 Edeg Embedding)是由节点属性生成而来的。其实这两个框架的区别也比较容易理解:
首先,因为GATNE-T是基于直推式学习的,在训练的时候看到的是全图,而且这个全图应该是相对静止(这里指的是拓扑结构不变),因此,图的连接应该也是相对固定的。这里不考虑节点属性maybe是以为节点属性是变化的吧。比如,用户的喜好就是一个动态变化的属性。所以,对于GATNE-T来说,节点表征的更新来不同关系下节点信息的聚合(当然这里也包括base类型)。
其次,GATNE-I是基于归纳式学习的,期望当有新的节点进来时,我们的模型可以很好的预测,但是不要重新训练模型。因此,对于GATNE-I来说,Graph是一个相对动态的图。所以连接可能会因为新节点的加入而发生一定的变化。这也就不能基于原本的图来学习了,因此,这里Base embedding和Edge embedding都是基于节点属性来随机生成的,这也符合电商系统中线上模型的特点了。
接下来让笔者我稍微的介绍一下上面两个模型算法实现的一些细节吧。这里笔者我只介绍个人觉得比较重要的部分,更多细节建议看原文。如果你对这个模型感兴趣的话,原文的阅读才是学习的本源,这里的笔记与理解仅是快速了解模型的工具罢了。
GATNE-T
在GATNE-T模型中,将特征空间划分为两部分,一个是base空间,另外一个是除了base以外的异构特征空间。因此,节点聚合信息的来源有以上两个部分。也就是说节点
v
i
v_i
vi 在边类型
r
r
r上的embedding分成两部分:基类嵌入(Base embedding)和边嵌入(Edge embedding),如下面的PPT所示。
对于Base embedding:节点
v
i
v_i
vi 的基类嵌入Base embedding在不同类型边中共享。因此,Base embedding实际上就是一个通用类型,共享空间。
对于Edge embedding:虽然名字是Edge Embedding,但这里不是对边的Embedding哦,而是基于不同边类型下对节点特征的聚合,这里感觉从字面上有点点歧义吧。 因此,Edge Embedding实际上可以看出无向无自环的RGCN。所以,第k层节点
v
i
v_i
vi在边类型
r
r
r下的节点聚合表征为该类型下所有邻居节点的信息聚合:
u
i
,
r
(
k
)
=
a
g
g
r
e
g
a
t
o
r
(
u
j
,
r
(
k
−
1
)
,
∀
v
j
∈
N
i
,
r
)
u_{i , r }^{( k ) }= aggregator ( u_{j , r }^{( k-1 ) }, ∀ v_j ∈ N_{i , r })
ui,r(k)=aggregator(uj,r(k−1),∀vj∈Ni,r)
其中,
N
i
,
r
N_{i , r }
Ni,r表示在边类型
r
r
r下节点
v
i
v_i
vi的邻居节点,
u
i
,
r
(
0
)
u_{i , r }^{( 0 ) }
ui,r(0)是随机初始化的,
a
g
g
r
e
g
a
t
o
r
(
⋅
)
aggregator(\cdot)
aggregator(⋅)表示聚合函数,可以是mean,sum,max等。
基于上述的表征,在异构(非base)特征空间下,节点
v
i
v_i
vi在第K层的最终表征为各边类型的Embedding的融合(融合的方式有很多,GATNE作者采用的是拼接的做法),即第 K 层
v
i
v_i
vi的表示为:
U
i
=
(
u
i
,
1
,
u
i
,
2
,
⋯
,
u
i
,
m
)
U_i=(u_{i,1},u_{i,2},⋯,u_{i,m})
Ui=(ui,1,ui,2,⋯,ui,m)
由于不同类型边对节点的影响,重要程度实际上是不同的,所以GATNE作者也采用了注意力机制:
a
i
,
r
=
s
o
f
t
m
a
x
(
w
r
T
t
a
n
h
(
W
r
U
i
)
)
T
a_{i,r}=softmax(w_r^Ttanh(W_rU_i))^T
ai,r=softmax(wrTtanh(WrUi))T
通过self-attention可以使用节点关注到对其影响更加大的类型连接的节点特征。比如,在现实世界中,我们的亲属关系下的节点(亲人)对我们的影响比陌生关系(陌生人)对我们的影响大。
最后的表征:基于上述的描述,我们可以知道节点
v
i
v_i
vi在边类型
r
r
r下的最终表征会融合上base embedding
b
i
b_i
bi为
v
i
,
r
=
b
i
+
α
r
M
r
T
U
i
a
i
,
r
v_{i,r}=b_i+α_rM_r^TU_ia_{i,r}
vi,r=bi+αrMrTUiai,r
其中,
α
r
α_r
αr为超参用于控制 edge embedding 的重要程度,
M
r
M_r
Mr为可训练的转移矩阵。
因此,可以看到对于每一种关系 r r r都会考虑Base Embedding的影响,笔者认为这里其实有点点过于冗余,不必为每一种关系都添加共享信息,直接在最后做融合maybe也是直接有效,更好的选择?
同时,从上面的描述,我们也可以知道,GATNE-T 并没有考虑节点的属性特征,只是基于不同类型的边下进行节点信息的融合。而且,GATNE-T边的表征是随机生成的。因此,GATNE-T是依赖图结构相对固定训练的。当整个图,尤其是新的节点的加入时,GATNE-T无法为新的节点添加信息,而且图结构可能因为新节点的加入而发生连接变化,所以GATNE-T无法利用训练好的参数,必须重新训练。这也是直推式的特点。
GATNE-I
那线上模型怎么办??线上模型肯定不能因为一个新用户的加入,就重新训练模型吧。而且训练一个模型也是需要时间的…那怎么解决直推式的尴尬呢?因此,GATNE作者还提出了GATNE-I模型。
实际上,在 GATNE-T 中,Base Embedding 和 Edge Embedding 都是随机初始化的。但是在 GATNE-I 中,这两个 Embedding 都是基于节点的属性特征,这更加符合现实系统的规则。(如下面PPT中的橙色虚线从节点属性特征指向边的Embedding)。
基于此,我们就有Base Embedding 为:
b
i
=
h
z
(
x
i
)
b_i=h_z(x_i)
bi=hz(xi)
Edge Embedding为:
u
i
,
r
(
0
)
=
g
z
,
r
(
x
i
)
u_{i,r}^{(0)}=g_{z,r}(x_i)
ui,r(0)=gz,r(xi)
其中,
h
z
(
⋅
)
h_z(\cdot)
hz(⋅)和
g
z
,
r
(
⋅
)
g_{z,r}(\cdot)
gz,r(⋅)都是转换函数。
那么,最后,节点
v
i
v_i
vi的特征除了向GATNE-T那种融合边特征外还会融合节点的属性特征:
v
i
,
r
=
h
z
(
x
i
)
+
α
r
M
r
T
U
i
a
i
,
r
+
β
r
D
z
T
x
i
v_{i,r}=h_z(x_i)+α_rM_r^TU_ia_{i,r}+β_rD_z^Tx_i
vi,r=hz(xi)+αrMrTUiai,r+βrDzTxi
其中,
D
z
D_z
Dz跟
M
r
M_r
Mr一样是特征变换矩阵,只不过
D
z
D_z
Dz是针对属性的特征变换矩阵,
α
r
α_r
αr和
β
r
β_r
βr一样都为控制比例系数,用来控制Edge Embedding和节点属性特征融合的权重比例。
初始化导致学习范式的不同?
到此,可能有人会有疑问,为什么初始化方式不一样?是初始化不一样导致学习范式的不同吗?是的。下面先看看GATNE-T和GATNE-I的核心区别,也就是基类向量 b i b_i bi和初始边嵌入 u i , r ( 0 ) u^{(0)}_{i,r} ui,r(0) 的初始化/生成方式:
- GATNE-T: b i b_i bi和 u i , r ( 0 ) u^{(0)}_{i,r} ui,r(0) 是基于网络结构,为每个节点直接训练的。训练的是 b i b_i bi和 u i , r ( 0 ) u^{(0)}_{i,r} ui,r(0) ,而且由于依赖网络结构,所以网络结构在此处可视为相对静止。因此,GATNE-T无法处理训练中未出现过的节点。
- GATNE-I: b i b_i bi和 u i , r ( 0 ) u^{(0)}_{i,r} ui,r(0) 是基于转换函数 h z h_z hz和 g z , r g_{z,r} gz,r 对原始特征 x i x_i xi进行变换生成的。训练的是 h z h_z hz和 g z , r g_{z,r} gz,r,无需依赖网络结构,只需要知道节点的原始属性特征即可,所以网络结构在此处可视为相对动态。因此,GATNE-I可以处理训练中未出现的节点,只要这个节点有属性特征 。
实验结果分析
训练方式
GATNE作者在优化模型的时候采用的训练优化方式为基于 meta-path 的随机游走和 heterogeneous skip-gram(如下图的PPT蓝色框部分)。也就是,在获得各个节点的embedding之后,文章在图上按给定的meta-path进行随机游走获得不同的path,之后通过skip-gram,最大化path中各节点在给定context中出现的概率。(这里有点类型NLP做法,不是关注的重点,大概了解一下就可以)。
实验总结与评价
从上面的PPT实验结果来看,GATNE-T与GATNE-I各有优劣。但值得关注的点是:(1)Twitter数据集是带属性的,但GATNE-T 的表现更好。可见在属性特征的加成下,GATNE-I不一定优于GATNE-T。(2)在Alibaba-S数据集上,是GATNE-I胜于GATNE-T,与传统的方法对比,好像效果还可以。在实际的电商系统中,图模型更多的是研究,应用还是相对较少。单从论文的结果来看,这也许对图模型在真实场景的工程应用中带来点曙光吧。而且它的的确确链接预测任务超过state-of-the-art,也在阿里推荐系统中得到了落地。
下期预告
后继篇章的PPT先放在下面的笔记中,到时候再更新
关于四篇GNN论文的阅读笔记PPT:包括GATNE,AM-GCN,HGSL和coGSL