图网络入门
https://distill.pub/2021/gnn-intro/
- 图的矩阵表示
- 邻接矩阵
- 邻接表:稀疏性
- 聚合操作:实现层间的信息传递
- 层内:池化
- 层间:GCN邻域聚合、考虑邻接节点的权重(attention) 先采样再聚合
什么数据会用图表示 图数据有什么特点区别,构建一个GNN,提供一个GNN playground
图表示
顶点、边、全局 用向量来表示。内部有信息,通过向量存储
什么能被表示为图
图片表示为图
文本
分子 Molecules
社交关系图
引出什么问题
graph-level, node-level, and edge-level
- 对整个图判断:是否有环
- 对顶点判断:社交网络有两个老师分开了,学生跟随谁
- 对边判断:顶点是图中的物体,判断物体和物体间关系
represent graphs
- 顶点 边 全局信息:直接用向量,比较简单
- 连接信息:邻接矩阵,比较大浪费空间、同一图交换两行会影响矩阵形状;邻接表
这里用标量表示的,可替换向量
GNN:
Define:对顶点、边、全局进行变换,变换满足置换不变性。输入输出都是图,对顶点、边进行变化但不改变连接性
message passing neural network
通过MLP更新顶点向量,最后对单个顶点的向量就可以通过softmax分类
pool
可能点没有信息,但边有,在最后一层pool。pool: 边->点 。同理可以点到边
Passing messages
问题:我们没有使用图的信息(除了最后一次),顶点和哪些边相连的。我想在GNN层中使用池化来做出更复杂的预测
点-点 或 边-边
消息传递:进入mlp前,当前顶点会加上所有相邻的点,如果很多层就可以看到全局的点,如第一张图所示(像感受野)
点-边
顶点信息给边,再给边信息给点(相加、concat)
全局信息
解决很远的节点间的消息传递问题
master node:和所有点和边相连 包含全局信息,更新时需要点边信息,点边更新时会额外加入全局
先更E(包含V,U),再更新点(包含E,U),最后更新U(包含V,E)
PlayGround
hyperparameters:
Style of message passing 明显全部消息传递效果最优
the dimensionality of embeddings
number of layers
aggregation operation type
Into the Weeds
**Other types of graphs **
(multigraphs, hypergraphs, hypernodes, hierarchical graphs)
Sampling Graphs and Batching
随机子图,随机游走多少步,随机游走再加邻居,单点BFS多少步
GCN
GCNConv
是 PyTorch Geometric 中实现 GCN 的模块,它的内部实现如下:GCNConv(x, edge_index)
1 |
|
Graph Attention Networks
当我们考虑一个节点及其1度相邻节点的和聚合时,我们也可以考虑使用加权和
常用的评分函数是内积,评分前常通过线性映射将节点转换为查询和关键向量,以提高评分机制的表现力。
a(l)代表着注意力分数向量;W(l)是对当前层特征做一个映射,相当于一个MLP