零基础多图详解图神经网络(GNN/GCN)【论文精读】

https://distill.pub/2021/gnn-intro/

1前言

标题:A gentle introduction to graph neural networks

技术博客不用复杂词,受众比论文广。

副标题:

  • Neural networks have been adapted to elverage the stucture and properties of graphs. NN 已经被用来处理 图结构和图性质。

  • We explore the components needed for bulding a graph neural network - and motivate the design choices behind them. 探索了构建 图神经网络的模块 + 背后的思想。

  • 4 层 5个节点的 交互 图:可以显示每一个节点它是由上面一层哪一些节点计算而来的。

只要足够深的话,很有可能一个节点是能够处理到整个 比较大范围的图里面的节点信息 ==== GNN怎么利用图的结构化信息来处理信息的。

作者:Google Research

发表在 distill 网站,博客相比论文写作更自由。

写作建议:有一个 table content 知道每章讲的内容,方便读者阅读时进行跳读 or 选择从头读到尾。

Remark:distill 文章质量比较高、尽量用图说话;可从头到尾读。

distill 2篇关于 GNN 文章,另外一篇是 图上的卷积。(斜体非正文)

第一段

Graphs are all around us 我们身边都是图,图是一个一般化的架构。

十几年前,学者提出 GNN;最近 GNN 被应用到 药物发现、物理模拟、虚假新闻的检测、流量预测 & 推荐系统。

starting to 说明 GNN 新、应用还不多;GNN应用有挑战,解决效果如何快 + 好。还有很多 GNN 相关可以研究。

第二段:本文做什么?

  • 什么数据可以表示成图?

  • 图和别的数据的区别?Why use GNN?

  • GNN 的构建模块长什么样?

  • playground 一定要玩一玩,作者很用心

2什么是图

Q1:图是什么?

实体(顶点 node)之间的关系(边 edge)。A graph represents the relations (edges) between a colelction of entities(nodes).

img

V 顶点

E 边

U 全局信息,整个图

img

Q2: attributes in V E U 重要吗?

!关心图的整个架构

!更关心 每个顶点、每条边、和 整个图表示的信息

Q3: attribute 如何表示呢?

img

embedding 表示 V E U 的 attributes

Q3:GNN 重点是什么?图表示学习

这些向量是否能通过学习数据,从而表示我们想要的信息?

图的分类:无向图(微信朋友) + 有向图(B站up主和粉丝)

Q4:数据如何表示成图?

图片如何表示成图?

244 * 244 * 3通道,3维度的tensor

把图片看作一张图,一个像素是一个点;一个像素跟我是连接关系的话,像素之间连一条边。

img

把图片上的像素 映射到 图上的每一个点

0-0 2-2

img

边信息:

2-2的八邻居

img

蓝色点 表示 adjacent matrix,白色点表示无连接;通常是很大的sparse matrix

text as graphs?

文本的顺序:图的有向路

distill 博客 文本可更改,欢迎大家玩~

img

Q5:除了图片、文本,还有什么数据可以表示成图?

香料分子图、咖啡因的分子图、社交网络图、引用图(directed)

img

img

奥赛德人物图

img

img

实际图的大小

img

wikipedia 巨大知识图,1200w结点,1M个边,可能是索引页。

What types of problems have graph structured data? 把数据表示成图之后,我们可以解决什么问题呢?

graph-level U, node-level V, edge-level E

graph-level task 图分类:图中是否有环

img

node-level task

顶点分类:跟老师A 还是 B 蓝还是红

选举预测

img

edge-level task

图中顶点和边的关系

watching fighting

img

img

The challenges of using graphs in machine learning

图在NN 的挑战:如何使 图 和 NN 兼容?

图有几类信息需要表示?

nodes V, edges E, global-context U and connectivity

V E U 可以用 vector 表示,问题是 connectivity 如何表示?by adjacent matrix?

