0.GraphSAGE算法框架
GraphSAGE算法框架主要由两个部分组成:1.对节点的领域进行选择;2.利用聚合函数对节点的邻域信息进行聚合得到图嵌入向量;
论文中介绍了两种得到嵌入节点的方法:
第一种(算法1)是一次性所有节点得到所有节点的嵌入向量,可以用来得到节点的预测标签;
第二种(算法二)是
m
i
n
i
b
a
t
c
h
minibatch
minibatch的方法,也就是选择图中部分节点,输出这些节点的嵌入向量,同时避免了计算其他的节点,可以用来进行小批量训练。
这两种方法基本一样,只是初始的时候选择的是全部节点还是部分节点的区别,接下来主要对
m
i
n
i
b
a
t
c
h
minibatch
minibatch方法为例进行理解。
1.邻域采样
这个过程对应算法二的2~7行。首先需要先给定一个部分节点集合 B B B,这个集合是需要后输出嵌入向量的。 N k ( v ) N_k(v) Nk(v)表示从节点 v ∈ B k v\in B^k v∈Bk的1-邻域进行均匀采样得到节点数量固定为 s s s的节点集合。如果1-邻域节点数量大于 s s s,则无放回抽样;如果小于 s s s,则有放回抽样。这个部分确定了在整个前向传播过程中需要使用到的节点,可以理解为以 B B B中每个节点为中心构建相应的树状子图的过程,把其他不相关的节点除去。
2.将邻域信息聚合
这个过程对应算法的9~15行,其中
A
G
G
R
E
G
A
T
E
k
(
∗
)
AGGREGATE_k(*)
AGGREGATEk(∗)表示第
k
k
k层的聚合函数;
W
k
W^k
Wk表示第
k
k
k层的全连接参数。首先通过聚合函数将节点
u
u
u的邻域信息聚合得到
h
N
(
u
)
k
h_{N(u)}^k
hN(u)k,接着将
h
N
(
u
)
k
h_{N(u)}^k
hN(u)k和
h
u
k
−
1
h_{u}^{k-1}
huk−1进行拼接,之后将其送入全连接层并归一化得到
h
u
k
h_u^k
huk。最后得到
h
u
K
h_u^K
huK就是最后的嵌入向量了。只要改变最后一层的全连接层的维度,使得输出嵌入向量的维度和节点分类的类数相同,归一化后就实现了节点分类的效果。
论文中提出了3中形式的聚合函数:
①均值聚合函数
表达式为:
h
v
k
=
σ
(
W
k
⋅
m
e
a
n
(
h
v
k
−
1
,
{
h
u
k
−
1
,
∀
u
∈
N
(
v
)
}
)
)
h_v^k=\sigma(W^k\cdot mean(h_v^{k-1},\{h_u^{k-1},\forall u\in N(v)\}))
hvk=σ(Wk⋅mean(hvk−1,{huk−1,∀u∈N(v)}))
该表达式对算法的11~12行,这种聚合函数不需要进行 h N ( v ) k h_{N(v)}^k hN(v)k和 h v k − 1 h_{v}^{k-1} hvk−1的拼接拼接操作,并且这种k层的均值聚合网络与 k k k层的1stChebNet网络近似。训练的参数为 W k W^k Wk。
②池化聚合函数
表达式为:
h
N
(
v
)
k
=
m
a
x
(
{
σ
(
W
p
o
o
l
k
h
u
i
k
+
b
)
,
∀
u
i
∈
N
(
v
)
}
)
h_{N(v)}^k=max(\{\sigma(W^k_{pool}h^k_{u_i}+b),\forall u_i\in N(v)\})
hN(v)k=max({σ(Wpoolkhuik+b),∀ui∈N(v)})
其中,
W
p
o
o
l
k
h
u
i
k
+
b
W^k_{pool}h^k_{u_i}+b
Wpoolkhuik+b表示多层感知机,为了简单表示,只表现了单层的结构,其目的是为了计算出每个邻域节点的特征。
m
a
x
(
∗
)
max(*)
max(∗)表示逐元素取最大值,即取每个特征的最大值以捕获邻居集合上在每个维度的最突出表现(均值池化和最大池化结果没有明显区别)。之后还需要拼接并送入全连接层:
h
v
k
=
σ
(
W
k
⋅
c
o
n
c
a
t
(
h
N
(
v
)
k
,
h
v
k
−
1
)
)
h_v^k=\sigma(W^k\cdot concat(h_{N(v)}^k,h_{v}^{k-1}))
hvk=σ(Wk⋅concat(hN(v)k,hvk−1))
训练的参数为 W p o o l k , W k W^k_{pool},W^k Wpoolk,Wk。
③LSTM聚合函数
文中也测试了一个基于LSTM的复杂的聚合器[Long short-term memory]。和均值聚合器相比,LSTMs有更强的表达能力。但是,LSTMs不是symmetric的,也就是说不具有排列不变性(permutation invariant),因为它们以一个序列的方式处理输入。因此,需要先对邻居节点随机顺序,然后将邻居序列的embedding作为LSTM的输入。排列不变性(permutation invariance):指输入的顺序改变不会影响输出的值。
3.反向传播过程
在前面的过程(0,1,2)中,整里了算法GraphSAGE框架的前向传播的过程,论文中作者也对其反向传播的训练过程有简单的介绍。
论文中设计了一种无监督损失:
J
G
(
z
u
)
=
−
l
o
g
(
σ
(
z
u
T
z
v
)
)
−
Q
⋅
E
v
n
P
n
(
v
)
l
o
g
(
σ
(
−
z
u
T
z
v
n
)
)
J_G(z_u)=-log(\sigma (z_u^Tz_v))-Q\cdot E_{v_n~P_n(v)}log(\sigma (-z_u^Tz_{v_n}))
JG(zu)=−log(σ(zuTzv))−Q⋅Evn Pn(v)log(σ(−zuTzvn))
其中,v是u在固定长度的随机游走中同时出现的一个节点, σ \sigma σ是sigmoid函数, P n P_n Pn是负采样分布,Q定义了负样本的数目。该损失的意义是相邻的节点有相似的表达,但是不相干的节点表达差异性明显。
这种无监督损失的训练为下游机器学习任务提供服务,同时在特定任务下,这种损失函数可以被特定的任务目标所替换或者增强(例如交叉熵)。在实验结果中,监督学习的方式得到的结果性能要比无监督要好一些。