图神经网络
图神经网络是针对一些图结构数据设计的网络,比如分子结构啥的。
模型结构
首先图是由 G ( N , E ) G(N,E) G(N,E),N是节点,E是边组成。对于每个节点和边,定义 l n l_n ln表示节点的特征向量, l ( n 1 , n 2 ) l_{(n_1,n2)} l(n1,n2)定义 n 1 n_1 n1和 n 2 n_2 n2的边,一个直观的图如下图
上图中的节点表示对象或概念,边表示它们之间的关系。 每个概念自然都有其特点及相关概念,所以基于每个节点的邻居节点的信息引入 x n x_n xn表示,我们在本文中称之为n的全局表示,因为他是综合了相邻节点的信息的
定义
f
w
f_w
fw状态局部转移函数,
g
w
g_w
gw是局部输出函数描述输出的产生。有如下表示
x
n
=
f
w
(
l
n
,
l
c
o
[
n
]
,
x
n
e
[
n
]
,
l
n
e
[
n
]
)
o
n
=
g
w
(
x
n
,
l
n
)
x_n=f_w(l_n,l_{co[n]},x_{ne[n]},l_{ne[n]}) \\ o_n=g_w(x_n,l_n)
xn=fw(ln,lco[n],xne[n],lne[n])on=gw(xn,ln)
其中
l
n
l_n
ln表示节点n的特征表示,
l
c
o
[
n
]
l_{co[n]}
lco[n]表示相邻边的特征向量,
x
n
e
[
n
]
x_{ne[n]}
xne[n]表示节点n相邻节点的全局表示,
l
n
e
[
n
]
l_{ne[n]}
lne[n]表示节点n相邻节点的特征向量。
x
n
x_n
xn和
o
n
o_n
on考虑信息的传递是由相邻节点通过相邻边传过来的。
有定理,当
f
w
f_w
fw是一个压缩映射的时候x_n最后会趋于稳定,具体就不说明,就是任意节点
x
n
x_n
xn随着不停的迭代的迭代最后会区域稳定。所以
x
n
x_n
xn最终稳定的值是需要使用状态迭代的方式计算出来,故不难推出由下式
x
n
(
t
+
1
)
=
f
w
(
l
n
,
l
c
o
[
n
]
,
x
n
e
[
n
]
(
t
)
,
l
n
e
[
n
]
)
o
n
(
t
)
=
g
w
(
x
n
(
t
)
,
l
n
)
x_n(t+1)=f_w(l_n,l_{co[n]},x_{ne[n]}(t),l_{ne[n]})\\ o_n(t)=g_w(x_n(t),l_n)
xn(t+1)=fw(ln,lco[n],xne[n](t),lne[n])on(t)=gw(xn(t),ln)
如果最后的任务以节点为中心的任务时,就是每个节点都要输出什么值时,很明显是要对每个节点信息进行监督的,定义损失函数最小均方误差
e
w
=
∑
i
=
1
p
∑
j
=
1
q
i
(
t
i
,
j
−
φ
(
G
i
,
n
i
,
j
)
)
2
e_w=\sum_{i=1}^{p}\sum_{j=1}^{q_i}(t_{i,j}-\varphi(G_i,n_{i,j}))^2
ew=i=1∑pj=1∑qi(ti,j−φ(Gi,ni,j))2
其中p是可以理解为图的个数,有可能模型并不只是一个图啊,
q
i
q_i
qi代表第
i
i
i个图的节点数,
n
i
,
j
n_{i,j}
ni,j代表第i个图的第j个节点,
t
i
,
j
t_{i,j}
ti,j表示第i个图的第j个节点的期望值。
我们最终的目标是训练得到函数 f w f_w fw的一组参数 w w w使得在这组参数下稳定下来的 x n x_n xn通过 g ( w ) g(w) g(w)输出一个我们期望的值,所以与传统RNN不同地方是他的时间步是不确定的。整个过程用神经网络建模,有如下直观表示
学习算法
首先假定z(t)表示是某一个时间t是,总损失对于x的导数,
z
(
t
)
=
∑
i
=
0
T
−
t
∂
e
(
T
)
∂
o
(
T
)
∂
G
w
(
x
(
T
)
,
l
N
)
∂
x
(
T
)
∏
j
=
1
i
(
∂
F
w
(
x
(
T
−
j
)
,
l
N
)
∂
x
(
T
−
j
)
)
=
∑
i
=
0
T
−
j
∂
e
w
(
T
)
∂
x
(
T
−
j
)
)
=
∑
T
t
∂
e
w
(
T
)
∂
x
(
T
−
j
)
)
,
注
意
最
后
一
个
求
和
的
表
示
,
是
逆
序
的
(1)
z(t)=\sum_{i=0}^{T-t}\frac{\partial e(T)}{\partial o(T)}\frac{\partial G_w(x(T),l_N)}{\partial x(T)}\prod_{j=1}^{i}(\frac{\partial F_w(x(T-j),l_N)}{\partial x(T-j)})\\ =\sum_{i=0}^{T-j}\frac{\partial e_w(T)}{\partial x(T-j)})=\sum_{T}^{t}\frac{\partial e_w(T)}{\partial x(T-j)})\\, \tag{1} 注意最后一个求和的表示,是逆序的
z(t)=i=0∑T−t∂o(T)∂e(T)∂x(T)∂Gw(x(T),lN)j=1∏i(∂x(T−j)∂Fw(x(T−j),lN))=i=0∑T−j∂x(T−j)∂ew(T))=T∑t∂x(T−j)∂ew(T)),注意最后一个求和的表示,是逆序的(1)
不难得到当z(t)是收敛时也就是整个网络再加深也没有意义有如下式子
z
(
t
)
=
z
(
t
+
1
)
∂
F
w
(
x
,
l
)
∂
x
+
∂
e
w
∂
o
∂
G
w
(
x
,
l
N
)
∂
x
(2)
z(t)=z(t+1)\frac{\partial F_w(x,l)}{\partial x}+\frac{\partial e_w}{\partial o}\frac{\partial G_w(x,l_N)}{\partial x}\tag{2}
z(t)=z(t+1)∂x∂Fw(x,l)+∂o∂ew∂x∂Gw(x,lN)(2)
代表的就算再叠加一个时间步求导,他同样对于x的梯度也是一样的,此时达到收敛,所以可以求出稳态z满足如下式子
z
=
∂
e
w
∂
o
∂
G
w
(
x
,
l
N
)
∂
x
(
I
a
−
∂
F
w
(
x
,
l
)
∂
x
)
−
1
,
其
中
I
a
是
单
位
矩
阵
,
a
维
的
(3)
z=\frac{\partial e_w}{\partial o}\frac{\partial G_w(x,l_N)}{\partial x}(I_a-\frac{\partial F_w(x,l)}{\partial x})^{-1},\\\tag{3} 其中I_a是单位矩阵,a维的
z=∂o∂ew∂x∂Gw(x,lN)(Ia−∂x∂Fw(x,l))−1,其中Ia是单位矩阵,a维的(3)
接下来就是求
∂
e
w
∂
w
\frac{\partial e_w}{\partial w}
∂w∂ew,由隐函数理论有,
∂
ψ
(
w
)
∂
w
=
(
I
a
−
∂
F
w
(
x
,
l
)
∂
x
)
−
1
∂
F
w
(
x
,
l
)
∂
w
(4)
\frac{\partial \psi(w)}{\partial w}=(I_a-\frac{\partial F_w(x,l)}{\partial x})^{-1}\frac{\partial F_w(x,l)}{\partial w}\tag{4}
∂w∂ψ(w)=(Ia−∂x∂Fw(x,l))−1∂w∂Fw(x,l)(4)
其中
ψ
\psi
ψ指的还是
F
w
F_w
Fw传递函数,当趋于稳态的时候有
∂
ψ
(
w
)
∂
w
=
∂
F
w
(
x
,
l
)
∂
w
+
∂
F
w
(
x
,
l
)
∂
x
∂
ψ
(
w
)
∂
w
\frac {\partial\psi(w)}{\partial w}=\frac{\partial F_w(x,l)}{\partial w}+\frac{\partial F_w(x,l)}{\partial x}\frac{\partial\psi (w)}{\partial w}
∂w∂ψ(w)=∂w∂Fw(x,l)+∂x∂Fw(x,l)∂w∂ψ(w)
所以推出(4)式。
所以现在可以求出误差关于w的导数根据链式求导有:
∂
e
w
∂
w
=
∂
e
w
∂
o
∂
G
w
(
x
,
l
N
)
∂
w
+
∂
e
w
∂
o
∂
G
w
(
x
,
l
N
)
∂
x
∂
ψ
(
w
)
∂
w
(5)
\frac{\partial e_w}{\partial w}=\frac{\partial e_w}{\partial o}\frac{\partial G_w(x,l_N)}{\partial w}+\frac{\partial e_w}{\partial o}\frac{\partial G_w(x,l_N)}{\partial x}\frac{\partial \psi(w)}{\partial w}\tag{5}
∂w∂ew=∂o∂ew∂w∂Gw(x,lN)+∂o∂ew∂x∂Gw(x,lN)∂w∂ψ(w)(5)
然后将(4)式和(3)式代入(5)可得
∂
e
w
∂
w
=
∂
e
w
∂
o
∂
G
w
(
x
,
l
N
)
∂
w
+
∂
e
w
∂
o
∂
G
w
(
x
,
l
N
)
∂
x
(
I
a
−
∂
F
w
(
x
,
l
)
∂
x
)
−
1
∂
F
w
(
x
,
l
)
∂
w
=
∂
e
w
∂
o
∂
G
w
(
x
,
l
N
)
∂
w
+
z
∂
F
w
(
x
,
l
)
∂
w
(6)
\frac{\partial e_w}{\partial w}=\frac{\partial e_w}{\partial o}\frac{\partial G_w(x,l_N)}{\partial w}+\frac{\partial e_w}{\partial o}\frac{\partial G_w(x,l_N)}{\partial x}(I_a-\frac{\partial F_w(x,l)}{\partial x})^{-1}\frac{\partial F_w(x,l)}{\partial w}\\ =\frac{\partial e_w}{\partial o}\frac{\partial G_w(x,l_N)}{\partial w}+z\frac{\partial F_w(x,l)}{\partial w}\tag{6}
∂w∂ew=∂o∂ew∂w∂Gw(x,lN)+∂o∂ew∂x∂Gw(x,lN)(Ia−∂x∂Fw(x,l))−1∂w∂Fw(x,l)=∂o∂ew∂w∂Gw(x,lN)+z∂w∂Fw(x,l)(6)
,
所以求出了梯度后就好办了,整个算法的流程如下
对于非线性GNN来说,为了保证
F
w
F_w
Fw是压缩映射,使得最终
x
n
x_n
xn可收敛,需要在原有损失函数加上一个惩罚项实现,即
e
w
=
∑
i
=
1
p
∑
j
=
1
q
i
(
t
i
,
j
−
φ
(
G
i
,
n
i
,
j
)
)
2
+
β
L
(
∣
∣
∂
F
w
∂
x
∣
∣
)
其
中
{
L
(
∣
∣
∂
F
w
∂
x
∣
∣
)
=
(
∂
F
w
∂
x
−
u
)
2
,
当
∂
F
w
∂
x
>
u
L
(
∣
∣
∂
F
w
∂
x
∣
∣
)
=
0
,
当
∂
F
w
∂
x
<
=
u
其
中
0
<
u
<
1
e_w=\sum_{i=1}^{p}\sum_{j=1}^{q_i}(t_{i,j}-\varphi(G_i,n_{i,j}))^2+\beta L(||\frac {\partial F_w}{\partial x}||) \\ 其中 \left \{ \begin{array}{c} L(||\frac {\partial F_w}{\partial x}||)=(\frac {\partial F_w}{\partial x}-u)^2, 当\frac {\partial F_w}{\partial x}>u \\ L(||\frac {\partial F_w}{\partial x}||)=0, 当\frac {\partial F_w}{\partial x}<=u \\ \end{array} \right. \\ 其中0<u<1
ew=i=1∑pj=1∑qi(ti,j−φ(Gi,ni,j))2+βL(∣∣∂x∂Fw∣∣)其中{L(∣∣∂x∂Fw∣∣)=(∂x∂Fw−u)2,当∂x∂Fw>uL(∣∣∂x∂Fw∣∣)=0,当∂x∂Fw<=u其中0<u<1
代码实现
省略,