图结构数据
图结构数据是一类高度结构化、信息富集的数据。但传统的CNN和RNN并不能很好地利用这类数据中的信息。
图结构的基本元素
图 G = ( A , X ) \mathcal G=(\mathbf A,\mathbf X) G=(A,X)。其中邻接矩阵 A ∈ R N × N \mathbf A\in \mathbb R^{N\times N} A∈RN×N,其中N为节点数;特征矩阵 X ∈ R N × F \mathbf X\in \mathbb R^{N\times F} X∈RN×F,其中F为特征数。
运用图数据的基本思想
- 节点的社区构成计算图
- 信息沿边在节点间传播
- 生成节点嵌入信息(相当于特征提取)
给出计算图
- 你可以定义一个节点的“社区”是什么,比如一跳邻居、两跳邻居
- 每个节点都有一张计算图
信息传播
- 使用神经网络将邻居的信息传播给中心节点
- 目标是将与目标点有关的全部信息集成到目标点上
节点嵌入
- 每一层都有一个输出
- 理论上可以是任意深度的
- 节点嵌入基本公式
h v 0 = x v h v k = σ ( W k ∑ u ∈ N ( v ) h u k − 1 ∣ N ( v ) ∣ + B k h v k − 1 ) z v = h v K \mathbf h^0_v=\mathbf x_v\\ \mathbf h^k_v=\sigma\big(\mathbf W_k\sum_{u\in N(v)}\frac{\mathbf h^{k-1}_u}{\vert N(v)\vert}+\mathbf B_k\mathbf h^{k-1}_v\big)\\ \mathbf z_v=\mathbf h_v^K hv0=xvhvk=σ(Wku∈N(v)∑∣N(v)∣huk−1+Bkhvk−1)zv=hvK
公式解读:第k层的嵌入是k-1层的邻域均值乘以系数 W k \mathbf W_k Wk加前一层的点嵌入乘系数 B k \mathbf B_k Bk,再经过非线性层 σ \sigma σ(如ReLU);最终输出 z v \mathbf z_v zv为第 K K K层的 h v K \mathbf h_v^K hvK
GNN
无监督训练
- 点嵌入训练:指导思想是相似点的嵌入应当是相似的。
- 对相似点的定义:基于随机游走、图分解、相邻点
有监督训练
Loss公式:
L
=
∑
v
∈
V
y
v
log
(
σ
(
z
v
T
θ
)
)
+
(
1
−
y
v
)
log
(
1
−
σ
(
z
v
T
θ
)
)
\mathcal L=\sum_{v\in V}y_v\log(\sigma(\mathbf z_v^T\theta))+(1-y_v)\log(1-\sigma(\mathbf z_v^T\theta))
L=v∈V∑yvlog(σ(zvTθ))+(1−yv)log(1−σ(zvTθ))
其中,
y
v
y_v
yv是节点的label;
z
v
\mathbf z_v
zv是点嵌入的输出,
θ
\theta
θ是分类权重
GCN
灵感:CNN对每个邻像素有不同的权重,图中能对每个邻居有不同的权重吗?
输入与GNN相同,输出比GNN多出一个图层面的输出
GCN更新规则
h
i
l
+
1
=
σ
(
W
0
l
h
i
l
+
∑
j
∈
N
(
i
)
1
c
i
j
W
1
l
h
j
l
)
H
l
+
1
=
f
(
H
l
,
A
)
\mathbf h_i^{l+1}=\sigma(\mathbf W_0^l\mathbf h_i^l+\sum_{j\in N(i)}\frac1{c_{ij}}W_1^lh_j^l)\\ H^{l+1}=f(H^l,A)
hil+1=σ(W0lhil+j∈N(i)∑cij1W1lhjl)Hl+1=f(Hl,A)
其中
c
i
j
c_{ij}
cij是正态常数,可训练也可固定;
H
l
H^l
Hl是整个图在第l次更新后的嵌入。
参数归一化
如果参数矩阵A是未经归一化的,将特征向量与之相乘的操作会彻底改变特征向量的标度。因此需要将参数矩阵A归一化( D − 1 A D^{-1}A D−1A)。一般有三种归一化:归一化到列和为1、归一化到相邻节点特征的加权平均值、对称归一化( D − 1 2 A D − 1 2 D^{-\frac12}AD^{-\frac12} D−21AD−21)
归一化传播规则
f
(
H
l
,
A
)
=
σ
(
D
^
−
1
2
A
^
D
^
−
1
2
H
l
W
l
)
f(H^l,A)=\sigma\big(\hat D^{-\frac12}\hat A\hat D^{-\frac12}H^lW^l\big)
f(Hl,A)=σ(D^−21A^D^−21HlWl)
其中
A
^
=
A
+
I
\hat A=A+I
A^=A+I,
D
^
\hat D
D^是
A
^
\hat A
A^的节点度对角矩阵(这是个啥?我也不知道)
优点:
- 全局权值共享
- 排列不变性
- 线性复杂度
缺点:
- 仅间接支持边特征
- 深度网络需要门控机构(gating mechanism)和跳层连接
GraphSAGE
图采样与集成
之前采用的聚集规则:
h
v
k
=
σ
(
W
k
∑
u
∈
N
(
v
)
h
u
k
−
1
∣
N
(
v
)
∣
+
B
k
h
v
k
−
1
)
\mathbf h^k_v=\sigma\big(\mathbf W_k\sum_{u\in N(v)}\frac{\mathbf h^{k-1}_u}{\vert N(v)\vert}+\mathbf B_k\mathbf h^{k-1}_v\big)
hvk=σ(Wku∈N(v)∑∣N(v)∣huk−1+Bkhvk−1)
该工作提出的新聚集规则:
h
v
k
=
σ
(
W
k
AGG
(
{
h
u
k
−
1
,
∀
u
∈
N
(
v
)
}
)
,
B
k
h
v
k
−
1
)
\mathbf h_v^k=\sigma(\mathbf W_k\text{AGG}(\{\mathbf h_u^{k-1},\forall u\in N(v)\}),\mathbf B_kh_v^{k-1})
hvk=σ(WkAGG({huk−1,∀u∈N(v)}),Bkhvk−1)
其中AGG可以是任意可微的、能将一组向量映射到一个向量的函数。如Mean、Pool、LSTM等操作。
Gated GNN
想让图神经网络可以更深层从而整合更远处的信息,就会面临过拟合和梯度消失的挑战。从RNN借鉴了两点:
- 跨层参数共享
- 循环状态更新
更新公式:
m v k = W ∑ u ∈ N ( v ) h u k − 1 h v k = GRU ( h v k − 1 , m v k ) \mathbf m_v^k=\mathbf W\sum_{u\in N(v)}\mathbf h^{k-1}_u\\ \mathbf h_v^k=\text{GRU}(\mathbf h_v^{k-1},\mathbf m_v^k) mvk=Wu∈N(v)∑huk−1hvk=GRU(hvk−1,mvk)
经此更改,模型能支持超过二十层的深层神经网络,从而能将关于图的全局信息传播给所有节点,这对于图表示非常有用
GAT
具体内容参看Graph Attention Network。
核心公式
α i j = exp ( LeakyReLU ( a ⃗ T [ W h ⃗ i ∥ W h ⃗ j ] ) ) ∑ k ∈ N ( i ) exp ( LeakyReLU ( a ⃗ T [ W h ⃗ i ∥ W h ⃗ k ] ) ) Average: h ⃗ i ′ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h j ) Concat: h ⃗ i ′ = ∥ k = 1 K σ ( ∑ j ∈ N i α i j k W k h ⃗ j ) \alpha_{ij}=\frac{\exp({\text{LeakyReLU}(\vec a^T[\mathbf W_{\vec h_i}\Vert\mathbf W_{\vec h_j}])})}{\sum_{k\in \mathcal N(i)}\exp({\text{LeakyReLU}(\vec a^T[\mathbf W_{\vec h_i}\Vert\mathbf W_{\vec h_k}])})}\\ \text{Average:}\vec h'_i=\sigma\big(\frac1K\sum_{k=1}^K\sum_{j\in\mathcal N_i}\alpha_{ij}^k\mathbf W^kh_j\big)\\ \text{Concat:}\vec h'_i=\overset{K}{\underset{k=1}\parallel}\sigma(\sum_{j\in \mathcal N_i}\alpha^k_{ij}\mathbf W^k\vec h_j) αij=∑k∈N(i)exp(LeakyReLU(aT[Whi∥Whk]))exp(LeakyReLU(aT[Whi∥Whj]))Average:hi′=σ(K1k=1∑Kj∈Ni∑αijkWkhj)Concat:hi′=k=1∥Kσ(j∈Ni∑αijkWkhj)
优缺点
优点:
- 在使用点乘Attention时不需要储存中间基于边的激活向量(是个啥我也不知道)
- 在边嵌入上比GCN慢但比GNN快
缺点:
- 在边嵌入上的表达能力不及GNN
- 更难优化
子图嵌入
两类方法:
- 将子图中所有节点嵌入的加和(或加权和)视为该子图的嵌入
- 创造一个虚节点代表该子图
GNN的应用
点分类、图分类、边预测
对于以上三类任务,给定模型输出
Z
\mathbf Z
Z:
点分类公式:
s
o
f
t
m
a
x
(
z
n
)
softmax(\mathbf z_n)
softmax(zn)
图分类公式:
s
o
f
t
m
a
x
(
∑
n
z
n
)
softmax(\sum_n\mathbf z_n)
softmax(∑nzn)
边预测公式:
p
(
A
i
j
)
=
σ
(
z
i
T
z
j
)
p(A_{ij})=\sigma(\mathbf z_i^T\mathbf z_j)
p(Aij)=σ(ziTzj)
半监督训练
L
=
−
∑
l
∈
Y
l
∑
f
=
1
Y
l
f
ln
Z
l
f
\mathcal L=-\sum_{l\in \mathcal Y_l}\sum_{f=1}Y_{lf}\ln Z_{lf}
L=−l∈Yl∑f=1∑YlflnZlf
More about GNN