Part 1 Node Embeddings
3 Neighborhood Reconstruction Methods
文章目录
- Part 1 Node Embeddings
这一部分主要是介绍学习节点嵌入(node embedding)的各种方法。这些方法的目标是将节点编码为低维向量,并且这些向量概括了节点在图中的位置和局部邻域结构。换句话说,我们希望将节点投影到一个潜在的空间中,这个潜在空间中的几何关系,对应于原始图中的关系。
在本章中,我们将概述简单图(simple graph)和加权图的节点嵌入方法。
3.1 An Encoder-Decoder Perspective
节点嵌入是基于图编解码器(encoder-decoder)框架的。
图编码器-解码器框架主要有2个关键操作:
1、encoder:将节点映射到低维向量空间中。
2、decoder:使用上一步操作生成的节点嵌入,重构节点的邻居信息。
3.1.1 The Encoder
编码器是一个将节点映射为向量的函数。
所谓浅嵌入方法(shallow embedding),就是指将节点ID作为输入来产生节点嵌入的方法,它只是一个基于节点ID的简单的嵌入查找。
E
N
C
(
v
)
=
Z
[
v
]
,
Z
∈
R
∣
V
∣
×
d
ENC(v)=\bold Z[v],\ \ \bold Z\in R^{|V|\times d}
ENC(v)=Z[v], Z∈R∣V∣×d
嵌入矩阵Z的每一行代表一个节点的嵌入表示:
z
u
∈
R
d
\bold z_u\in R^d
zu∈Rd。
这一章的所介绍的编码器就是使用了浅嵌入方法,当然,编码器也可以推广到其他方法。例如,编码器可以使用节点特征或每个节点邻域的局部图结构作为输入,来生成节点嵌入,它们通常被称为图神经网络(GNNs)的通用编码器架构。
3.1.2 The Decoder
解码器是用来从节点嵌入中重构图的统计信息的,它们往往可以预测节点在图中的邻居或者构造出邻接矩阵。
标准做法是定义成对解码器(pairwise decoder),它可以预测一对节点之间的相似性,并且在这个通用框架中扮演者相当重要的角色。
为了实现重构的目标,我们需要优化编解码器,并最小化重构损失(reconstruction loss),因此,损失函数也是我们需要考虑的一个问题。
D
E
C
(
E
N
C
(
u
)
,
E
N
C
(
v
)
)
=
D
E
C
(
z
u
,
z
v
)
≈
S
[
u
,
v
]
DEC(ENC(u),ENC(v))=DEC(\bold z_u,\bold z_v)\approx S[u,v]
DEC(ENC(u),ENC(v))=DEC(zu,zv)≈S[u,v]
其中
S
[
u
,
v
]
S[u,v]
S[u,v]代表了节点之间相似性度量(similarity measure),它是代表了节点相似度的真实值,是一个很重要的概念。简单一点,可以定义
S
[
u
,
v
]
=
A
[
u
,
v
]
S[u,v]=A[u,v]
S[u,v]=A[u,v];除此之外,也可以使用上一章介绍的邻域重叠统计量。
3.1.3 Optimizing an Encoder-Decoder Model
既然我们想要最小化重构损失,那我们就需要在训练节点集上定义损失和损失函数。
L
=
∑
(
u
,
v
)
∈
D
l
o
s
s
(
D
E
C
(
z
u
,
z
v
)
,
S
[
u
,
v
]
)
\mathcal L=\sum_{(u,v)\in D} loss(DEC(z_u,z_v),S[u,v])
L=(u,v)∈D∑loss(DEC(zu,zv),S[u,v])
损失函数loss,是对解码出的结果和真实值之间的差异进行对比。因此,总体目标是训练编码器和解码器,以便能够在训练集上有效地重构成对节点之间的关系/相似性。
3.1.4 Overview of the Encoder-Decoder Approach
使用编解码器框架的好处是,可以从以下几个方面,方便地对比各个模型:
(1)编码器函数(decoder function)
(2)基于图的相似性度量(similarity measure)
(3)损失函数(loss function)
3.2 Factorization-based approaches
从节点嵌入中解码局部邻域结构的挑战,与重构图的相似性矩阵密切相关。
因此,基于因子分解(矩阵分解)的方法主要思想是:通过矩阵分解,学习到节点相似度矩阵S的一个低维近似。
Laplacian eigenmaps
拉普拉斯特征映射(LE)方法是最早也最具有影响力的因子分解方法。实际上,它也是基于谱聚类思想来构建的。
解码器使用了L2距离(欧氏距离),平方和再开根。
D
E
C
(
z
u
,
z
v
)
=
∣
∣
z
u
−
z
v
∣
∣
2
2
DEC(z_u,z_v)=||z_u-z_v||_2^2
DEC(zu,zv)=∣∣zu−zv∣∣22
在损失函数中,将S矩阵看作是一个权重系数,用来惩罚那些在图中距离相近,但嵌入却不相似的节点对。
L
=
∑
(
u
,
v
)
∈
D
D
E
C
(
z
u
,
z
v
)
⋅
S
[
u
,
v
]
\mathcal L=\sum_{(u,v)\in D} DEC(z_u,z_v)\cdot S[u,v]
L=(u,v)∈D∑DEC(zu,zv)⋅S[u,v]
如果构造S矩阵,使其满足Laplacian矩阵的性质,那么,如果
z
u
z_u
zu是d维的,最优解就是图拉普拉斯矩阵最小的d个特征值所对应的特征向量(排除最小的那一个
v
⃗
1
\vec v_1
v
1),即
Z
=
[
⋮
⋮
⋮
v
2
⋯
v
d
+
1
⋮
⋮
⋮
]
,
Z
∈
R
∣
V
∣
×
d
Z= \begin{bmatrix} \vdots&\vdots &\vdots \\ v_2&\cdots &v_{d+1} \\ \vdots& \vdots&\vdots \end{bmatrix}\ \ ,Z\in R^{|V|\times d}
Z=⎣⎢⎢⎡⋮v2⋮⋮⋯⋮⋮vd+1⋮⎦⎥⎥⎤ ,Z∈R∣V∣×d
Inner-product methods
内积法,顾名思义,就是解码器使用的是节点嵌入的内积。
D
E
C
(
z
u
,
z
v
)
=
z
u
T
z
v
=
<
z
u
,
z
v
>
L
=
∑
(
u
,
v
)
∈
D
∣
∣
D
E
C
(
z
u
,
z
v
)
−
S
[
u
,
v
]
∣
∣
2
2
DEC(z_u,z_v)=z_u^Tz_v=<z_u,z_v> \\[2ex] \mathcal L=\sum_{(u,v)\in D} ||\ DEC(z_u,z_v)- S[u,v]\ ||_2^2
DEC(zu,zv)=zuTzv=<zu,zv>L=(u,v)∈D∑∣∣ DEC(zu,zv)−S[u,v] ∣∣22
我们假设节点相似度是正比于节点嵌入内积的,损失函数使用的是解码结果和节点相似度的L2距离。
GF、GraRep和HOPE模型使用了相同的内积解码器和损失函数。不同之处在于,如何去定义节点相似度
S
[
u
,
v
]
S[u,v]
S[u,v]。
(1)GF:
S
[
u
,
v
]
=
A
[
u
,
v
]
S[u,v]=A[u,v]
S[u,v]=A[u,v]
(2)GraRep:
S
[
u
,
v
]
=
A
k
[
u
,
v
]
S[u,v]=A^k[u,v]
S[u,v]=Ak[u,v]
(3)HOPE:支持将邻域重叠作为相似性度量。
这一类方法之所以成为因子分解方法,是因为它们的损失函数都可以使用因子分解(SVD等)算法进行最小化。
那么,绕来绕去,我们到底重构了哪一部分呢?没错,就是重构的邻接矩阵
A
~
=
Z
Z
T
\tilde A=ZZ^T
A~=ZZT。重构的目标也可以重写为矩阵的形式,是不是一下子就豁然开朗了呢!这和我们在许多论文当中看到的形式是一致的!
L
=
∣
∣
Z
Z
T
−
S
∣
∣
2
2
\mathcal L=||\ ZZ^T-S\ ||_2^2
L=∣∣ ZZT−S ∣∣22
直观地说,这些方法的目标是学习每个节点的嵌入,使得学习到的嵌入向量之间的内积可以模拟某种确定的节点相似性度量。
3.3 Random walk embeddings
这是一类非常经典的方法。
上一节讨论的内积方法都确定了节点相似性度量,它们通常定义为邻接矩阵的多项式函数。
随机游走(random walk)方法使用邻域重叠的随机度量来改进内积法。这类方法的关键创新在于优化节点嵌入——如果两个节点倾向于在图上的短随机游动(序列)中同时出现,那么这两个节点应该具有相似的嵌入。
DeepWalk and node2vec
依然是使用了浅嵌入方法和内积解码器。
这些方法的关键区别在于它们如何定义节点相似性和邻域重构的概念。和之前的方法不同,这2种方法是通过优化节点嵌入,来编码随机游动的统计特性的。
在我看来,这类方法最主要的特点就是,使用(从每个节点出发的)随机游走(序列)采样训练集D。
这里面,我们是假设提取的这些节点对
(
u
,
v
)
(u,v)
(u,v)是服从这个
p
G
,
T
(
v
∣
u
)
p_{G,T}(v|u)
pG,T(v∣u)分布的。其中
p
G
,
T
(
v
∣
u
)
p_{G,T}(v|u)
pG,T(v∣u)表示从节点u出发、长度为T的随机游走序列中,访问到节点v的概率。
反观基于因子分解的方法,实际上是简单粗暴的让
D
=
V
D=V
D=V了。
从这里,我们可以看出,随机游走方法的相似性度量是随机和不对称的。
D
E
C
(
z
u
,
z
v
)
=
e
z
u
T
z
v
∑
k
∈
V
e
z
u
T
z
k
≈
p
G
,
T
(
v
∣
u
)
,
(
u
,
v
)
∈
D
L
=
∑
(
u
,
v
)
∈
D
−
log
(
D
E
C
(
z
u
,
z
v
)
)
DEC(z_u,z_v)=\frac{e^{z_u^Tz_v}}{\sum_{k\in V} e^{z_u^Tz_k}}\approx p_{G,T}(v|u),\ \ (u,v)\in D \\[2ex] \mathcal L=\sum_{(u,v)\in D} -\log(DEC(z_u,z_v))
DEC(zu,zv)=∑k∈VezuTzkezuTzv≈pG,T(v∣u), (u,v)∈DL=(u,v)∈D∑−log(DEC(zu,zv))
其实就是为了转换为概率,将内积改进为了softmax,损失函数改进为了交叉熵损失。
然而,不幸的是,天真地计算上面式子的损失要付出昂贵的计算代价。
Deepwalk采用了一个分层的softmax来进行近似,并使用二叉树结构来加速计算。另一方面,node2vec采用了噪声对比的方法,其中标准化因子采用负样本来近似。
L
=
∑
(
u
,
v
)
∈
D
−
log
(
σ
(
z
u
T
z
v
)
)
−
γ
E
v
n
∼
p
n
(
V
)
[
log
(
−
σ
(
z
u
T
z
v
n
)
)
]
\mathcal L=\sum_{(u,v)\in D} -\log(\sigma(z_u^Tz_v))-\gamma \mathbb E_{v_n\sim p_n(V)}[\log(-\sigma(z_u^Tz_{v_n}))]
L=(u,v)∈D∑−log(σ(zuTzv))−γEvn∼pn(V)[log(−σ(zuTzvn))]
主要改进是后面可调整的那一项。负样本节点
v
n
v_n
vn是服从
p
n
(
V
)
p_n(V)
pn(V)分布的(
p
n
(
V
)
p_n(V)
pn(V)一般是均匀分布),
γ
\gamma
γ是超参数,是用来调整噪声权重的。
node2vec方法引入了超参数,允许随机行走的概率更接近于图上bfs或dfs的平滑插值。
Large-scale information network embeddings (LINE)
LINE方法没有明确地利用随机游走,但是它与deepwalk、node2vec共享概念动机。基本思想是结合两个编码器-解码器的目标。
第一个目标是对一阶邻接信息进行编码。
第二个目标是使用KL散度来编码两跳(二阶)邻接信息。因此,LINE在概念上与node2vec、DeepWalk相关。它使用概率解码器和概率损失函数(基于KL散度)。
和采样随机游走不同的是,它显示的重构了一阶和二阶邻居信息。
Additional variants of the random-walk idea
随机游走方法的一个优点是它可以通过偏置(bias)或修改随机游走,来进行扩展和修改。
3.3.1 Random walk methods and matrix factorization
随机游走方法和因子分解方法虽然是两类不同的方法,但却是密切相关的。
DeepWalk学习的嵌入实际上与第一部分讨论的谱聚类嵌入密切相关。关键的区别在于DeepWalk嵌入通过随机游走的序列长度T,控制了不同特征值的影响。
3.4 Limitations of Shallow Embeddings
在上面介绍的浅嵌入方法中,映射到嵌入的编码器模型只是一个嵌入查找(embedding lookup)。因此,这些方法也暴露出了很多缺陷:
(1)在编码器中,不共享节点之间的任何参数。这是因为编码器直接优化每个节点唯一的嵌入向量。这样会导致统计和计算方面都是低效的。
(2)在编码器中,没有利用到节点特征信息,导致不能挖掘出更多的潜在信息。
(3)最重要的一点是,浅嵌入方法具有内在传导性(inherently transductive)——只能对训练的时候就已经存在的节点进行编码,对于之后新生成的节点却毫无办法。这一点也限制了这些方法的归纳应用。
为了缓解这些限制,浅层编码器可以被更复杂的编码器取代,这些编码器通常依赖于图的结构和属性信息,就是后面要介绍的图神经网络(GNNs)。