Q6:n * n 的 0-1 元素矩阵 表示 connectivity 可以吗?

  • 矩阵很大,i.e., wikipedia数据集,12M nodes,矩阵会有12M行、12M列,无法存储。

  • 边通常是稀疏的,存储 sparse matrix ✔;但稀疏矩阵在GPU上的高效运算,难❌

  • 邻接矩阵的 行、列顺序交换,不会影响图

左图和有图是 permutation 的关系,放进 NN 应得到相同的结果。

img

异构图的特别详细的例子

4个顶点,4条边,24种不同的排序,24个邻接矩阵

img

Q7: 如何高效存储、顺序无关的图呢?

8个顶点、7条边。

图中点和边的属性、全局信息用标量示例,也可以用向量表示。

img

非常推荐去 distill 博客玩,可以更改图中的数值。

Adjacency List

长度 = 边数

第 i 项表示第 i 条边连接的 2 个顶点。

存储效率怎么样?

只存边 adjacency list、V E U 的 attributes

Permutation 的效果如何?

Adjacency List 中的元素会相应变化。

Q8:Nodes, Edges, Adjacency List, Global 的存储方式怎么样?

存储高效,顺序无关

图神经网络

输入一个高效存储、顺序无关的 Nodes, Edges, Adjacency List, Global 信息,如何用 NN 处理呢?---- Graph Neural Networks

GNN定义:

A GNN is an optimizable transformation on all attributes of the graph (nodes, edges, global-contex ) that preserves graph symmetries (permuation invariance).

图上属性的 可以优化的变化,且保持图的对称信息。

Q9: how to build GNNs?

message passing NN in this distill paper, GNN 也可以用别的信息来描述。

graph-in(nodes, edges, adjacency list, global information), graph-out

GNN 对 attributes 向量进行变化,不改变原图的连接性。

transform these embeddings, without changing the connectivity of the input graphs.

The simplest GNN

对 attributes 进行变换时,图的结构不变化

Un 全局向量, Vn 顶点向量, En 边向量 分别构造一个MLP, MLP的输入输出的大小一致。

3个MLP f_Un, f_Vn, f_En 组成一个 GNN 的层。

graph-in, graph out

MLP f_Un, f_Vn, f_En 分别对输入的 Un 全局向量, Vn 顶点向量, En 边向量 计算,得到更新 Un+1 全局向量, Vn+1 顶点向量, En+1 边向量 。

img

Permutation invariance

MLP 是对每一个向量独自作用,MLP 不会考虑所有的连接信息,所以不管排序如何变化,都不会改变 MLP 的输出结果。

simplest GNN 层的叠加,构造一个比较深的 GNN

GNN predictions by pooling information

最后一层的输出,怎么得到预测值?

simplest: nodes prediction 顶点预测

分类预测: i.e., 空手道俱乐部喜欢 A 老师还是 B 老师

和 NN 类似,node embeddings 向量 接入 输出维度为 2 or n 的全连接层 + 一个 softmax,得到分类结果;输出维度为 1,得到回归结果。

最后一层的顶点进入 图中的 C_V_{i,n} classification 全连接网络,得到顶点的分类。

img

Note: 所有顶点共享一个全连接层 C_V_{i,n} 的参数。

GNN 之前的层,不论图有多大,一层里面只有 3 个MLP

  • 所有顶点共享一个 MLP

  • 所有边共享一个 MLP

  • 所有的全局 U(哈哈哈,全局只有一个)不用共享。

complex: node predictions without node embeddings

对某个顶点分类预测,但是没有这个顶点的向量。

pooling 汇聚 (似 CNN 的 pooling)

与缺失点连接的边的向量 4个 + 全局向量 1 个 == 代表这个缺失点的向量,再做一个全连接层的预测输出。

假设:所有顶点、边、全局向量的维度一致;不一致,需要做投影。

img

别的缺失点,连接关系不一样,最后的向量也不一样。

img

img

缺失点预测的示意图

img

V_n 是只有边、没有顶点的向量

E_n 是边的向量

Rho_{E_n --> V_n} 通过 pooling 汇聚从 边 +全局 到 顶点的信息, 进入顶点共享的分类层 C_V_n 之前,每个顶点都有自己的向量 embedding

