Node Embeddings
一、 Node Embeddings
1. Graph Representation Learning (GPL)
上章讲了如何使用手工设计的features结合传统机器学习方法,来做图机器学习。这一过程是这样的:
以往的多数工作都在第一阶段,即特征工程这一步。这一步是为了找出最好的描述这个图的features。由此引出了GPL的想法:能否让机器自己学习图的特征?这样,上述步骤变成了如下:
目标即学习一个map
函数,将每一个节点嵌入到低维空间,其向量相似度特征表示了图中节点的特征。
2.Node Embeddings: Encoder and Decoder
然后便是如何做
的问题。这里采用的是Encoder and Decoder 方法完成上述任务。回顾一下目标:节点对应的向量之间的相似度,应该尽可能表示了真实节点的相似度。
需要定义的两个部分分别是(1)ENC:将节点嵌入到向量空间(2)DEC:将向量对映射为相似度得分。这里采用的定义如下:
其中,ENC只是一个查找表。学习一个Z矩阵,其中每一列对应了一个节点的表示。DEC就是点积。
然后就该定义相似度函数了。这里采用random walks方法。注意这是一个无监督学习过程,不需要标签,也没有关于图中节点的attribute。
二、 Random Walk Approaches for Node Embeddings
1. 符号表示
其中,
z
u
\mathbf{z}_{u}
zu为节点
u
u
u的嵌入表示,
P
(
v
∣
z
u
)
P(v|\mathbf{z}_{u})
P(v∣zu)为以
u
u
u为起点,能游走到
v
v
v的可能性。也即相似度。
这里提到了
s
o
f
t
m
a
x
softmax
softmax函数。这是一个soft版的max函数。
2. Random Walk定义
给定一个起始点,随机从其一阶邻居中找一个作为下一个起始点,然后重复这个操作。序列长度就等于random walk的次数。
3. simliarity定义
u
u
u和
v
v
v的相似度,为上面已定义好的概率
P
(
v
∣
z
u
)
P(v|\mathbf{z}_{u})
P(v∣zu)
这样,就可以定义算法的过程:首先进行随机游走操作,得出许多sequence,然后据此计算出
P
(
v
∣
z
u
)
P(v|\mathbf{z}_{u})
P(v∣zu),然后就可以优化(优化目标是让向量之间的点积和上述概率大小相同)
4. Why random walks?
两个优点:
- 表现力好。能捕获一阶和多阶邻居
- 高效。因为不必对所有节点进行训练。
5. optimization
课程中反复出现idea
这个词。每个idea其实支撑一种算法的“philosophy”。这里无监督训练背后的“philosophy”便是:向量空间的相似度,表征着原数据的相似度。那么,在原图中,哪些邻居节点被定义为相似的
?这里被定义为random walk所能游走到的点:
定义的目标函数是:
目标函数使得模型能预测出random walk游走出的邻居节点。比如预测出
v
v
v的所有random walk邻居节点。
上式等价于:
上图的解释很漂亮。可以看出,只要
v
v
v出现在
N
R
(
u
)
N_{R}(u)
NR(u)中了,那么目标就是让
u
和
v
u和v
u和v的点积得分最大化。
但是,上述目标函数计算代价很昂贵:
O
(
N
2
)
O(N^{2})
O(N2)。原因在于分母上的归一化因子计算复杂度高。好在有负采样
方法来近似
这个分母:
右上角的小绿字,是解释为啥这个负采样方法是有效的。(这是个难题,也许现在不需要了解)。负采样
是NCE
的一种方法,用来近似softmax
函数的值。关键点应该是近似
。采用负采样方法后,就将目标函数中规模庞大的分母,替换为计算复杂度小的一项。即,对于节点
u
u
u,我们不把剩余所有节点当作负节点,而只是将一部分(比如
k
k
k个)当做负节点。这样就将分母的计算复杂度限制了。
这时,负样例的选择是很关键的。这里采用的是被选择的概率正比于节点的度。负样本采样多少也是一个问题。采样太多,就引入了更大的偏差(因为不是均匀采样,比如度高的点被采样概率高,这就引入了人为偏差)。通常人们选取
k
=
5
−
20
k=5-20
k=5−20。(很惊讶。即使对于100万节点的图,也可以用这么小的k来完成任务。这效率提高了太多了(课程中老师这么说的"much much much more)))。
然后就是老生常谈的随机梯度下降法SGD
做优化。
6. random walk总结
本节讲述了random walk算法。其分为三步:
- 进行random walk游走
- 对于每一个节点 u u u,将以 v v v为起始点游走到的节点序列都放在 N ( u ) N(u) N(u)中,表示 u u u的近邻节点。
- 优化目标函数(使用负采样方法)
7 其他random walk方法
前面只是用了最简单的random walk方法。即固定长度的游走序列。这种方法的相似度表示很受限。因此有了其他扩展方法,如node2vec:
核心idea是,可以权衡random walk的局部view 和全局view。分别对应着广搜和深搜。用两个参数p和q控制游走策略。p为返回本节点的概率,q控制BFS和DFS的相对概率。
被称为
B
i
a
s
e
d
2
n
d
−
o
r
d
e
r
r
a
n
d
o
m
w
a
l
k
s
Biased \quad2^{nd}-order \quad random \quad walks
Biased2nd−orderrandomwalks
如何选取自己需要的算法?依然是没有最好的一个算法。node2vec在分类任务做得好,但是其他算法在链路预测做的更好。因此选择适合自己问题特性的算法,才是最好的。
三、Embedding Entire Graphs
问题描述:将整个图嵌入到向量空间中。比如用于分子毒性预测
1. 求和方法
- 用random walk方法,然后求和(很简单的思想,但是很有效)
2. 引入virtual 节点:
3. anonymous walk embeddings
先游走,然后不直接使用游走序列,而是给每个节点分配一个唯一的编号。第一个出现
的节点编号为1,第二个为
2,以此类推。这样,不同的游走序列可能对应着同一个编码串。这样,每个节点都不知道游走到的是谁,因此称为“anonymous”。
很自然的问题,有多少种不同的长度为k的编码串?
然后采用如下方式表示整个图。
选择一个随机游走的长度
l
l
l,然后数一下图中出现的不同的长度为
l
l
l的匿名游走的个数,作为表示:
选择多少random walk,由以下定理给出:
4.anonymous walk embeddings的改进
上述是匿名化random walk,这里可以直接embed random walk:(node2vec一样,不同点就在于这里嵌入的是random walk
)
没怎么懂,但是主要思想和random walks是一样的:random walk算法中,邻居节点是节点
,而这里邻居节点是anonymous walk
。损失函数没看懂:
本节总结
讲了三种图嵌入的方式
学习到的embedding有什么用?
作用可太多了:
其中Hadamard对无向图很好,因为可交换
四、本章总结
本章讲了如何让机器自己学习图的表示。讲了Encoder-decoder framework,然后是节点相似性度量,然后讲了如何将这些节点的表示扩展到整个图上。