在看《图深度学习》这本书时候记录的一些要点,每节序号和书的章节号对应可以翻阅。
Ⅰ是基础概念,Ⅱ是GNN的重点内容,Ⅲ是扩展知识。
Ⅳ是实际应用,Ⅴ是前沿进展,有需要的话可以深入了解。
Ⅰ《图深度学习》二、三章学习笔记(图论基础、深度学习基础)
Ⅱ《图深度学习》四、五章学习笔记(图嵌入、图神经网络)
Ⅲ《图深度学习》六、七、八、九章学习笔记(GNN的可扩展性、健壮性、复杂图、其他深度模型)
Ⅳ《图深度学习》十、十一、十二、十三章学习笔记(GNN在NLP、CV、数据挖掘、医疗领域的应用)
Ⅴ《图深度学习》十四、十五章学习笔记(高级方法、高级应用)
文章目录
第四章 图嵌入
图嵌入的目的:将给定图中的每个节点映射到一个低维的向量表示(图域—>嵌入域)。
图嵌入的通用框架有四个关键组件:
- 节点从图域映射到嵌入域的映射函数;
- 提取图域中需保留信息的信息抽取器 I \mathcal I I;
- 利用嵌入域信息重构所提取图信息的重构器 I ′ \mathcal I' I′;
- 通过对
I
\mathcal I
I和
I
′
\mathcal I'
I′的目标进行优化,学习映射或重构器中涉及的所有参数。
4.2 简单图的图嵌入
需要保留的信息:节点共现、结构角色、节点状态和社区结构。
4.2.1 保留节点共现
流行方法之一是执行随机游走,如果一些节点倾向于在某些随机游走中共同出现,则认为这些节点是相似的。然后优化一个映射函数,使得学习到的节点表示可以重构从随机游走中提取的“相似性”。
DeepWalk
保留节点间共现关系的经典图嵌入算法。
①映射函数
使用查找表:给定索引
i
i
i,可以直接检索到节点
v
i
v_i
vi的嵌入
u
i
\ \boldsymbol u_i
ui。
f
(
v
i
)
=
u
i
=
W
T
e
i
f(v_i)=\boldsymbol u_i=\boldsymbol W^T\boldsymbol e_i
f(vi)=ui=WTei
式中,
e
i
∈
{
0
,
1
}
N
\ \boldsymbol e_i ∈\{ 0,1\}^N
ei∈{0,1}N表示节点
v
i
\ v_i
vi的one-hot编码,其中
N
N
N为节点数量,矩阵
W
\ \boldsymbol W
W的第
i
\ i
i行是节点
v
i
\ \boldsymbol v_i
vi的表示。
②基于随机游走的共现提取器
随机游走:从图
G
\ \mathcal G
G的一个节点开始,从它的邻居中以概率
p
\ p
p选中一个节点并前进到这个节点,接着从该选中的节点开始重复上述过程,得到一个结点的序列,长度为
T
\ T
T,称为图上长度为
T
\ T
T的随机游走。
式中,被访问的下一个节点是按均匀分布从当前节点的邻居中随机选择的,
d
(
v
(
t
)
)
d(v^{(t)})
d(v(t))是节点
v
(
t
)
v^{(t)}
v(t)的度。上述过程可以用一个随机游走生成器
R
W
(
)
RW()
RW()来总结:
W
=
R
W
(
G
,
v
(
0
)
,
T
)
\mathcal W =\rm RW(\mathcal G,v^{(0)},T)
W=RW(G,v(0),T)。
为了生成随机游走能够捕获整个图的信息,每个节点都被用作起始节点生成
γ
\ \gamma
γ个随机游走,具体步骤如下:
算法1最后输出集合
R
\ \mathcal R
R,它包含
∣
V
∣
\vert \mathcal V\vert
∣V∣个
γ
\ \gamma
γ随机游走。
Skip-gram算法通过捕获句子中词之间的共现关系来保存句子的信息,认为中心词与其上下文(距离为 w w w)的词是有共现关系的。DeepWalk将这个概念应用到随机游走中,两个节点的共现被表示为元组 ( v c o n , v c e n ) (v_{con},v_{cen}) (vcon,vcen),后者是中心节点,后者是它的某个上下文节点。
算法2用于从随机游走中提取节点间共现关系。这里平等的对待所有上下文节点,不考虑它们与中心节点的距离。
③重构器和目标
为了通过嵌入域重构共现信息,需要通过节点嵌入推断在
I
\ \mathcal I
I各个元组出现的概率。一个节点可以同时扮演两个角色,即中心节点和其他节点的上下文节点,因此用两个不同的映射函数生成节点,表示它们扮演不同角色。
上式可被视为来自元组
(
v
c
o
n
,
v
c
e
n
)
(v_{con},v_{cen})
(vcon,vcen)在嵌入域的重构信息。如果能够从嵌入域中准确推断
I
\mathcal I
I的原图信息,就可以认为提取的信息
I
\mathcal I
I是从嵌入域中被良好重构的。因此,重构
I
\mathcal I
I的概率可以建模如下:
I
′
=
R
e
c
(
I
)
=
∏
(
v
c
o
n
,
v
c
e
n
)
∈
s
e
t
(
I
)
p
(
v
c
o
n
∣
v
c
e
n
)
#
(
v
c
o
n
,
v
c
e
n
)
.
\mathcal I'=Rec( \mathcal I)=\prod_{(v_{con},v_{cen})∈set(\mathcal I)}p(v_{con}\vert v_{cen})^{\#(v_{con},v_{cen})}.
I′=Rec(I)=(vcon,vcen)∈set(I)∏p(vcon∣vcen)#(vcon,vcen).
式中,
s
e
t
(
I
)
set(\mathcal I)
set(I)表示
I
\mathcal I
I中无重复的元组集合,
#
(
v
c
o
n
,
v
c
e
n
)
\#(v_{con},v_{cen})
#(vcon,vcen)表示
I
\mathcal I
I中元组
(
v
c
o
n
,
v
c
e
n
)
(v_{con},v_{cen})
(vcon,vcen)的频次。为了确保更好的重构,需要学习映射函数的参数使得上式最大化。可以通过最小化以下目标函数学习嵌入参数
W
c
o
n
,
W
c
e
n
\boldsymbol W_{con},\boldsymbol W_{cen}
Wcon,Wcen,目标函数是上式的负对数形式。
④加速学习过程
- 分层softmax:不学习映射参数 W \boldsymbol W W,学习映射函数 f f f。
- 负采样:从那些没有出现在中心节点的上下文节点中采样 k k k个节点,形成负样本元组,目标函数是使负元组中样本节点之间的概率被最小化。
node2vec
提出了具有两个超参数
p
p
p和
q
q
q的二阶随机游走来代替DeepWalk中的随机游走来生成
I
\mathcal I
I。
式中,
d
i
s
(
v
(
t
−
1
)
,
v
(
t
+
1
)
)
dis(v^{(t-1)},v^{(t+1)})
dis(v(t−1),v(t+1))表示这两个节点之间的最短路径长度。它在决定下一个节点时,即考虑了前一个节点,又考虑了当前节点。
- p p p控制从节点 v ( t − 1 ) v^{(t-1)} v(t−1)游走到节点 v ( t ) v^{(t)} v(t)后以及重新访问节点 v ( t − 1 ) v^{(t-1)} v(t−1)的概率。较小的 p p p鼓励随机游走重新访问之前的节点,较大的 p p p会减少回溯到访问过的节点的可能性。
- q q q允许随机游走区分”向内“和“向外”节点。当 q > 1 q>1 q>1时,游走倾向于接近节点 v ( t − 1 ) v^{(t-1)} v(t−1)的节点,当 q < 1 q<1 q<1时,游走倾向于访问远离节点 v ( t − 1 ) v^{(t-1)} v(t−1)的节点。
LINE
引入了二阶相似度的概念,其目标函数可以表示如下:
式中,
E
\mathcal E
E是图
G
\ \mathcal G
G的边集。LINE与DeepWalk最大的区别在于它采用
E
\mathcal E
E而不是
I
\ \mathcal I
I作为重构信息。实际上,
E
\mathcal E
E可以看作是
I
\ \mathcal I
I的特例,其中随机游走的长度
T
\ T
T被设置为1。
以上三种网络嵌入方法还可以从矩阵分解的角度来分析。
4.2.2 保留结构角色
将彼此远离但具有相似结构角色节点投射到相似的表示中。
struc2vec
具有与DeepWalk相同的映射功能和重构器功能,但它从原图域中提取的信息是结构角色相似度,并将其用于构建新的图。新图中的边表示结构角色相似性,利用基于随机游走的算法从新图中提取共现关系。
①衡量结构角色相似度
如果两个节点的度相近,那么可以认为它们在结构上相似。此外,如果他们的邻居的度也相近,则这两个节点在结构上更加相似。两个节点之间的结构距离可以递归地定义如下:
g
k
(
v
1
,
v
2
)
=
g
k
−
1
(
v
1
,
v
2
)
+
d
i
s
(
s
(
R
k
(
v
1
)
,
s
(
R
k
(
v
2
)
)
)
.
g_k(v_1,v_2)=g_{k-1}(v_1,v_2)+dis(s(R_k(v_1),s(R_k(v_2))).
gk(v1,v2)=gk−1(v1,v2)+dis(s(Rk(v1),s(Rk(v2))).
式中,
R
k
(
v
)
R_k(v)
Rk(v)表示与节点
v
v
v相距
k
k
k跳的节点集,对
R
k
(
v
)
R_k(v)
Rk(v)中的节点进行排序,得到度序列
s
(
R
k
(
v
)
)
s(R_k(v))
s(Rk(v))。
d
i
s
(
s
(
R
k
(
v
1
)
,
s
(
R
k
(
v
2
)
)
)
⩾
0
dis(s(R_k(v_1),s(R_k(v_2)))\geqslant0
dis(s(Rk(v1),s(Rk(v2)))⩾0表示
v
1
v_1
v1和
v
2
v_2
v2度序列之间的距离,即
v
1
v_1
v1和
v
2
v_2
v2的
k
k
k跳邻居的度相似度。
DTW算法可以处理不同长度的序列,因此选择它作为距离函数
d
i
s
(
⋅
,
⋅
)
dis(·,·)
dis(⋅,⋅)。它可以找到两个序列之间的最佳匹配,使得所有配对元素之间的距离之和最小。分别来自两个序列的两个元素之间的距离按如下方式测量:
这个距离取决于两个元素的最大值和最小值之间的比率;因此, l ( 1 , 2 ) l(1, 2) l(1,2)与 l ( 100 , 101 ) \ l(100, 101) l(100,101)会被认为拥有十分不同的距离,这一性质在衡量节点的度之间的差别时十分重要。
②基于结构相似度构造新图
得到两两节点之间的结构距离后,可以构造一个多层带权图来编码节点之间的结构相似度。
设原图
G
\mathcal G
G的直径是
k
∗
k^*
k∗,可以构造一个
k
∗
k^*
k∗层图,其中第
k
k
k层建立在定义如下的权重之上:
式中,
w
k
(
u
,
v
)
w_k(u,v)
wk(u,v)表示图的第
k
k
k层的节点
u
u
u和
v
v
v之间的变得权重。距离
g
k
(
u
,
v
)
g_k(u,v)
gk(u,v)越小,节点之间的连接越强。
特别地,第
k
k
k层中的每个节点
v
v
v都连接到其在第
k
−
1
k-1
k−1层和
k
+
1
k+1
k+1层中对应的节点,层之间对应节点之间的边权重定义如下:
Γ
k
(
v
)
\Gamma_k(v)
Γk(v)度量节点
v
v
v与第
k
k
k层中其他节点的相似性。
③新图上的有偏随机游走
struc2vec提出了一种有偏随机游走算法生成一组随机游走,用于生成待重构的共现元组。引入超参数 q q q,随机游走以概率 q q q停留在同一层,并以概率 1 − q 1-q 1−q跳到另一层。
- 如果随机游走停留在同一层,从当前节点
u
u
u步入另一节点
v
v
v的概率计算如下:
Z k ( u ) Z_k(u) Zk(u)是第 k k k层节点 u u u的归一化因子,其定义如下:
- 如果决定游走到另一个图层中的与之对应的节点,则到达图层
k
+
1
k+1
k+1和图层
k
−
1
k-1
k−1的概率如下:
4.2.3 保留节点状态
节点的全局状态可以使用2.3.3节中介绍的中心性来度量。保留全局状态信息不是保留图中节点全局状态分数,而是保留它们全局状态分数的排名。
①提取器
提取器计算全局状态分数,并根据分数对节点进行排序,得到 ( v ( 1 ) , . . . , v ( N ) ) (v_{(1)},...,v_{(N)}) (v(1),...,v(N))。
②重构器
重构器用于从节点嵌入中恢复由提取器提取的排序信息。为了重构全局排序,需要保持
(
v
(
1
)
,
.
.
.
,
v
(
N
)
)
(v_{(1)},...,v_{(N)})
(v(1),...,v(N))中所有节点对的相对排序。一对节点全局排名被保留下来的概率可以通过使用节点嵌入建模为:
式中,
p
(
v
(
i
)
,
v
(
j
)
)
p(v_{(i)},v_{(j)})
p(v(i),v(j))表示节点
v
(
i
)
v_{(i)}
v(i)的排名在
v
(
j
)
v_{(j)}
v(j)之前的概率,具体来说,它被建模为:
式中,
u
(
i
)
\boldsymbol u_{(i)}
u(i)和
u
(
j
)
\boldsymbol u_{(j)}
u(j)分别表示
v
(
i
)
v_{(i)}
v(i)和
v
(
j
)
v_{(j)}
v(j)的嵌入,
w
\boldsymbol w
w是一个需要被学习的参数向量。模型期望任何有序对
(
v
(
i
)
,
v
(
j
)
)
(v_{(i)},v_{(j)})
(v(i),v(j))都应该有很高的概率,可以通过最小化以下目标函数来实现:
4.2.4 保留社区结构
社区结构是图中最突出的特征之一,有一种基于矩阵分解的方法,既保留了连接、共现等面向节点的结构,又通过模块度最大化保留了社区结构。
①保留面向节点的结构
包括节点对的连接信息、节点邻域间的相似度信息,它们都可以从给定图中提取并以矩阵的形式表示。
②提取器
节点对的连接信息被提取后被表示为邻接矩阵
A
\boldsymbol A
A的形式,邻域相似度计算如下:
节点
v
i
v_i
vi和
v
j
v_j
vj共享的邻居越多,
s
i
,
j
s_{i,j}
si,j越大;反之越小。这种邻域相似关系可以归结为一个矩阵
S
\boldsymbol S
S。
③重构器和目标
重构器旨在以
A
\boldsymbol A
A和
S
\boldsymbol S
S的形式回复这两种类型的提取信息。要同时重构它们,先将他们线性组合得到,
η
>
0
\eta>0
η>0,控制邻域相似性的重要程度:
然后,
P
\boldsymbol P
P在嵌入域被重构为:
W
c
o
n
W
c
e
n
T
\boldsymbol W_{con}\boldsymbol W_{cen}^T
WconWcenT,它们是两个映射函数
f
c
o
n
f_{con}
fcon和
f
c
e
n
f_{cen}
fcen的参数,目标可以表述如下:
式中,
∥
⋅
∥
F
\Vert ·\Vert_F
∥⋅∥F表示矩阵的Frobenius范数。
④保留社区结构
一种流行的社区检测方法是基于模块度最大值的方法。对于一个有2个社区的图,假设知道它的社区分配,则模块度的定义如下:
扩展到两个社区以上,引入分配矩阵
H
\boldsymbol H
H:
⑤总体目标
为了同时保留面向节点的结构信息和社区结构信息,引入矩阵
C
\boldsymbol C
C与
W
c
e
n
\boldsymbol W_{cen}
Wcen一起重构指示矩阵
H
\boldsymbol H
H:
4.3 复杂图的嵌入
简单总结了个表,具体实现得看书。
第五章 图神经网络
图神经网络可以看作一个关于图的特征的学习过程。
对于侧重于节点的任务来说,图神经网络模型学习每个节点的代表性特征;
对于侧重于图的任务来说,图神经网络模型学习整个图的代表性特征,而学习节点特征通常是它的一个中间步骤。
-
图滤波:以节点特征和图结构作为输入、以一组新的节点特征作为输出的过程。只改变节点特征而不会改变图结构。
学习节点特征( F ( o f ) \bold F^{(\rm of)} F(of))的过程可以概括如下,要用到节点的输入特征( F ( i f ) \bold F^{(\rm if)} F(if))和图结构( A \bold A A):
F ( o f ) = h ( A , F ( i f ) ) . \bold F^{(\rm of)}=h(\bold A,\bold F^{(\rm if)}). F(of)=h(A,F(if)).
上式中的 o f \rm of of和 i f \rm if if分别表示滤波过程中的输出和输入(output/input),算子 h ( ⋅ ) h(·) h(⋅)被称为图滤波器或者卷积算子。 -
池化:汇总节点特征以生成图特征。图的池化操作利用图结构信息指导池化过程,生成粗化图的图结构(或邻接矩阵)及其节点特征:
A ( o p ) , F ( o p ) = p o o l ( A ( i p ) , F ( i p ) ) . \bold A^{(\rm op)},\bold F^{(\rm op)}=\rm pool(\bold A^{(\rm ip)},\bold F^{(\rm ip)}). A(op),F(op)=pool(A(ip),F(ip)).
5.2 图神经网络基本框架
5.2.1 侧重于节点的任务
对于侧重于节点的任务,基本框架是图滤波层和非线性激活层的组合,前一层的输出作为下一层的输入。
第
i
i
i层图滤波层可被描述为,式中
α
(
)
\alpha()
α()表示第
(
i
−
1
)
(i-1)
(i−1)个图滤波层之后的逐元素应用的激活函数:
F
(
i
)
=
h
i
(
A
,
α
i
−
1
(
F
(
i
−
1
)
)
)
.
\bold F^{(i)}=h_i(\bold A,\alpha_{i-1}(\bold F^{(i-1)})).
F(i)=hi(A,αi−1(F(i−1))).
5.2.2 侧重于图的任务
对于侧重于图的任务,基本框架分为三部分:图滤波层、激活层和图池化层,这些层的组合被称作块(block)。
一个块的输出被用作下一个连续块的输入,含有
L
L
L个块的图神经网络框架的计算过程可被表示为,:
A
(
j
)
,
F
(
j
)
=
B
(
j
)
(
A
(
j
−
1
)
,
F
(
j
−
1
)
)
,
j
=
1
,
.
.
.
,
L
.
\bold A^{(j)},\bold F^{(j)}=B^{(j)}(\bold A^{(j-1)},\bold F^{(j-1)}),\ \ \ \ \ \ \ \ j=1,...,L.
A(j),F(j)=B(j)(A(j−1),F(j−1)), j=1,...,L.
5.3 图滤波器
5.3.1 基于谱的图滤波器
图谱滤波:调制图信号的频率,使得其中一些频率分量被保留或放大,而另一些频率分量被移除或减小。
滤波的过程可视为将算子
U
g
^
(
Λ
)
U
T
U\hat g(\Lambda)U^{\rm T}
Ug^(Λ)UT应用于输入的图信号
f
f
f。其中,函数
g
^
(
Λ
)
\hat g(\Lambda)
g^(Λ)被称为滤波器。
滤波器建模 | 优点 | 局限 | |
---|---|---|---|
Poly-Filter | K阶截断多项式 | 计算时不需要特征分解,卷积算子在空间域是局部化的 | 多项式的基彼此不正交,系数相互依赖,学习过程中受到扰动时不稳定 |
Cheby-Filter | 具有一组正交基的切比雪夫多项式 | 在扰动下表现得更稳定 | 计算一个节点的新表征时,会涉及该节点的K跳邻域 |
GCN-Filter | 切比雪夫多项式的阶设为1 | 更新节点特征时只涉及与其直接相邻的邻居 | Cheby-Filter简化版 |
以上为单通道图信号引入了图滤波器,其中每个节点都与单个标量值相关联。实践中,图信号通常是多通道的,即其中每个节点对应一个特征向量。可以将多通道图信号的图滤波器视为在每个通道中应用图滤波器。
5.3.2 基于空间的图滤波器
方法 | |
---|---|
GraphSAGE | SAMPLE+ AGGREGATE(Mean、LSTM、Pooling) |
GAT-Filter | 与GCN-Filter相似,聚合时区分邻居的重要性 |
ECC-Filter | 利用边信息设计图滤波器 |
GGNN-Filter | 为具有不同类型的有向边的图设计 |
Mo-Filter | 引入混合模型网络,用于对图和流形等非欧几里得数据进行卷积计算 |
MPNN | 基于空间的图滤波器的通用框架 |
5.4 图池化
-
平面图池化:直接从节点表示生成图级表示。该层中不会生成新的图,而是生成一个节点。
-
层次图池化:逐步粗化图直到得到图的表示,从而保留图的层次结构信息。
-
通过降采样选择最重要的节点作为粗化图的节点来获得粗化图。(保留了原图中的节点)
1)选择降采样度量方法;2)为粗化图生成图结构;3)为粗化图生成节点特征。
- gPool层:第一个采用降采样策略对图进行粗化。
-
聚集输入图中的多个节点以形成粗化图的一个超节点。(生成了新的节点)
1)生成超节点作为粗化图的节点;2)生成粗化图的图结构;3)生成粗化图的节点特征。
- DiffPool:以可微的过程生成超节点。
- EigenPooling:采用谱聚类的方法生成超节点,在此基础上形成粗化图的图结构和节点特征。
-
5.5 图卷积神经网络的参数学习
-
节点分类:GNN模型通常将整个图作为输入生成节点表示,然后利用这些表示来训练节点分类器, Θ \Theta Θ表示模型参数, Z \bold Z Z表示输出的节点类别概率矩阵。
F ( o u t ) = G N N n o d e ( A , F ; Θ 1 ) \bold F^{\rm (out)}=\rm GNN_{node}(\bold A,\bold F;\bold \Theta_1) F(out)=GNNnode(A,F;Θ1)
Z = S o f t m a x ( F ( o u t ) ; Θ 2 ) \bold Z=\rm Softmax(\bold F^{\rm (out)};\bold \Theta_2) Z=Softmax(F(out);Θ2)
L t r a i n = Σ v i ∈ V l l ( f G N N ( A , F ; Θ ) i , y i ) \mathcal L_{train}=\Sigma_{v_i∈\mathcal V_l}l(f_{GNN}(\bold A,\bold F;\bold \Theta)_i,y_i) Ltrain=Σvi∈Vll(fGNN(A,F;Θ)i,yi) -
图分类:GNN模型通常被用作特征编码器,将输入图映射为特征表示,再将图级表示用于进行图分类。 z G z_{\mathcal G} zG表示输入图的预测概率。
f G = G N N g r a p h ( G ; Θ 1 ) \bold f_{\mathcal G}=\rm GNN_{graph}(\mathcal G;\bold \Theta_1) fG=GNNgraph(G;Θ1)
z G = S o f t m a x ( f G Θ 2 ) z_{\mathcal G}=\rm Softmax(\bold f_{\mathcal G}\bold \Theta_2) zG=Softmax(fGΘ2)
L t r a i n = Σ G i ∈ D l ( f G N N ( G i ; Θ ) i , y i ) \mathcal L_{train}=\Sigma_{\mathcal G_i∈\mathcal D}l(f_{GNN}(\mathcal G_i;\bold \Theta)_i,y_i) Ltrain=ΣGi∈Dl(fGNN(Gi;Θ)i,yi)