1.LGCL算法框架
使得卷积神经神经网络无法直接应用于图数据的原因主要有两个:
(1)图数据没有固定数量的领域节点;
(2)图数据的节点没有显式或者隐式的顺序;
在LGCL算法中,作者通过k-最大节点选择部分确定图数据的邻域节点以及领域节点的顺序;通过1-D卷积神经网络将节点的邻域信息进行卷积形式的信息聚合得到输出。下图为LGCL的算法流程图。
2.k-最大节点选择
k-最大节点选择的主要目的就是将图结构数据转化为欧式结构的网格状数据。函数公式表示为:
X
l
~
=
g
(
X
l
,
A
,
k
)
(1)
\tilde{X_l}=g(X_l,A,k)\tag1
Xl~=g(Xl,A,k)(1)
其中,
X
l
∈
R
N
×
C
X_l\in R^{N\times C}
Xl∈RN×C表示图结构数据的特征矩阵,
C
C
C表示节点的特征维度,
A
A
A表示邻接矩阵,
k
k
k为超参数,表示选择最大节点的个数,一般等于所有节点的度的平均值。
具体实现步骤(以节点
i
i
i为例):
(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
对所有节点上述操作后就相当于实现了函数
g
(
∗
)
g(*)
g(∗),将矩阵
X
l
X_l
Xl转化为张量
X
l
~
∈
R
N
×
(
k
+
1
)
×
C
\tilde{X_l}\in R^{N\times (k+1)\times C}
Xl~∈RN×(k+1)×C。
3.1-D卷积神经网络
1-D卷积神经网络的主要目的将整理好的每个节点邻域信息利用一维卷积核卷积实现信息聚合操作,得到最后的输出。函数公式表示为:
X
l
+
1
=
c
(
X
l
~
)
(2)
X_{l+1}=c(\tilde{X_l})\tag2
Xl+1=c(Xl~)(2)
其中,
X
l
+
1
X_{l+1}
Xl+1表示卷积后的输出。
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。
3. 可学习图卷积网络
作者使用下图所示的网络结构实现了最好的分类性能:
以下图为例:
(1)第一层为图嵌入层:将输入节点的多通道特征进行降维,减少节点的通道数;图嵌入层相当于一层全连接层;
X
1
=
X
0
W
0
(3)
X_1=X_0W_0\tag3
X1=X0W0(3)
其中,
X
0
∈
R
N
×
C
0
X_0\in R^{N\times C_0}
X0∈RN×C0,
X
1
∈
R
N
×
D
0
X_1\in R^{N\times D_0}
X1∈RN×D0,
W
0
∈
R
C
0
×
D
0
W_0\in R^{C_0\times D_0}
W0∈RC0×D0,
C
0
>
D
0
C_0>D_0
C0>D0。图中
C
=
2
C=2
C=2,
D
0
=
1
D_0=1
D0=1。
(2)第二层为LGCL层,输入节点维度为
C
1
=
D
0
C_1=D_0
C1=D0,输出维度为
D
1
=
1
D_1=1
D1=1;
(3)第三层为LGCL层,输入为第二层LGCL的输出与输入的拼接,输入维度为
C
2
=
2
C_2=2
C2=2,输出维度
D
2
=
1
D_2=1
D2=1;
(4)第四层为全连接层,输入为第三层LGCL的输出与输入的拼接,输入维度
C
3
=
3
C_3=3
C3=3,输出为节点的分类概率。
4.利用子图训练大型图数据
主要的思想是:将一个大型的图通过采样的方式确定初始的中心节点以及中心节点的邻域节点,由这些节点可以组成原图数据的子图(单个样本),通过多次采样得到多个样本实现小批量训练。
下图是得到子图的伪代码:
(1)首先从所有节点
N
N
N中,随机采样
N
i
n
i
t
N_{init}
Ninit个节点,表示为
i
n
i
t
N
o
d
e
s
initNodes
initNodes;(代码第2行)
(2)从
i
n
i
t
N
o
d
e
s
initNodes
initNodes节点的1-邻域中再随机采样
N
m
N_m
Nm个节点,表示为
n
e
w
A
d
d
N
o
d
e
s
newAddNodes
newAddNodes;(代码6-10行)
(3)循环过程(2)直到采样节点总数
S
S
S大于等于
N
s
N_s
Ns停止循环;每次迭代过程中的
N
m
N_m
Nm都为不同值。
(4)
S
>
N
s
S>N_s
S>Ns时,需要把最后一次过程(2)得到的采样节点再次采样
N
r
N_r
Nr个节点,使得
S
=
N
s
S=N_s
S=Ns。(代码11-14行)
下图可以更加直观的了解子图的采样原理: