图卷积(5)——空域图卷积
之前介绍了谱域图卷积,但谱域图卷积也有一定的限制:
- 谱域图卷积只适合无向图
由于图傅里叶变换只能用于无向图,所以当遇到有向图时(不是所有时候 W i j W_{ij} Wij都等于 W j i W_{ji} Wji),图傅里叶变换无法使用,无法将空域信号转换到谱域中,谱域图卷积便无法继续 - 谱域图卷积是在假定原图数据结构不变的情况下进行的
谱域图卷积的训练期间,图结构是不能变化的(比如修改边权重,增加或删除节点),而在一些固定场景下,比如社交网络、交通场景,图的结构是会变的 - 模型复杂度问题
SCNN需要进行拉普拉斯矩阵的谱分解,需要大量的时间;而ChebNet和GCN虽不需要进行谱分解,但参数量的大量减少,一定程度上限制了模型的性能
所有人们便提出一个问题,能不能跳过谱域,直接在空域上进行卷积?要想在空域上直接进行卷积,那么就需要对卷积进行重新定义。
- 谱域图卷积
根据图谱理论和卷积定理,将数据从空域转换到谱域进行处理;有坚实的理论基础; - 空域图卷积
不依靠图谱理论,直接在空间上定义操作;较为直观灵活;
GNN
GNN论文:A Generalization of Convolutional Neural Networks to Graph-Structured Data
GNN的作者将卷积操作定义为构建邻域(选择固定数量的邻域节点,再进行排序)和对邻域的点和卷积核参数内积。那么只要在图结构上,完成这两步操作,就能够完成空域图卷积了。
作者采用了随机游走的方法来解决构建邻域的需求,根据被选中的期望大小来进行排序以及选取固定个数的邻域节点。
GNN符号标记
作者定义了一个相似度矩阵 S S S,其实就可以理解为邻接矩阵,那理所当然,度矩阵便是 D i i = ∑ j S i j D_{i i}=\sum_{j} S_{i j} Dii=∑jSij,作者还定义了随机游走转移矩阵 P P P,其中 P i j P_{ij} Pij表示由 i i i节点转移到 j j j节点的概率。随机游走可以认为是一个节点有概率转移到相邻的节点,所以节点的这种转移概率构成一个概率矩阵,即随机游走矩阵 P P P。
GNN具体步骤
P
=
D
−
1
S
P=D^{-1}S
P=D−1S
那么,多步长的转移期望定义为:
Q
(
0
)
=
I
,
Q
(
1
)
=
I
+
P
,
⋯
,
Q
(
k
)
=
∑
i
=
0
k
P
k
Q^{(0)}=I, Q^{(1)}=I+P, \cdots, Q^{(k)}=\sum_{i=0}^{k} P^{k}
Q(0)=I,Q(1)=I+P,⋯,Q(k)=i=0∑kPk
其中,
Q
i
j
(
k
)
Q_{ij}^{(k)}
Qij(k)代表从节点
i
i
i开始,
k
k
k步到节点
j
j
j的期望数。求出各个期望值之后,根据大小进行排序,前
p
p
p个节点,便是要找的
p
p
p个邻域节点。比如,让
π
i
(
k
)
(
c
)
\pi_i^{(k)}(c)
πi(k)(c)表示节点的序号,该节点为
k
k
k步内,由
i
i
i节点出发访问期望数第
c
c
c大的结点,
Q
i
π
i
(
k
)
(
1
)
>
Q
i
π
i
(
k
)
(
2
)
>
…
>
Q
i
π
i
(
k
)
(
N
)
Q_{i \pi_{i}^{(k)}(1)}>Q_{i \pi_{i}^{(k)}(2)}>\ldots>Q_{i \pi_{i}^{(k)}(N)}
Qiπi(k)(1)>Qiπi(k)(2)>…>Qiπi(k)(N)。那么卷积操作便为:
Conv
1
(
x
)
=
[
x
π
1
(
k
)
(
1
)
⋯
x
π
1
(
k
)
(
p
)
x
π
2
(
k
)
(
1
)
⋯
x
π
2
(
k
)
(
p
)
⋮
⋱
⋮
x
π
N
(
k
)
(
1
)
⋯
x
π
N
(
k
)
(
p
)
]
⋅
[
w
1
w
2
⋮
w
p
]
\operatorname{Conv}_{1}(\mathrm{x})=\left[\begin{array}{ccc} x_{\pi_{1}^{(k)}(1)} & \cdots & x_{\pi_{1}^{(k)}(p)} \\ x_{\pi_{2}^{(k)}(1)} & \cdots & x_{\pi_{2}^{(k)}(p)} \\ \vdots & \ddots & \vdots \\ x_{\pi_{N}^{(k)}(1)} & \cdots & x_{\pi_{N}^{(k)}(p)} \end{array}\right] \cdot\left[\begin{array}{c} w_{1} \\ w_{2} \\ \vdots \\ w_{p} \end{array}\right]
Conv1(x)=⎣⎢⎢⎢⎢⎡xπ1(k)(1)xπ2(k)(1)⋮xπN(k)(1)⋯⋯⋱⋯xπ1(k)(p)xπ2(k)(p)⋮xπN(k)(p)⎦⎥⎥⎥⎥⎤⋅⎣⎢⎢⎢⎡w1w2⋮wp⎦⎥⎥⎥⎤
可以这么认为,GNN就是采用了随机游走的方法,给每一个节点,寻找了最紧密相连的
P
P
P个节点,构建邻域,再与固定大小的卷积核(
P
P
P个参数)进行卷积。本质上来说,GNN的做法是通过某种方法强制的把不规则的图结构数据转换成规则的数据,再进行卷积。
P.S.
矩阵 P P P的 n n n次方的第 ( i , j ) (i,j) (i,j)个元素的意思是:从 i i i节点出发走了 n n n步到 j j j节点的概率。需要了解可以搜索马尔科夫模型,这就是马尔科夫模型中的状态转移矩阵。
GraphSAGE
原文:inductive representation learning on large graphs
本篇文章的作者认为,卷积就是采样加上信息的融合。文章核心思想就是采样和聚合。
- 通过采样,得到邻域节点;
- 使用聚合函数获取邻域节点的信息,获得目标节点的embedding;
- 利用节点上聚合得到的信息,来预测节点的label;
采样
GraphSAGE采用有放回的均匀采样法来采样固定的邻域节点。即对于某一节点,在其一阶相连的节点上均匀采样以构建一个固定节点数量的邻域。采样时,每一次迭代,邻域都会发生变化。
聚合
作者认为,卷积是与输入数据排序无关的,所以采用的聚合函数也必须是与输入顺序无关的。作者提出了三种聚合函数:
- Mean Aggregator
- LSTM Aggregator
- MaxPooling Aggregator
GrapgSAGE和GNN的不同之处
- 在GNN以及传统的CNN中是需要确定邻域节点的顺序的,但是GraphSAGE的作者认为图卷积的邻域节点不需要排序。
- 在GNN中,邻域的每个节点拥有不同的卷积核参数,在GraphSAGE中,所有的邻域节点共享同样的卷积核参数。
- 在邻域的选择方法上,GNN采用随机游走的方法,而GraphSAGE采用均匀采样的方法。
GAT
原文:Graph Attention Networks
该篇论文给卷积下的定义为:利用注意力机制对邻域节点有区别的聚合。Attention机制的核心逻辑是从关注全部到关注重点。GAT(GRAPH ATTENTION NETWORKS)的核心思想便是将attention引入到图卷积模型之中。
本文作者认为邻域中所有的节点共享一个相同的卷积核参数会限制模型的能力,因为邻域内每一个节点和中心节点的关联度是不一样的,所以在进行卷积操作时,需要对邻域节点“区别对待”,作者采用的是attention机制来对中心节点和邻域节点的关联度进行建模。
GAT具体步骤
- 计算节点之间的关联度, e i j = α ( w h ⃗ i , W h ⃗ j ) = a ⃗ T [ W h ⃗ i ∥ W h ⃗ j ] e_{i j}=\alpha\left(\mathbf{w} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right)=\vec{a}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{j}\right] eij=α(whi,Whj)=aT[Whi∥Whj],其中, h ⃗ i ∈ R F \vec{h}_{i} \in \mathbb{R}^{F} hi∈RF代表节点 i i i的特征向量, F F F代表节点特征向量的通道数。 W ∈ R F × F ′ W\in\mathbb{R}^{F\times F^{\prime}} W∈RF×F′是可学习的线性变换参数, α ( ⋅ ) : R F ′ × R F ′ → R \alpha(\cdot):\mathbb{R}^{F^{\prime}}\times \mathbb{R}^{F^{\prime}}\rightarrow \mathbb{R} α(⋅):RF′×RF′→R代表注意力机制,其输出的 e i j e_{ij} eij称为注意力系数,在具体实验中, α ( ⋅ ) \alpha(\cdot) α(⋅)的实现就是一个简单的单层前馈神经网络, ∥ \| ∥表示将两个向量拼接在一起, a ⃗ T ∈ R 2 F ′ \vec{a}^{T} \in \mathbb{R}^{2 F^{\prime}} aT∈R2F′为可学习的参数。
- 为了方便比较节点之间的注意力系数,采用softmax归一化对每个节点的注意力系数进行归一化。
- 利用上述得到的注意力系数对邻域节点进行有区别的信息聚合:
h
⃗
i
′
=
f
(
∑
j
∈
N
i
α
i
j
W
h
⃗
j
)
\vec{h}_{i}^{\prime}=f(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j} \mathbf{W}\vec{h}_{j})
hi′=f(j∈Ni∑αijWhj)
其中, α i j \alpha_{ij} αij便是softmax归一化之后的注意力系数, W W W为共享的卷积核参数, h ⃗ j \vec{h}_{j} hj为节点特征。
GAT与其他图卷积
- 在构建邻域节点上,GNN采用随机游走的方法,GraphSAGE采用均匀采样的方法,而GAT直接选用一阶相邻接点作为中心节点的邻域节点(和谱域图卷积中的GCN类似);
- 在节点排序上,GAT中邻域节点无需排序,且共享卷积核参数(和GraphSAGE类似,与GNN不同);
- 由于GAT引入了attention机制,可以构建相邻接点之间的关系,对邻域节点有区别的聚合。其实,若将 α i j \alpha_{ij} αij和 W W W结合起来,看成一个参数,那么GAT相当于对每个邻域节点都分配了不同的卷积核参数。
总的来说,GAT可以认为是一种对局部图结构的学习(因为邻域节点选用了一阶相邻节点),图卷积操作不能只关注节点特征而忽视了图的结构。