Q: 只有 node embeddings 没有 边的向量,怎么办?

Rho_{V_n --> E_n} 把 node embeddings 汇聚到 vertex 边上。

一条边,连接两个顶点,2个顶点向量相加 (+ 全局向量)== 得到 边的向量,然后进入边共享的一个 MLP 预测分类网络,得到边的预测输出。

Q: 没有全局向量 U, 有 node embeddings, 对整个图做预测?

img

把所有的 node embeddings 加起来,得到一个全局的向量,进入全局的MLP,得到一个全局的预测输出。

总结:不论缺少哪一类 V E U attributes,pooling 汇聚得到缺失值 embeddings,进入MLP,得到预测值。

最简单的 GNN 示意图

input graph 经过 GNN blocks (每一个 block 里面有 3个 MLP对 V顶点 E边 U全局 attributes 更新)得到 一个同结构的 transformed graph, 但 V E U 属性值已被更新。

(if 某类 embeddings 缺失,通过其它 embeddings pooling 汇聚而来)

最后根据 V E U 某类属性做预测,接一个 MLP classification layer 输出预测信息。

img

Q: simplest GNN 有什么问题?

GNN blocks 没有使用图结构信息:使用 MLP 更新属性值时,没有看到 V 顶点 E 边 的交互信息,只是 V 进 MLP_V, E 进 MLP_E, U 进 MLP_U,忽略了点边之间的连接信息。

overlook information: 一个顶点与哪些边相连,一个顶点与哪些顶点相连;一条边与哪些顶点相连,一条边与哪些边相连

GNN blocks 没有合理的将整个图的信息更新到属性值里,最后的结果不能 leverage 图的信息。

Q: 如何改进 GNN blocks 以考虑图的结构信息?

Passing messages between parts of the graph

类似 pooling 汇聚

对图中顶点进行更新,

img

接下来我们来看一下怎么样对它改进,使得在这一块能够把图的信息及早地放入进去。我们将用到的技术是之前提到过的信息传递。假设你理解过之前我们的汇聚是怎么工作的话,那么它其实是一个很简单的东西,我们就直接跳到我们下面这张图,用图来解释一下它是怎么工作的。

4实验

GNN 对超参数比较敏感:

多少层、attribute的embedding的维度、汇聚使用什么操作max average、怎样传递消息

5相关技术

除 GNN 外,还有别的图吗?

Multigraph

一张图中的多种边:有向边、无向边;分层图,一些顶点是子图的

不同的图结构 影响 message passing 的操作

Sampling graphs and batching in GNNs

Why sample graphs?

i.e., 一个有很多层、很大的图

最后一层的顶点,即使只看每一层的一阶邻居,根据消息传递,最后一层的顶点能看到一个很大的图,甚至是全图的信息(如果图的connectivity可以的话)

计算梯度需要 forward 过程中全部的中间变量。因为最后一层的顶点要看整个图的话,对最后一层的顶点计算梯度,需要把整个图的计算中间结果都保存下来,--> 计算难 /(ㄒoㄒ)/~~

--> sample graph

从大图中每次 sample 一个小图,在采样的小图上做信息汇聚,保存记录这个小图上的中间计算结果。

sample graph 的方法有哪些呢?

1 random node sampling

  • 采样 4 个黄色nodes,得到 1-degree neighbor 红色点

  • 只在 sample 出来的子图上做计算,避免图特别大、内存存不了

2 random walk sampling

  • 随机游走

  • 从某一个顶点开始,随机找一条边,然后沿着这条边走到下一个节点

  • 规定最多随机走多少步,得到一个sample子图

3 1 + 2

  • 随机走三步,走到的节点的邻居也考虑进来

4 BFS

  • 取一个点及其一阶、二阶邻居,然后再往前走 k 步,得到子图

img

img

4 种 sample graphs 的方法取决于数据集的形式

rgcn与gcn区别:

gcn是一个点都与他相邻的几个点相近

rgcn就是选择性的与他相邻的几个点相近

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值