原文链接:Semi-Supervised Classification with Graph Convolutional Network
代码实现:https://github.com/tkipf/pygcn
一、亮点
1.分层传播规则,模型
f
(
A
,
X
)
f(A, X)
f(A,X)直接编码结构信息,不需要显式的使用图正则。
2.节点的半监督分类实现
二、显式的图正则
基于图的半监督学习问题,需要通过显式的基于图的正则化项来将标签信息平滑到整个图上。在损失函数中使用Laplace正则化项
L
=
L
0
+
λ
L
r
e
g
,
其
中
,
L
r
e
g
=
∑
i
j
A
i
j
∣
∣
f
(
X
i
)
−
f
(
X
j
)
∣
∣
2
=
f
(
X
)
T
Δ
f
(
X
)
\mathcal{L}=\mathcal{L}_0+\lambda \mathcal{L}_{reg}, 其中,\mathcal{L}_{reg}=\sum_{ij}A_{ij}||f(X_i)-f(X_j)||^2=f(X)^T\Delta f(X)
L=L0+λLreg,其中,Lreg=ij∑Aij∣∣f(Xi)−f(Xj)∣∣2=f(X)TΔf(X)
上式中,
A
i
j
A_{ij}
Aij为邻接矩阵;
f
(
⋅
)
f(\cdot)
f(⋅)神经网络模型;X表示节点的特征矩阵;
f
(
X
i
)
f(X_i)
f(Xi)代表节点i的特征表示(包含结构和顶点特征信息);
A
i
j
∣
∣
f
(
X
i
)
−
f
(
X
j
)
∣
∣
2
A_{ij}||f(X_i)-f(X_j)||^2
Aij∣∣f(Xi)−f(Xj)∣∣2的意义是如果节点i和j之间边的权重很大,即
A
i
j
A_{ij}
Aij很大,那么节点i、j之间特征表示的距离越近。
三、分层传播规则
1.Fast Approximate Convolutions on Graphs
图卷积模型的分层向前传播规则如下
H
(
l
+
1
)
=
σ
(
D
~
−
1
2
A
~
D
~
−
1
2
H
(
l
)
W
(
l
)
)
H^{(l+1)} = \sigma(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}H^{(l)}W^{(l)})
H(l+1)=σ(D~−21A~D~−21H(l)W(l))
其中,
H
(
l
+
1
)
H^{(l+1)}
H(l+1)代表第l+1层的激活值,
H
(
0
)
=
X
H^{(0)}=X
H(0)=X;
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)表示激活值;
A
~
=
A
+
I
N
\tilde{A}=A+I_N
A~=A+IN表示给每个节点加上自连接的边(
I
N
I_N
IN);
W
(
l
)
W^{(l)}
W(l)表示第l层的权重;
D
~
=
∑
j
A
~
i
j
\tilde{D}=\sum_j \tilde{A}_{ij}
D~=∑jA~ij
2.传播规则是图谱滤波的一阶近似
定义图谱卷积是信号和过滤器
g
θ
g_{\theta}
gθ的乘积,
g
θ
g_{\theta}
gθ是由
θ
∈
R
N
\theta \in \mathbb{R}^N
θ∈RN在傅里叶域内参数化得到,
g
θ
=
d
i
a
g
(
θ
)
g_{\theta}=diag(\theta)
gθ=diag(θ)。
g
θ
∗
x
=
U
g
θ
U
T
x
g_{\theta} \ast x = Ug_{\theta}U^Tx
gθ∗x=UgθUTx
U
U
U是标准化laplace算子
L
L
L的特征向量,
L
=
I
N
−
D
−
1
2
A
D
−
1
2
=
U
Λ
U
T
L=I_N-D^{-\frac{1}{2}}AD^{-\frac{1}{2}}=U\Lambda U^T
L=IN−D−21AD−21=UΛUT。
g
θ
g_{\theta}
gθ可以理解为关于
L
L
L的特征值
Λ
\Lambda
Λ的函数,如
g
θ
(
Λ
)
g_{\theta}(\Lambda)
gθ(Λ)。其计算代价为
O
(
N
2
)
O(N^2)
O(N2)。
为了克服计算复杂,使用切比雪夫多项式k-阶展开
g
θ
′
≈
∑
k
=
0
K
θ
k
′
T
k
(
Λ
~
)
g_{\theta'}\approx\sum_{k=0}^K \theta_k'T_k(\tilde{\Lambda})
gθ′≈k=0∑Kθk′Tk(Λ~)
其中,
Λ
~
=
2
λ
m
a
x
L
−
I
N
\tilde{\Lambda}=\frac{2}{\lambda_{max}}L-I_N
Λ~=λmax2L−IN,
λ
m
a
x
\lambda_{max}
λmax是L最大的特征值;
θ
′
\theta'
θ′为切比雪夫系数。
回到我们定义的信号x和
g
θ
g_{\theta}
gθ的卷积,得到
g
θ
′
∗
x
≈
∑
k
=
0
K
θ
k
′
T
k
(
L
~
)
x
g_{\theta'} \ast x \approx \sum_{k=0}^K \theta_k'T_k(\tilde{L})x
gθ′∗x≈k=0∑Kθk′Tk(L~)x
其中,
L
~
=
2
λ
m
a
x
L
−
I
N
\tilde{L}=\frac{2}{\lambda_{max}}L-I_N
L~=λmax2L−IN;切比雪夫多项式
T
k
(
L
~
)
=
2
L
~
T
k
−
1
(
L
~
)
−
T
k
−
2
(
L
~
)
T_k(\tilde{L})=2\tilde{L}T_{k-1}(\tilde{L})-T_{k-2}(\tilde{L})
Tk(L~)=2L~Tk−1(L~)−Tk−2(L~),所以
T
k
(
L
~
)
T_k(\tilde{L})
Tk(L~)是关于
L
~
\tilde{L}
L~的k阶多项式。所以上式反映是中心节点的k阶领域。
3.逐层学习模型
基于图卷积的神经网络模型就是如上式中模式的多个卷积层的堆积。每个层后跟一个非线性运算。限制K=1,上式就是一个关于L的线性函数。我们可以通过堆叠这样的层来恢复卷积滤波器函数。此时,
T
0
(
L
~
)
=
1
,
T
1
(
L
~
)
=
L
~
T_0(\tilde{L})=1, T_1(\tilde{L})=\tilde{L}
T0(L~)=1,T1(L~)=L~。
近似
λ
=
2
\lambda = 2
λ=2,可得
g
θ
′
∗
x
=
θ
0
′
x
+
θ
1
′
L
~
x
=
θ
0
′
x
+
θ
1
′
(
L
−
I
N
)
x
=
θ
0
′
x
+
θ
1
′
D
−
1
2
A
D
−
1
2
x
g_{\theta'}\ast x=\theta_0'x+\theta_1'\tilde{L}x=\theta_0'x+\theta_1'(L-I_N)x=\theta_0'x+\theta_1'D^{-\frac{1}{2}}AD^{-\frac{1}{2}}x
gθ′∗x=θ0′x+θ1′L~x=θ0′x+θ1′(L−IN)x=θ0′x+θ1′D−21AD−21x
连续运用这种形式的过滤器k次,有效卷积一个节点的k阶邻域。k就是卷积层的个数。
在实际中,衰减参数的个数进一步防止过拟合,同时最小化每层中的矩阵乘法操作数,简化得
g
θ
′
∗
x
=
θ
(
I
N
+
D
−
1
2
A
D
−
1
2
)
x
g_{\theta'}\ast x = \theta (I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}})x
gθ′∗x=θ(IN+D−21AD−21)x
上式中,
θ
=
θ
0
′
=
−
θ
1
′
\theta=\theta_0'=-\theta_1'
θ=θ0′=−θ1′,
I
N
+
D
−
1
2
A
D
−
1
2
I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}}
IN+D−21AD−21的特征值近似在
[
0
,
2
]
[0,2]
[0,2]之间。在神经网络中多次重复使用此操作会导致数值不稳定、梯度爆炸/消失,缓解的trick是
I
N
+
D
−
1
2
A
D
−
1
2
⟶
D
~
−
1
2
A
~
D
~
−
1
2
I_N+D^{-\frac{1}{2}}AD^{-\frac{1}{2}} \longrightarrow \tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}
IN+D−21AD−21⟶D~−21A~D~−21,其中,
A
~
=
A
+
I
N
,
D
~
i
i
=
∑
j
A
~
i
j
\tilde{A}=A+I_N, \tilde{D}_{ii}=\sum_j\tilde{A}_{ij}
A~=A+IN,D~ii=∑jA~ij
将信号
X
X
X定义为更一般化的
X
∈
R
N
×
C
X\in \mathbb{R}^{N\times C}
X∈RN×C, C表示channel数,代表每个节点的特征维度。那么
Z
=
D
~
−
1
2
A
~
D
~
−
1
2
X
Θ
Z = \tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}X\Theta
Z=D~−21A~D~−21XΘ
四、节点的半监督分类
预先计算
A
^
=
D
~
−
1
2
A
~
D
~
−
1
2
\hat{A}=\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}
A^=D~−21A~D~−21,向前传播模型
Z
=
f
(
A
,
X
)
=
s
o
f
t
m
a
x
(
A
^
R
e
l
u
(
A
^
X
W
(
0
)
)
W
(
1
)
)
Z = f(A, X) = softmax(\hat{A} Relu(\hat{A}XW^{(0)})W^{(1)})
Z=f(A,X)=softmax(A^Relu(A^XW(0))W(1))
只是用有标签的数据计算损失,
y
L
\mathcal{y}_L
yL表示有标签的节点的集合,交叉熵损失函数定义如下:
L
=
−
∑
l
∈
y
L
∑
f
=
1
F
Y
l
f
ln
Z
l
\mathcal{L}=-\sum_{l\in \mathcal{y}_L}\sum_{f=1}^FY_{lf}\ln Z_{l}
L=−l∈yL∑f=1∑FYlflnZl