视频链接:零基础多图详解图神经网络(GNN/GCN)【论文精读】 - 哔哩哔哩 (bilibili.com)
博客链接:A Gentle Introduction to Graph Neural Networks (distill.pub)
选文原因:
1、图片数据结构、相对于文本序列更复杂
上一次关注图还是十几年前,社交网络,计算难,转而关注别的地方。
图神经网络 popular,同学用 ML 处理图结构数据不熟(感谢老师),基础梳理
2、博客写作非常好,值的精读
技术博客不用复杂词,受众比论文广。
副标题:
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 一定要玩一玩,作者很用心
07:05
Q1:图是什么?
实体(顶点 node)之间的关系(边 edge)。A graph represents the relations (edges) between a colelction of entities(nodes).
V 顶点
E 边
U 全局信息,整个图
Q2: attributes in V E U 重要吗?
!关心图的整个架构
!更关心 每个顶点、每条边、和 整个图表示的信息
Q3: attribute 如何表示呢?
embedding 表示 V E U 的 attributes
Q3:GNN 重点是什么?图表示学习
这些向量是否能通过学习数据,从而表示我们想要的信息?
图的分类:无向图(微信朋友) + 有向图(B站up主和粉丝)
Q4:数据如何表示成图?
图片如何表示成图?
244 * 244 * 3通道,3维度的tensor
把图片看作一张图,一个像素是一个点;一个像素跟我是连接关系的话,像素之间连一条边。
把图片上的像素 映射到 图上的每一个点
0-0 2-2
边信息:
2-2的八邻居
蓝色点 表示 adjacent matrix,白色点表示无连接;通常是很大的sparse matrix
text as graphs?
文本的顺序:图的有向路
distill 博客 文本可更改,欢迎大家玩~
Q5:除了图片、文本,还有什么数据可以表示成图?
香料分子图、咖啡因的分子图、社交网络图、引用图(directed)
奥赛德人物图
实际图的大小
wikipedia 巨大知识图,1200w结点,1M个边,可能是索引页。
What types of problems have graph structured data? 把数据表示成图之后,我们可以解决什么问题呢?
graph-level U, node-level V, edge-level E
graph-level task 图分类:图中是否有环
node-level task
顶点分类:跟老师A 还是 B 蓝还是红
选举预测
edge-level task
图中顶点和边的关系
watching fighting
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 应得到相同的结果。
异构图的特别详细的例子
4个顶点,4条边,24种不同的排序,24个邻接矩阵
Q7: 如何高效存储、顺序无关的图呢?
8个顶点、7条边。
图中点和边的属性、全局信息用标量示例,也可以用向量表示。
非常推荐去 distill 博客玩,可以更改图中的数值。
Adjacency List
长度 = 边数
第 i 项表示第 i 条边连接的 2 个顶点。
存储效率怎么样?
只存边 adjacency list、V E U 的 attributes
Permutation 的效果如何?
Adjacency List 中的元素会相应变化。
Q8:Nodes, Edges, Adjacency List, Global 的存储方式怎么样?
存储高效,顺序无关
23:18
输入一个高效存储、顺序无关的 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.
24:58
对 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 边向量 。
Permutation invariance
MLP 是对每一个向量独自作用,MLP 不会考虑所有的连接信息,所以不管排序如何变化,都不会改变 MLP 的输出结果。
simplest GNN 层的叠加,构造一个比较深的 GNN
最后一层的输出,怎么得到预测值?
26:37
simplest: nodes prediction 顶点预测
分类预测: i.e., 空手道俱乐部喜欢 A 老师还是 B 老师
和 NN 类似,node embeddings 向量 接入 输出维度为 2 or n 的全连接层 + 一个 softmax,得到分类结果;输出维度为 1,得到回归结果。
最后一层的顶点进入 图中的 C_V_{i,n} classification 全连接网络,得到顶点的分类。
Note: 所有顶点共享一个全连接层 C_V_{i,n} 的参数。
GNN 之前的层,不论图有多大,一层里面只有 3 个MLP
所有顶点共享一个 MLP
所有边共享一个 MLP
所有的全局 U(哈哈哈,全局只有一个)不用共享。
complex: node predictions without node embeddings
对某个顶点分类预测,但是没有这个顶点的向量。
pooling 汇聚 (似 CNN 的 pooling)
与缺失点连接的边的向量 4个 + 全局向量 1 个 == 代表这个缺失点的向量,再做一个全连接层的预测输出。
假设:所有顶点、边、全局向量的维度一致;不一致,需要做投影。
别的缺失点,连接关系不一样,最后的向量也不一样。
缺失点预测的示意图
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, 对整个图做预测?
把所有的 node embeddings 加起来,得到一个全局的向量,进入全局的MLP,得到一个全局的预测输出。
总结:不论缺少哪一类 V E U attributes,pooling 汇聚得到缺失值 embeddings,进入MLP,得到预测值。
30:50
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 输出预测信息。
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
32:21
类似 pooling 汇聚
对图中顶点进行更新,
接下来我们来看一下怎么样对它改进,使得在这一块能够把图的信息及早地放入进去。我们将用到的技术是之前提到过的信息传递。假设你理解过之前我们的汇聚是怎么工作的话,那么它其实是一个很简单的东西,我们就直接跳到我们下面这张图,用图来解释一下它是怎么工作的。
4实验
GNN 对超参数比较敏感:
多少层、attribute的embedding的维度、汇聚使用什么操作max average、怎样传递消息
5相关技术
50:14
除 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 步,得到子图
4 种 sample graphs 的方法取决于数据集的形式