零基础入门图神经网络
一、图理论简介
在常用的深度学习应用中,我们主要接触的数据形式主要是:矩阵、张量、序列(sequence)和时间序列(time series),这些都是规则的结构化的数据。而图数据不规则且非结构化,它具有以下特点:
- 大小任意,拓扑结构复杂;
- 没有固定的节点排序或参考点;
- 通常是动态的,并具有多模态特征;
- 图的信息并非只蕴含在节点和边的信息中,还包括了其拓扑结构。
图数据的一般形式为
G
=
{
V
,
E
}
G=\{V,E\}
G={V,E}
其中
V
=
{
v
1
,
⋯
,
v
N
}
V=\{v_1,\cdots,v_N\}
V={v1,⋯,vN}是数量为
N
=
∣
V
∣
N=\lvert V \rvert
N=∣V∣的节点(node/vertex)的集合,而
E
=
{
e
1
,
⋯
,
e
M
}
E=\{e_1,\cdots,e_M\}
E={e1,⋯,eM}是数量为
M
M
M的边(edge/link)的集合。
根据图数据 G = { V , E } G=\{V,E\} G={V,E}中边的指向性,可以将图数据分为有向图(directed graph)和无向图(undirected graph)。
根据图 G G G中边的权重是否全为1,可以分类为有权图(weighted graph)和无权图(unweighted graph)。
对于图 G = { V , E } G=\{V,E\} G={V,E},其节点 v i v_i vi的邻接节点(neighbors)是与其直接相连的节点,记为 N ( v i ) N(v_i) N(vi)。节点 v i v_i vi的 k k k跳邻接节点(neighbors with k-hop)是到节点 v i v_i vi要走k步的节点。
图的邻接矩阵(adjacency matrix) A A A是一个 N × N N\times N N×N的矩阵,其中 A i j A_{ij} Aij表示节点 v i v_i vi和节点 v j v_j vj之间是否存在边,若存在边,则 A i j = 1 A_{ij}=1 Aij=1,否则 A i j = 0 A_{ij}=0 Aij=0。对于有权图,邻接矩阵 A A A常记为 W W W,其中 W i j W_{ij} Wij表示边 e i j e_{ij} eij的权重 w i j w_{ij} wij。
节点 v i v_i vi的度(degree)记为 d ( v i ) d(v_i) d(vi),也记作 d e g ( v i ) deg(v_i) deg(vi),分为入度 d i n ( v i ) d_{in}(v_i) din(vi)(in-degree)和出度 d o u t ( v i ) d_{out}(v_i) dout(vi)(out-degree)。其中,入度 d i n ( v i ) d_{in}(v_i) din(vi)表示从 v i v_i vi出发的边的权重之和,出度 d o u t ( v i ) d_{out}(v_i) dout(vi)表示连向 v i v_i vi的边的权重之和。对于无向图,节点的入度 d i n ( v i ) d_{in}(v_i) din(vi)=出度 d o u t ( v i ) d_{out}(v_i) dout(vi);对于无权图,各边的权重为1,则节点的入度 d i n ( v i ) d_{in}(v_i) din(vi)为连向 v i v_i vi的边的数量,出度 d o u t ( v i ) d_{out}(v_i) dout(vi)表示连向 v i v_i vi的边的数量。
对于无向无权图,节点
v
i
v_i
vi的度
d
(
v
i
)
d(v_i)
d(vi)为邻接节点的数量,其度矩阵记为
D
D
D,满足
D
=
∣
N
(
v
)
∣
D=\lvert N(v) \rvert
D=∣N(v)∣,有
D
=
[
d
(
v
1
)
0
⋯
0
0
d
(
v
2
)
⋯
0
⋮
⋮
⋱
⋮
0
0
⋯
d
(
v
N
)
]
D= \left[ \begin{matrix} d(v_1) & 0 & \cdots & 0 \\ 0 & d(v_2) & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & d(v_N) \\ \end{matrix} \right]
D=
d(v1)0⋮00d(v2)⋮0⋯⋯⋱⋯00⋮d(vN)
对于图
G
=
{
V
,
E
}
G=\{V,E\}
G={V,E},拉普拉斯矩阵(laplacian matrix/admittance matrix/Kirchhoff matrix)记为
L
L
L,有
L
=
D
−
A
L=D-A
L=D−A
其中,
D
D
D为节点的度矩阵,
A
A
A为邻接矩阵。对于其中的每个元素
L
i
j
L_{ij}
Lij,其含义为:在节点
v
i
v_i
vi和节点
v
j
v_j
vj之间,若存在边
e
i
j
e_{ij}
eij,则
L
i
j
=
w
i
j
L_{ij}=w_{ij}
Lij=wij,否则
L
i
j
=
0
L_{ij}=0
Lij=0。
进一步,定义图
G
=
{
V
,
E
}
G=\{V,E\}
G={V,E}的标准化(规范化/归一化)的拉普拉斯矩阵为
L
=
D
−
1
/
2
(
D
−
A
)
D
−
1
/
2
=
I
−
D
−
1
/
2
A
D
−
1
/
2
\begin{aligned} L&=D^{-1/2}(D-A)D^{-1/2}\\ &=I-D^{-1/2}AD^{-1/2} \end{aligned}
L=D−1/2(D−A)D−1/2=I−D−1/2AD−1/2
二、图网络基础理论
对于图像数据,其具有平移不变性,使用卷积核来提取特征。卷积核的滑动窗口无论移动到哪个位置,其内部的结构都是相同,因此CNN可以实现参数共享。RNN主要用于文本等序列信息。图片、文本,都属于欧式空间数据,有维度的概念,欧式空间的数据结构都很规则。
图结构(拓扑结构)如社交网络、知识图谱、分子结构等数据结构十分不规则,其每个节点的局部结构可能都是独一无二的。图结构可以认为是无限维的,且不具有平移不变性。
常用的神经网络CNN基于卷积操作提取信息,这属于一种聚合算子。当前的图神经网络GNN领域,研究重点是如何在网络上构建聚合算子,用于刻画节点的局部结构。现有的聚合算子构建方式分为两类:
- 谱域方法:基于图像卷积定理,在谱域定义图卷积。这种方法先将图进行傅里叶变化,在谱域完成卷积操作,然后再将频域信号转换回原域。主要包括谱卷积神经网络、切比雪夫网络和谱域图卷积神经网络。
- 空间域方法:从邻接节点信息聚合的角度出发,更加注重节点的局域环境。这种方法在节点层面定义聚合函数来提取每个中心节点及其邻近节点的信息。主要包括空域图卷积神经网络、GraphSAGE和图注意力网络。
1.谱域图卷积神经网络
谱域方法的主要思路是对图的拉普拉斯矩阵
L
L
L做谱分解,有
L
=
U
Λ
U
T
L=U \Lambda U^T
L=UΛUT
图
G
=
{
V
,
E
}
G=\{V,E\}
G={V,E}的傅里叶变换基于拉普拉斯矩阵
L
L
L的特征向量来定义。图
G
G
G的信号
x
x
x的傅里叶变换为
x
^
=
U
T
x
\widehat{x}=U^T x
x
=UTx
其中
x
^
\widehat{x}
x
是
x
x
x对应的谱域信息。
x
x
x的逆傅里叶变换为
x
=
U
x
^
x=U \widehat{x}
x=Ux
定义谱域的卷积核为
g
θ
(
Λ
)
g_\theta(\Lambda)
gθ(Λ),最终可给出谱卷积神经网络(Spectral Convolutional Neural Network)的结构
H
(
l
+
1
)
=
σ
(
g
θ
(
U
Λ
U
T
)
H
(
l
)
)
=
σ
(
g
θ
(
L
)
H
(
l
)
)
\begin{aligned} H^{(l+1)}&=\sigma\left(g_\theta\left(U \Lambda U^T\right) H^{(l)}\right) \\ &= \sigma\left(g_\theta\left( L \right) H^{(l)}\right) \end{aligned}
H(l+1)=σ(gθ(UΛUT)H(l))=σ(gθ(L)H(l))
其中
H
(
l
)
H^{(l)}
H(l)为第
l
l
l层的节点特征。
对于拉普拉斯矩阵
L
L
L,可以将其展开成为多项式形式
p
w
(
L
)
=
w
0
I
n
+
w
1
L
+
w
2
L
2
+
⋯
+
w
d
L
d
=
∑
i
=
0
d
w
i
L
i
\begin{aligned} p_w(L)&=w_0 I_n + w_1 L + w_2 L^2 + \cdots + w_d L^d \\ &= \sum_{i=0}^{d} w_i L^i \end{aligned}
pw(L)=w0In+w1L+w2L2+⋯+wdLd=i=0∑dwiLi
下图展示特殊形式的谱卷积的正向传播过程
切比雪夫网络定义卷积核为参数化形式
g
θ
=
∑
i
=
0
K
−
1
θ
k
T
k
(
Λ
^
)
g_\theta=\sum_{i=0}^{K-1} \theta_k T_k(\widehat{\Lambda})
gθ=i=0∑K−1θkTk(Λ
)
其中
θ
k
\theta_k
θk是网络需要学习的系数,定义
Λ
^
=
2
Λ
λ
m
a
x
−
I
n
\widehat{\Lambda}=\frac{2\Lambda}{\lambda_{max}}-I_n
Λ
=λmax2Λ−In。
T
k
T_k
Tk是切比雪夫多项式,通过递归形式求解,定义为
T
0
(
x
)
=
1
T_0(x)=1
T0(x)=1,
T
1
(
x
)
=
x
T_1(x)=x
T1(x)=x,
T
k
+
1
(
x
)
=
2
x
⋅
T
k
(
x
)
−
T
k
−
1
(
x
)
T_{k+1}(x)=2x \cdot T_k(x)-T_{k-1}(x)
Tk+1(x)=2x⋅Tk(x)−Tk−1(x)。
令
L
^
=
2
L
λ
m
a
x
−
I
n
\widehat{L}=\frac{2 L}{\lambda_{max}}-I_n
L
=λmax2L−In,定义切比雪夫网络的第
l
l
l层的结构为
H
(
l
+
1
)
=
σ
(
U
(
∑
k
=
0
K
−
1
θ
k
T
k
(
Λ
^
)
)
U
⊤
H
(
l
)
)
=
σ
(
∑
k
=
0
K
−
1
θ
k
T
k
(
L
^
)
H
(
l
)
)
\begin{aligned} H^{(l+1)} &= \sigma \left( U \left( \sum_{k=0}^{K-1} \theta_k T_k (\hat{Λ}) \right) U^\top H^{(l)} \right)\\ &= \sigma \left( \sum_{k=0}^{K-1} \theta_k T_k (\hat{L}) H^{(l)} \right) \end{aligned}
H(l+1)=σ(U(k=0∑K−1θkTk(Λ^))U⊤H(l))=σ(k=0∑K−1θkTk(L^)H(l))
相应的谱域的图卷积神经网络(Graph Convolutional Network, GCN)对切比雪夫网络进行了简化,只取0阶和1阶,形式如下
y
=
g
θ
(
L
)
x
=
∑
i
=
0
1
θ
k
T
k
(
Λ
^
)
⋅
x
=
θ
0
x
+
θ
1
L
^
x
\begin{aligned} y&=g_\theta(L)x\\ &=\sum_{i=0}^{1} \theta_k T_k(\widehat{\Lambda}) \cdot x\\ &=\theta_0 x + \theta_1 \widehat{L} x \end{aligned}
y=gθ(L)x=i=0∑1θkTk(Λ
)⋅x=θ0x+θ1L
x
代入
L
^
=
2
L
λ
m
a
x
−
I
n
\widehat{L}=\frac{2 L}{\lambda_{max}}-I_n
L
=λmax2L−In以及
λ
m
a
x
=
2
\lambda_{max}=2
λmax=2,可得
y
=
θ
0
x
+
θ
1
(
L
−
I
)
x
y=\theta_0 x + \theta_1 \left( L-I \right) x
y=θ0x+θ1(L−I)x
对于标准化后的拉普拉斯矩阵
L
=
I
−
D
−
1
/
2
A
D
−
1
/
2
L=I-D^{-1/2}AD^{-1/2}
L=I−D−1/2AD−1/2,令
θ
=
θ
0
=
−
θ
1
\theta=\theta_0=-\theta_1
θ=θ0=−θ1,有
y
=
θ
x
+
θ
(
D
−
1
/
2
A
D
−
1
/
2
)
x
=
θ
(
I
+
D
−
1
/
2
A
D
−
1
/
2
)
x
\begin{aligned} y&=\theta x + \theta \left( D^{-1/2}AD^{-1/2} \right) x \\ &= \theta \left( I+D^{-1/2}AD^{-1/2} \right) x \end{aligned}
y=θx+θ(D−1/2AD−1/2)x=θ(I+D−1/2AD−1/2)x
定义
D
~
−
1
/
2
A
~
D
~
−
1
/
2
=
I
+
D
−
1
/
2
A
D
−
1
/
2
\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2}=I+D^{-1/2}AD^{-1/2}
D~−1/2A~D~−1/2=I+D−1/2AD−1/2,令
θ
\theta
θ为
W
W
W。最终,谱域图卷积神经网络GCN结构定义为
H
(
l
+
1
)
=
σ
(
D
~
−
1
/
2
A
~
D
~
−
1
/
2
H
(
l
)
W
(
l
)
)
H^{(l+1)}=\sigma\left(\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2} H^{(l)} W^{(l)}\right)
H(l+1)=σ(D~−1/2A~D~−1/2H(l)W(l))
2.空域图卷积神经网络
在谱域方法中,采用傅里叶卷积定义卷积。而在空域中,则是从邻接节点信息聚合的角度出发定义卷积,更加注重节点的局部空间信息。
空域中的卷积需要满足对节点及其邻接节点的信息进行转换(transformation)、聚合(aggregation)的操作。参考CNN中卷积的形式,进而可以给出节点
v
v
v对应的图卷积网络的正向传播方式为
h
v
(
l
+
1
)
=
σ
(
W
l
∑
u
∈
N
(
v
)
h
u
(
l
)
∣
N
(
v
)
∣
+
h
v
(
l
)
B
(
l
)
)
h_{v}^{(l+1)}=\sigma\left(W^{l} \sum_{u \in N(v)} \frac{h_{u}^{(l)}}{|N(v)|}+h_{v}^{(l)} B^{(l)}\right)
hv(l+1)=σ
Wlu∈N(v)∑∣N(v)∣hu(l)+hv(l)B(l)
由于
D
=
∣
N
(
v
)
∣
D=\lvert N(v) \rvert
D=∣N(v)∣,因此
D
−
1
=
1
∣
N
(
v
)
∣
D^{-1}=\frac{1}{\lvert N(v) \rvert}
D−1=∣N(v)∣1,因此可以将
∑
u
∈
N
(
v
)
h
u
(
l
)
∣
N
(
v
)
∣
\sum_{u \in N(v)} \frac{h_{u}^{(l)}}{|N(v)|}
∑u∈N(v)∣N(v)∣hu(l)写为
D
−
1
A
H
(
l
)
D^{-1}AH^{(l)}
D−1AH(l)。最终,可以将上式写成如下形式
H
(
l
+
1
)
=
σ
(
D
~
−
1
/
2
A
~
D
~
−
1
/
2
H
(
l
)
W
(
l
)
+
H
(
l
)
B
(
l
)
)
H^{(l+1)}=\sigma\left(\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2} H^{(l)} W^{(l)} + H^{(l)} B^{(l)}\right)
H(l+1)=σ(D~−1/2A~D~−1/2H(l)W(l)+H(l)B(l))
可以发现,空域与谱域的图卷积神经网络形式统一。式中提出
H
(
l
)
B
(
l
)
H^{(l)} B^{(l)}
H(l)B(l)的作用是强调空域GCN对自身节点和邻接节点都进行了信息转换和聚合。若定义
W
W
W包含自身节点的相关操作,则空域与谱域的GCN公式完全一致。
GCN有两个主要缺点:①GCN采用全图训练的方式,每一轮的迭代都要对全图的节点进行更新,将整个图放到内存和显存中,这会占用大量资源,当图的规模很大时,这种训练方式无疑是很耗时甚至无法更新的;②GCN在训练时需要知道整个图的结构信息(包括待预测的节点), 这在现实中的某些任务无法实现,如无法预测包含未知信息的图(如新的节点)。
三、经典的图网络
1.GraphSAGE(Graph Sample and Aggregate)
学界将GCN归纳为Transductive Learning方法,训练阶段与测试阶段都基于同样的(图)结构,对于新的节点,需要对整张图重新进行训练。而现实中遇到的大多数机器学习方法是Inductive Learning方法,即训练阶段与测试阶段的(图)结构不同。要想得到新节点的嵌入表示,需要让新的节点或子图与已经优化好的节点Embedding做对齐。然而每个节点的嵌入表示都受到其他节点的影响(牵一发而动全身),因此每添加一个节点,都意味着需要对许多与之相关的节点的表示进行调整。
GraphSAGE是属于Inductive Learning的一种方法,它的训练阶段通常在子图(Subgraph)上进行,测试阶段需要处理未知的节点。GraphSAGE的全称是Graph Sample and Aggregate,包含采样(Sample)和聚合(Aggregate)两大步骤,对邻接节点采样,并逐层聚合相应节点Embedding,最终更新自身的节点信息。它的效果如下所示
GraphSAGE的前向传播算法如下所示。Embedding Generation共聚合K次,对应K个聚合函数(Aggregator),可以认为是聚合K层邻接节点的信息。算法中用 h v 0 h_v^{0} hv0代表节点 v v v的初始Embedding表示, h v k h_v^{k} hvk表示当前节点 v v v在第 k k k层中每个节点的Embedding表示。在聚合过程中,将随机采样的若干个邻接节点、自身节点的 k − 1 k-1 k−1层的Embedding表示进行聚合,得到 h v k h_v^{k} hvk。随着层数 k k k的增加,可以聚合到离节点 v v v越来越远的节点的信息,聚合 k k k层相当于用到了 k k k跳邻接节点的信息。
在更新节点的过程中,每层网络中的聚合器、权重矩阵都是参数共享的。
GraphSAGE的采样(Sample)过程通过定长抽样的方法进行,即每次采样固定数量的节点。在采样的过程中,对于每个节点 v v v,进行有放回的重采样/负采样方法得到不超过 S S S个邻接节点 { u 1 , ⋯ , u S ∣ u i ∈ N ( v ) } \{u_1, \cdots , u_S \vert u_i \in N(v)\} {u1,⋯,uS∣ui∈N(v)},保证每个节点 v v v的采样的邻接节点数量一致,进而可以把节点及其邻接节点拼接成Tensor送入GPU训练,提高效率。
GraphSAGE的聚合(Aggregate)用到的聚合器/聚合函数主要有3种:Mean Aggregator、Pooling Aggregator和LSTM Aggregator。GraphSAGE的参数就是聚合函数的参数,分为有监督、无监督两种学习方式。有监督的情况下,使用每个节点的预测lable和真实lable的交叉熵作为损失函数;在无监督的情况下,假设相邻的节点的embedding表示尽可能相近来构造损失函数。
GraphSAGE有若干优点:①利用采样机制,解决了GCN必须要知道全部图的信息问题,即使对于未知的新节点也能得到其表示,且克服了GCN训练时内存和显存的限制,极大减少了计算量;②聚合器和权重矩阵的参数对于所有的节点是共享的;③模型的参数量与图的节点数无关,这使得GraphSAGE能够处理更大的图;④既能处理有监督任务也能处理无监督任务。
2.GAT(Graph Attention Network)
基于图卷积网络GCN的构建方式可以发现,对于图 G = { V , E } G=\{V,E\} G={V,E},GCN在进行信息聚合时没有考虑边E的权重,而仅将图G作为无权图处理。GAT的目的是引入注意力机制,学习边的权重(每个顶点与其邻接节点的注意力系数),聚合节点的局部信息,使得节点之间的信息传递更加灵活和可控。
GAT 包含多个图注意力层,每一层中需要计算目标节点
v
i
v_i
vi的一跳邻居节点
v
j
v_j
vj的注意力权重
e
i
j
e_{ij}
eij。首先需要将即节点特征
h
i
h_i
hi和
h
j
h_j
hj通过
W
W
W映射到一个高维空间,然后将这两个向量拼接(
∥
\Vert
∥)在一起,之后通过一个全连接层
a
f
c
a_{fc}
afc将拼接后的向量映射到一个标量,再应用LeakyReLU激活函数得到注意力系数
e
i
j
e_{ij}
eij,计算公式如下:
e
i
j
=
L
e
a
k
y
R
e
L
U
(
a
f
c
(
W
h
i
∥
W
h
j
)
)
e_{ij} = LeakyReLU \left( a_{fc} \left(W h_i \Vert W h_j\right) \right)
eij=LeakyReLU(afc(Whi∥Whj))
其中激活函数
L
e
a
k
y
R
e
L
U
(
x
)
=
max
(
x
,
0.01
x
)
LeakyReLU(x)=\max(x, 0.01 x)
LeakyReLU(x)=max(x,0.01x),
a
f
c
a_{fc}
afc是参数共享的。通过Softmax对注意力系数
e
i
j
e_{ij}
eij进行归一化得
α
i
j
\alpha_{ij}
αij
α
i
j
=
s
o
f
t
m
a
x
j
(
e
i
j
)
=
exp
(
e
i
j
)
∑
k
∈
N
(
i
)
exp
(
e
i
k
)
\alpha_{ij} = softmax_j(e_{ij}) = \frac{\exp(e_{ij})}{\sum_{k \in N(i)} \exp(e_{ik})}
αij=softmaxj(eij)=∑k∈N(i)exp(eik)exp(eij)
最后通过非线性激活函数
σ
\sigma
σ可得节点特征
h
i
′
=
σ
(
∑
j
∈
N
(
i
)
α
i
j
W
h
j
)
h_i^{\prime} = \sigma \left( \sum_{j \in N(i)} \alpha_{ij} W h_j \right)
hi′=σ
j∈N(i)∑αijWhj
为了增强模型的表达能力和稳定性,可以使用多头注意力对每个目标节点执行
K
K
K次独立的单头注意力计算。首先,需要使用
K
K
K个
W
k
W^k
Wk将原特征进行映射到
K
K
K个不同的高维空间,然后重复上述单头注意力的计算步骤,得到
K
K
K个归一化后的注意力系数
α
i
j
k
\alpha_{ij}^k
αijk,之后对这
K
K
K组注意力系数和特征进行线性组合,最后再拼接这些特征得到最终的节点特征
h
i
′
=
c
o
n
c
a
t
(
h
i
1
′
,
⋯
,
h
i
K
′
)
=
c
o
n
c
a
t
k
=
1
K
(
σ
(
∑
j
∈
N
(
i
)
α
i
j
k
W
k
h
j
)
)
\begin{aligned} h_i^{\prime} &= concat(h_{i1}^{\prime}, \cdots, h_{iK}^{\prime}) \\ &= concat_{k=1}^K \left( \sigma \left( \sum_{j \in N(i)} \alpha_{ij}^k W^k h_j \right) \right) \end{aligned}
hi′=concat(hi1′,⋯,hiK′)=concatk=1K
σ
j∈N(i)∑αijkWkhj
也可对这些特征求平均得到最终的节点特征
h
i
′
=
σ
(
1
K
∑
k
=
1
K
∑
j
∈
N
(
i
)
α
i
j
k
W
k
h
j
)
h_i^{\prime} = \sigma \left( \frac{1}{K} \sum_{k=1}^K \sum_{j \in N(i)} \alpha_{ij}^k W^k h_j \right)
hi′=σ
K1k=1∑Kj∈N(i)∑αijkWkhj
下图展示了3头图注意力的计算过程:每一个邻居节点 h j h_j hj需要与中心节点 h 1 h_1 h1计算注意力系数,不同的颜色表示不同的计算过程(3种颜色代表3个头)。最后经过加权求和、拼接/取平均后得到最终的目标节点特征 h 1 ′ h_1^{\prime} h1′。
GAT的主要优点有:①GAT由于其逐顶点(node-wise)的运算方式,每次运算都需要遍历图上的所有顶点来完成。这种运算使得顶点特征之间的相关性被更好地融入到模型中,也意味着不需用到拉普拉斯矩阵 L L L,因此GAT适用于有向图;②训练GAT仅需直到邻接节点的信息,无需了解整张图的结构;③计算速度快,可以在不同节点上并行计算;④由于GAT结构的特性,无需使用预先构建好的图,因此GAT既适用于Transductive Learning,又适用于Inductive Learning。原文的实验结果表明,GAT在两种任务中的效果都要优于传统方法。
四、图数据常用Python库
在Python中,常用的处理图数据、构建图网络的库有NetworkX、DGL、PyG。
- NetworkX:NetworkX是一个用于创建、操作和研究复杂网络结构的Python库。该库支持多种图类型(有向图、无向图、加权图等),提供了丰富的图算法和分析工具。NetworkX适用于中小型图数据的处理和分析。
- Deep Graph Library(DGL):DGL是一个用于图神经网络(GNN)的框架,支持TensorFlow和PyTorch等深度学习框架。该库提供高效的图数据表示和操作,支持大规模图数据的训练和推理。DGL适用于大规模图数据的深度学习任务,如节点分类、链接预测等。
- PyTorch Geometric(PyG):PyG是一个基于PyTorch的图神经网络库,主要用于图数据的深度学习。该库提供了丰富的图神经网络模型和数据处理工具,支持动态图和静态图。PyG适用于图数据的深度学习任务,特别是需要高度定制化的模型和数据处理流程。
参考
- 图深度学习(葡萄书)
- 硬核!一文梳理经典图网络模型
- 图神经网络从入门到入门
- 有史以来最好的图神经网络科普
- A Gentle Introduction to Graph Neural Networks
- Understanding Convolutions on Graphs
- Graph Representation Learning
- PGL图学习之图神经网络GraphSAGE、GIN图采样算法[系列七]
- 图神经网络开山之作GCN《Semi-Supervised Classification with Graph Convolutional Networks》
- GraphSAGE论文《Inductive Representation Learning on Large Graphs》
- GAT论文《Graph Attention Networks》