基于合成的空间GCNs
1.MPNNs
MPNNs模型中,将图卷积的前向传播定义为两个阶段:
1)信息传递阶段
2)读出阶段
(1)信息传递阶段
当信息传递到第
t
t
t步时,就以节点自身
h
v
t
h_v^t
hvt、该节点定义好的邻域的隐藏状态
h
w
t
(
w
∈
N
(
v
)
)
h_w^t(w\in N(v))
hwt(w∈N(v))以及边的权重
e
v
w
e_{vw}
evw为输入,送入信息聚合函数
M
t
(
∗
)
M_t(*)
Mt(∗),:
m
v
t
+
1
=
∑
w
∈
N
(
v
)
M
t
(
h
v
t
,
h
w
t
,
e
v
w
)
(1)
m_v^{t+1}=\sum_{w\in N(v)}{M_t(h_v^t,h_w^t,e_{vw})}\tag1
mvt+1=w∈N(v)∑Mt(hvt,hwt,evw)(1)
这个函数得到的是邻域节点信息的聚合表示。
得到
m
v
t
+
1
m_v^{t+1}
mvt+1后,再次结合节点当前的隐藏状态
h
v
t
h_v^t
hvt,送入顶点更新函数
U
t
(
∗
)
U_t(*)
Ut(∗):
h
v
t
+
1
=
U
t
(
h
v
t
,
m
v
t
+
1
)
(2)
h_v^{t+1}=U_t(h_v^t,m_v^{t+1})\tag2
hvt+1=Ut(hvt,mvt+1)(2)
该函数将
h
v
t
,
m
v
t
+
1
h_v^t,m_v^{t+1}
hvt,mvt+1以函数
U
t
U_t
Ut的方式组合得到下一步
t
+
1
t+1
t+1的节点表示。
所以整个信息传递阶段的过程就是将节点邻域信息聚集,结合中心节点状态来更新中心节点,得到下一阶段的隐藏状态:
h
v
t
+
1
=
U
t
(
h
v
t
,
∑
w
∈
N
(
v
)
M
t
(
h
v
t
,
h
w
t
,
e
v
w
)
)
(3)
h_v^{t+1}=U_t(h_v^t,\sum_{w\in N(v)}{M_t(h_v^t,h_w^t,e_{vw})})\tag3
hvt+1=Ut(hvt,w∈N(v)∑Mt(hvt,hwt,evw))(3)
(2)读出阶段
该阶段主要是将第
t
t
t步节点的隐藏状态输入读出函数
R
(
∗
)
R(*)
R(∗),对整个图或者每个节点进行分类任务:
y
^
=
R
(
h
v
T
∣
v
∈
G
)
(4)
\hat y=R({h_v^T|v\in G})\tag4
y^=R(hvT∣v∈G)(4)
2.DCNNs
DCNNs可以按照MPNNs框架进行划分:
(1)信息传递阶段
在信息传递阶段,DCNNs将节点相同跳的邻域节点信息聚合,不同跳的聚合后信息拼接,得到每个节点的扩散卷积表示:
∑
w
∈
N
(
v
)
M
t
(
h
v
t
,
h
w
t
,
e
v
w
)
=
∑
l
=
1
N
t
(
P
t
∗
)
i
j
l
(
X
t
)
l
m
(5)
\sum_{w\in N(v)}{M_t(h_v^t,h_w^t,e_{vw})}=\sum_{l=1}^{N_t}{{(P^*_t)}_{ijl}{(X_t)}_{lm}}\tag5
w∈N(v)∑Mt(hvt,hwt,evw)=l=1∑Nt(Pt∗)ijl(Xt)lm(5)
式(5)可以理解为节点
i
i
i的邻域节点定义为图上所有的节点,
(
X
t
)
l
m
{(X_t)}_{lm}
(Xt)lm表示
h
v
t
,
h
w
t
h_v^t,h_w^t
hvt,hwt的信息;由于
P
t
∗
P^*_t
Pt∗是由图的邻接矩阵
A
A
A计算得来,表示了图的结构信息,所以可以认为
(
P
t
∗
)
i
j
l
{(P^*_t)}_{ijl}
(Pt∗)ijl表示
e
v
w
e_{vw}
evw,
∑
l
=
1
N
t
(
P
t
∗
)
i
j
l
(
X
t
)
l
m
\sum_{l=1}^{N_t}{{(P^*_t)}_{ijl}{(X_t)}_{lm}}
∑l=1Nt(Pt∗)ijl(Xt)lm是以概率方式对节点
i
i
i的
j
j
j跳节点的一个信息聚合。
式(5)的张量表示形式为:
M
t
=
P
t
∗
X
t
(6)
M_t=P^*_t{X_t}\tag6
Mt=Pt∗Xt(6)
其中,
M
t
∈
R
N
t
×
H
×
F
M_t\in R^{N_t\times H\times F}
Mt∈RNt×H×F表示每个节点的各个跳
[
0
,
H
−
1
]
[0,H-1]
[0,H−1]的聚合信息。在利用
P
t
∗
P^*_t
Pt∗进行信息聚合时,对每个节点每个跳每个特征都有不同的权值,所以在此处没有体现权值共享的优势。
顶点更新函数
U
(
∗
)
U(*)
U(∗)在DCNNs模型中未使用。
(2)读出阶段
在DCNNs中,实现了节点分类的读出以及图分类的读出:
节点分类:
在节点分类时,DCNNs对得到的聚合信息
P
t
∗
X
t
P^*_t{X_t}
Pt∗Xt用可学习的权值以及激活函数进行调整,之后再调整后的聚合信息展平,并将其送入全连接层和
s
o
f
t
m
a
x
softmax
softmax层:
P
(
Y
∣
X
)
=
s
o
f
t
m
a
x
(
f
(
W
d
f
l
a
t
t
e
n
(
f
(
W
c
⨀
M
t
)
)
)
)
(7)
P(Y|X)=softmax(f(W^dflatten(f(W^c\bigodot M_t))))\tag7
P(Y∣X)=softmax(f(Wdflatten(f(Wc⨀Mt))))(7)
其中,
⨀
\bigodot
⨀表示逐元素相乘,
W
c
∈
R
H
×
F
W^c \in R^{H\times F}
Wc∈RH×F,为训练权重;在计算
W
c
⨀
P
t
∗
X
t
W^c\bigodot P^*_tX_t
Wc⨀Pt∗Xt,存在广播机制,会将
W
c
W^c
Wc复制
N
t
N_t
Nt遍,然后逐元素相乘;
f
(
W
c
⨀
P
t
∗
X
t
)
∈
R
N
t
×
H
×
F
f(W^c\bigodot P^*_tX_t)\in R^{N_t\times H\times F}
f(Wc⨀Pt∗Xt)∈RNt×H×F。
f
l
a
t
t
e
n
(
∗
)
flatten(*)
flatten(∗)表示展平,将
f
(
W
c
⨀
M
t
)
f(W^c\bigodot M_t)
f(Wc⨀Mt)变成二维矩阵
R
N
t
×
(
H
F
)
R^{N_t\times (HF)}
RNt×(HF),
W
d
∈
R
(
H
F
)
×
C
W^d\in R^{(HF)\times C}
Wd∈R(HF)×C,
C
C
C表示分类种数。
对比式(4),式(7)可以理解为读出函数
R
(
∗
)
R(*)
R(∗),将每个节点的隐藏状态
M
t
M_t
Mt送入读出函数
R
(
∗
)
R(*)
R(∗),得到每个节点的分类结果。
图分类:
对于图分类而言,与节点分类不同之处在于读出函数多了一个加权的步骤,图分类的读出函数是将每个节点的聚合信息通过加权求和去取均值,之后用可学习的权值以及激活函数进行调整,再送入全连接层和
s
o
f
t
m
a
x
softmax
softmax层:
P
(
Y
∣
X
)
=
s
o
f
t
m
a
x
(
f
(
W
d
f
l
a
t
t
e
n
(
f
(
W
c
⨀
(
1
N
t
)
T
M
t
N
t
)
)
)
)
(8)
P(Y|X)=softmax(f(W^dflatten(f(W^c\bigodot \frac{(1_{N_t})^TM_t}{N_t}))))\tag8
P(Y∣X)=softmax(f(Wdflatten(f(Wc⨀Nt(1Nt)TMt))))(8)
其中 M t M_t Mt的意义不变, 1 N t ∈ R N t × 1 1_{N_t}\in R^{N_t\times 1} 1Nt∈RNt×1表示将各个节点信息 ∈ R H × F \in R^{H\times F} ∈RH×F聚合的权重;除以 N t N_t Nt得到平均值。 W c W^c Wc训练得到的加权权值。
3.PATCHY-SANs
PATCHY-SANs模型也可以概括为信息传递阶段和读出阶段,它和DCNNs模型的不同之处为在于邻域节点的选择和聚合信息的方法。
(1)信息传递阶段
确定节点邻域:
1)根据选定的图标注函数
l
l
l对图中的节点进行排序,得到有序节点集合
V
_
s
o
r
t
V\_sort
V_sort。
2)根据
V
_
s
o
r
t
V\_sort
V_sort,以
s
s
s为步长等间隔取出
w
w
w个节点,当节点数量
∣
V
_
s
o
r
t
∣
|V\_sort|
∣V_sort∣不足以取出
w
w
w个节点时,则创建感受野值为
0
0
0作为填充。得到
w
w
w个节点的序列。
3)对于选出的节点序列中的每一个节点
v
v
v,取它的
1
1
1邻域,如果自身和
1
−
1-
1−邻域的节点数目
∣
N
∣
≥
k
|N|\geq k
∣N∣≥k,则得到
v
v
v的感受野的候选,否则继续取它的
2
−
2-
2−领域等等,直到满足
∣
N
∣
≥
k
|N|\geq k
∣N∣≥k。对所有选定节点进行上述操作。
构建子图
可以认为节点
v
v
v和它的邻域候选节点构成原图
G
G
G的子图
U
U
U,如果邻域候选节点的数目
∣
U
∣
>
k
|U|>k
∣U∣>k,则利用再次图标注函数
l
l
l对子图进行节点排序,在图归一化这个步骤中节点排序都必须满足约束:对于
∀
u
,
w
∈
U
\forall u,w \in U
∀u,w∈U, 当
d
(
u
,
v
)
<
d
(
w
,
v
)
d(u,v) < d(w,v)
d(u,v)<d(w,v)时,满足
r
(
u
)
<
r
(
w
)
r(u) < r(w)
r(u)<r(w),然后取前
k
k
k个节点作为
v
v
v真正的的邻域,并得到新的新的子图
U
′
U^{'}
U′,并对新的子图进行节点排序用来形成邻接矩阵
A
l
(
U
′
)
A^{l}(U^{'})
Al(U′);如果邻域候选节点的数目
∣
U
∣
<
k
|U|<k
∣U∣<k,则添加未连接的假节点使得
∣
U
∣
=
k
|U|=k
∣U∣=k,并对新的子图
U
′
U^{'}
U′进行节点排序用来形成邻接矩阵
A
l
(
U
′
)
A^{l}(U^{'})
Al(U′)。
邻域信息聚合
设
a
n
a_n
an为顶点特征维度,
a
m
a_m
am为边特征维度。对于每个输入图G,在确定节点邻域和构建子图后,得到一个
(
w
,
k
,
a
n
)
(w,k,a_n)
(w,k,an)顶点特征的张量和
(
w
;
k
;
k
;
a
m
)
(w;k;k;a_m)
(w;k;k;am)边特征的张量。如下图所示(
k
=
4
k=4
k=4):
这些可以被重塑为一个
(
w
∗
k
;
a
n
)
(w*k;a_n)
(w∗k;an)和
(
w
∗
k
∗
k
;
a
m
)
(w*k*k;a_m)
(w∗k∗k;am)的张量。注意,
a
n
,
a
m
a_n,a_m
an,am是输入通道的数量。现在可以用一维的卷积层,对子图的节点特征和结构特征进行卷积。对子图节点的卷积核为
R
k
×
a
n
×
F
n
R^{k\times a_n\times F_n}
Rk×an×Fn,步长为
k
k
k;对子图边的卷积核为
R
k
2
×
a
m
×
F
m
R^{k^2\times a_m\times F_m }
Rk2×am×Fm,步长为
k
2
k^2
k2。如下图所示节点信息的1维卷积(
k
=
4
k=4
k=4):
对边的1维卷积也类似,卷积后得到节点的聚合信息(
∈
R
w
×
F
n
\in R^{w\times F_n}
∈Rw×Fn)和边的聚合信息(
∈
R
w
×
F
m
\in R^{w\times F_m}
∈Rw×Fm),之后直接将这两个矩阵拼接得到最后的聚合信息(
∈
R
w
×
(
F
n
+
F
m
)
\in R^{w\times (F_n+F_m)}
∈Rw×(Fn+Fm))。到此将图结构数据转化为欧式结构的数据。之后的卷积只需要利用传统的1维卷积即可。
(2)读出阶段
在前面的信息传递阶段,已经将图结构数据转化为欧式结构的数据,所以读出阶段的做法也和传统的欧式数据一样,利用全连接和
s
o
f
y
m
a
x
sofymax
sofymax得到每个节点或者整个图的分类概率。
相比于DCNNs模型,在聚合信息时,PATCHY-SANs将不同跳的邻域节点利用卷积的方式直接得到隐藏状态(
∈
R
w
×
F
n
\in R^{w\times F_n}
∈Rw×Fn),而不是像DCNNs那样,将相同跳的节点聚合不同跳的节点拼接得到隐藏状态。相比于DCNNs模型,在PATCHY-SANs中,对每个子图而言,卷积核是权值共享的。
4.GraphSage
与PATCHY-SANs模型相比较,GraphSage将获得子图的过程简化了,没有使用卷积的方式,而是定义了出了具体聚合函数形式,对节点的邻域信息进行聚合。
(1)信息传递阶段
确定邻域节点构建子图
首先需要先给定一个部分节点集合
B
B
B,这个集合是需要之后输出嵌入向量。
N
k
(
v
)
N_k(v)
Nk(v)表示从节点
v
∈
B
k
v\in B^k
v∈Bk的
k
k
k-邻域进行均匀采样得到节点数量固定为
s
s
s的节点集合(
k
∈
[
1
,
K
]
k\in [1,K]
k∈[1,K]),如果
k
k
k-邻域节点数量大于
s
s
s,则无放回抽样;如果小于
s
s
s,则有放回抽样。这个部分确定了在整个前向传播过程中需要使用到的节点,可以理解为以
B
B
B中每个节点为中心构建相应的树状子图的过程,把其他不相关的节点除去。
邻域信息聚合
1)均值聚合函数
信息聚合函数
M
(
∗
)
M(*)
M(∗):
M
k
=
m
e
a
n
(
h
v
k
−
1
,
{
h
u
k
−
1
,
∀
u
∈
N
(
v
)
}
)
(9)
M_k=mean(h_v^{k-1},\{h_u^{k-1},\forall u\in N(v)\})\tag{9}
Mk=mean(hvk−1,{huk−1,∀u∈N(v)})(9)
顶点更新函数
R
(
∗
)
R(*)
R(∗):
h
v
k
=
σ
(
W
k
⋅
M
k
)
(10)
h_v^k=\sigma(W^k\cdot M_k)\tag{10}
hvk=σ(Wk⋅Mk)(10)
这种k层的均值聚合网络与
k
k
k层的1stChebNet网络近似。训练的参数为
W
k
W^k
Wk。
2)池化聚合函数
信息聚合函数
M
(
∗
)
M(*)
M(∗):
h
N
(
v
)
k
=
m
a
x
(
{
σ
(
W
p
o
o
l
k
h
u
i
k
+
b
)
,
∀
u
i
∈
N
(
v
)
}
)
(11)
h_{N(v)}^k=max(\{\sigma(W^k_{pool}h^k_{u_i}+b),\forall u_i\in N(v)\})\tag{11}
hN(v)k=max({σ(Wpoolkhuik+b),∀ui∈N(v)})(11)
其中,
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(∗)表示逐元素取最大值,即取每个特征的最大值以捕获邻居集合上在每个维度的最突出表现(均值池化和最大池化结果没有明显区别)
顶点更新函数
R
(
∗
)
R(*)
R(∗):
h
v
k
=
σ
(
W
k
⋅
c
o
n
c
a
t
(
h
N
(
v
)
k
,
h
v
k
−
1
)
)
(12)
h_v^k=\sigma(W^k\cdot concat(h_{N(v)}^k,h_{v}^{k-1}))\tag{12}
hvk=σ(Wk⋅concat(hN(v)k,hvk−1))(12)
训练的参数为 W p o o l k , W k W^k_{pool},W^k Wpoolk,Wk。
(2)读出阶段
利用全连接层和 s o f y m a x sofymax sofymax得到每个节点分类概率。
(3)整个过程的伪代码如下图所示:
5.LGCN
LGCN模型使用了与GraphSage相同的随机方法获取子图(节点的邻域信息),然后对PATCHY-SANs模型的卷积部分进行了优化。
(1)信息传递阶段
确定邻域节点构建子图
1)首先从所有节点
N
N
N中,随机采样
N
i
n
i
t
N_{init}
Ninit个节点,表示为
i
n
i
t
N
o
d
e
s
initNodes
initNodes,并加入采样节点集合
S
S
S;(代码第2-3行)
2)初始化
n
e
w
A
d
d
N
o
d
e
s
newAddNodes
newAddNodes,令
n
e
w
A
d
d
N
o
d
e
s
newAddNodes
newAddNodes等于
i
n
i
t
N
o
d
e
s
initNodes
initNodes(代码第四行)
3)从
n
e
w
A
d
d
N
o
d
e
s
newAddNodes
newAddNodes节点的1-邻域中再随机采样
N
m
N_m
Nm个节点,更新
n
e
w
A
d
d
N
o
d
e
s
newAddNodes
newAddNodes,并将新的
n
e
w
A
d
d
N
o
d
e
s
newAddNodes
newAddNodes加入采样节点集合
S
S
S;(代码6-10行)
3)循环过程(3)直到采样节点总数
S
S
S大于等于
N
s
N_s
Ns停止循环;每次迭代过程中的
N
m
N_m
Nm都为不同值。
4)
S
>
N
s
S>N_s
S>Ns时,需要把最后一次过程(3)得到的采样节点再次采样
N
r
N_r
Nr个节点,使得
S
=
N
s
S=N_s
S=Ns。(代码11-14行)
伪代码如下图所示:
邻域信息聚合
1)利用子图的
A
A
A矩阵,找到节点
i
i
i的所有1-邻域节点
{
i
1
,
.
.
.
,
i
n
}
\{i_1,...,i_n\}
{i1,...,in}。将这
n
n
n个节点拼接成矩阵
M
l
i
∈
R
n
×
C
M_l^i \in R^{n\times C}
Mli∈Rn×C;如果
n
<
k
n<k
n<k,可以构造节点的所有特征都为0的伪节点进行拼接。
2)对
M
l
i
M_l^i
Mli矩阵每一列的值进行由大到小的排序,并选出前
k
k
k个值,得到
M
^
l
i
∈
R
k
×
C
\hat M_l^i\in R^{k\times C}
M^li∈Rk×C矩阵,目的是选出邻域节点的各个特征中良好表现该特征的值,之后将节点
i
i
i拼接于
M
^
l
i
\hat M_l^i
M^li的第一行,得到最后的网格化数据
M
~
l
i
∈
R
k
+
1
×
C
\tilde M_l^i\in R^{k+1\times C}
M~li∈Rk+1×C,对所有节点上述操作后得到表示节点特征的张量
X
l
~
∈
R
N
×
(
k
+
1
)
×
C
\tilde{X_l}\in R^{N\times (k+1)\times C}
Xl~∈RN×(k+1)×C。
3)利用一维卷积核卷积实现信息聚合操作,得到最后的输出。
X
l
~
∈
R
N
×
(
k
+
1
)
×
C
\tilde{X_l}\in R^{N\times (k+1)\times C}
Xl~∈RN×(k+1)×C中,
N
N
N可以视为批大小
(
b
a
t
c
h
s
i
z
e
)
(batch\ size)
(batch size),
(
k
+
1
)
(k+1)
(k+1)可以视为一维图像(样本)的大小,
C
C
C可以认为每个像素的通道数。所以与传统卷积类比,卷积核的大小,与批大小无关,与输入样本的特征维度
C
C
C,输出样本维度
D
D
D,以及自定义的卷积核大小
m
m
m有关,卷积核
∈
R
m
×
C
×
D
\in R^{m\times C \times D}
∈Rm×C×D。可以使用多层1-D卷积神经网络,但是对每个节点而言,多层1-D卷积神经网络之后的输出,必须还是一维向量
∈
R
1
×
D
\in R^{1\times D}
∈R1×D,才可以再次输入k-最大节点选择部分。最简单的卷积为卷积核大小选择为
k
+
1
k+1
k+1,可以直接得到
X
l
+
1
∈
R
N
×
D
X_{l+1}\in R^{N\times D}
Xl+1∈RN×D。
邻域信息聚合过程如下图所示:
(2)读出阶段
利用全连接层和 s o f y m a x sofymax sofymax得到每个节点分类概率。