图神经网络导论与环境配置(pyG)
引言
在深度学习的输入数据形式当中,我们常见到的就是矩阵、张量(如计算机视觉中的像素点)还有序列(文字、语言等自然语言处理)。但在现实生活中的数据格式多种多样,我们很难将所有数据保存成“网格点”的 形式。图,作为一种储存数据的结构更容易将某些数据进行储存(如知识图谱,化学分子的结构,交通网络等等)。深度学习或者说神经网络在图上的应用,可以使我们挖掘更深层的知识,用于我们的目标任务。
然而图数据是非规则的非结构化的,它具有以下的特点:
- 任意的大小和复杂的拓扑结构;
- 没有固定的节点排序或参考点;
- 通常是动态的,并具有多模态的特征;
- 图的信息并非只蕴含在节点信息和边的信息中,图的信息还包括了图的拓扑结构。
简单图论
重要知识 ----(图):
一个图被记为
G
=
V
,
E
\mathcal{G}={\mathcal{V}, \mathcal{E}}
G=V,E,其中
V
{\mathcal{V}}
V表示数量为N的节点的集合,
E
\mathcal{E}
E表示数量为M条边的集合
节点和边的信息可以是类别型的(categorical),类别型数据的取值只能是哪一类别。一般称类别型的信息为标签(label)。
节点和边的信息可以是数值型的(numeric),数值型数据的取值范围为实数。一般称数值型的信息为属性(attribute)。
在图的计算任务中,我们认为,节点一定含有信息(至少含有节点的度的信息),边可能含有信息。
以化学分子为例:每一个原子可以看做是图上的一个节点,原子间相连的键看做为图上的边。那么节点的标签为我们的节点到底是哪一个原子,C原子还是H原子…边的标签也可以分为图的边是共价键还是离子键等等。同时原子(节点)也拥有属性,即C原子的分子量、带电荷数、化合价等信息,键(边)也可以拥有属性,即其长短,强度等等。
重要知识二 ----(邻接矩阵):
给定一个图
G
=
V
,
E
\mathcal{G}={\mathcal{V}, \mathcal{E}}
G=V,E,其对应的邻接矩阵被记为
A
∈
0
,
1
N
×
N
\mathbf{A} \in{0,1}^{N \times N}
A∈0,1N×N。
A
i
,
j
=
1
\mathbf{A}_{i, j}=1
Ai,j=1表示存在从节点
v
i
v_i
vi到
v
j
v_j
vj的边,反之表示不存在从节点
v
i
v_i
vi到
v
j
v_j
vj的边。形如:
邻接矩阵的行和列为其所有的节点,若两节点相邻为一不相邻为0,这是邻接矩阵的常用格式。但邻接矩阵可以被用户所定义在【0,1】之间,表达对该节点相邻的重要程度
重要知识三 ----(度矩阵与拉普拉斯矩阵)
D
{D}
D是度矩阵,可以理解为与节点相连的边的个数
D
=
d
i
a
g
(
d
(
v
1
)
,
⋯
,
d
(
v
N
)
)
\mathbf{D=diag(d(v_1), \cdots, d(v_N))}
D=diag(d(v1),⋯,d(vN))
给定一个图
G
=
V
,
E
\mathcal{G}={\mathcal{V}, \mathcal{E}}
G=V,E,其邻接矩阵为
A
A
A,其拉普拉斯矩阵定义为
L
=
D
−
A
\mathbf{L=D-A}
L=D−A。
重要知识四 ----(图的种类)
同质图(Homogeneous Graph):只有一种类型的节点和一种类型的边的图。
同样以化学分子为例,表示一个完全连接的分子在一张图上,称为同质图。
异质图(Heterogeneous Graph):存在多种类型的节点和多种类型的边的图。
在一张图上表示多个化学分子(每个分子中原子节点类型不同即多种类型的节点),这些化学分子之间彼此又成键了,即多种类型的边。
二部图(Bipartite Graphs):节点分为两类,只有不同类的节点之间存在边。
(有机会再讨论,基本只讨论同质图和异质图)
图结构数据上的机器学习任务
配置环境(linux)
首先创建一个名为pyG的虚拟环境
$ conda create -n pyG python=3.7
激活该虚拟环境
$ source activate pgG
1、安装torch(推荐1.8.0以下,因为有对应的 wheel.
$ pip install torch===1.8.0
2、安装依赖包及torch-geometric
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-geometric
此处${TORCH}对应于你的torch版本 , ${CUDA}对应你CUDA版本
本人的cuda版本太低故装cpu版(版本号如何选择见wheel.)
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html
pip install torch-geometric
3、检查安装结果
(pgG) [zou@gpu22 makeNew]$ python
Python 3.7.10 (default, Jun 4 2021, 14:48:32)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> import torch_geometric
不显示no Module 就没有问题了,有时候会显示warning说你的cuda版本太低,但由于装的是cpu版,不会有问题。