目录
1.GNN 图神经网络
图这个数据结构相对于之前讨论的文本(文本是一个序列)、图片(图片是一个矩阵),图相对来说更加复杂一点。
- Layer1 的点是由 Layer2里它和它的邻居计算得来的
- Layer2的点是由 Layer3里它和它们的邻居计算得来的
- 所以说,当你的图越深的时候,你在顶部的那些点,是由它的邻居的邻居等等整个计算得来的,只要你足够深,很有可能你一个节点是能够处理到比较大范围的图里面的节点信息
图神经网络的实际应用(starting to,图神经网络还是一个比较新的领域,在应用上刚起步)
- 药物的发现
- 物理模拟
- 虚假新闻检测
- 车流量的检测
- 推荐系统
本文旨在探索和解释现代的图神经网络
- 什么数据可以表示成一张图
- 图和别的数据有什么不同,为什么要做图神经网络,而不是使用最简单的卷积神经网络等
- 构建了一个GNN,看各模块的具体结构
- 提供了一个GNN的playground
2.什么是图
图是用来表示entity(实体)之间的关系
- 实体就是一个点(node,顶点)
- 关系就是一个边(edge)
- 顶点(node)
- 边:顶点之间的关系
- 全局信息:每个顶点、每条边和整个图表示的信息
使用向量来标示顶点,边,全局属性
- 顶点(黄色)可以用一个embeding(向量)来表示它里面的属性,一共有六个值,高矮表示值的大小
- 边(蓝色)也可以使用向量来表示,长度可以和顶点不一样,这里使用的是一个长度为8的向量,即边中所有的属性用一个长度为8的向量来表示
- 全局信息(粉色)可以用一个长为5的向量来表示
图神经网络所关注的重点
- 怎样把所想要的数据表示成向量
- 这些向量是不是能够通过数据来学到
图一共有两种
- 没有方向的图:两个点之间相连的边是没有方向的,例如微信好友。
- 有方向的图:两个点之间相连的边是有方向,例如关注与互关。
数据是如何表示成图的
1、如何将图片表示成一张图
假设有一张高宽都为244的RGB三通道图,一般来说会把它表示成一个三个维度的tensor(在输入卷积神经网络的时候用的是tensor),但是也可以把它当作一个图,它的每个像素就是一个点,如果两个像素之间是连接关系的话,就连接一条边。
下图展示了如何把一张图片表示成图
- 左边表示图片
- 中间是表示成的邻接矩阵,它的每一行是一个顶点,每一列也是一个顶点,如果第 i 行和第 j 列之间值为1(图中蓝色的点)的话就表示第 i 个结点和第 j 个节点之间是有边的,每一个蓝色的点表示图中的一条边,剩下白色的点表示这些点之间是没有边的,通常是一个很大的非常稀疏化的矩阵
- 右边表示由图片生成的图
2.如何将文本表示成图?
文本可以认为是一条序列,可以把其中每个词表示成顶点,那么每个词和下一个词之间有一条有向边(上一个词和下一个词之间有一条指向下一个词的有向边,在图上面叫做有向的路)
除了文本和图片能够表示成图之外,现实生活中还有很多数据也能表示成图:
下图所示是一个分子的示意图
小说中人物之间的交互图(关系网络)
还有比较常见的就是引用图
- 假设一篇文章引用了另一篇文章的话,就从当前文章出发连一条边到另外一篇文章(这是一条有向边,不代表会相互引用,通常来说,很少会有两篇文章相互引用,一般是现在的文章引用之前的文章)
- grapgh表示图的个数
- node表示顶点数
- edge表示边的个数
- mean表示平均每个点所连接的边的数量
- min表示图中一个顶点所连接的边的数量的最小值
- max表示图中一个顶点所连接的边的数量的最大值
- 每一行就是一张图
- 第一行是一个空手道俱乐部的社交网络图,第二个是分子图,第三和第四个是引用图
在图上面可以提出什么样的问题?
主要有三个层面,图层面的,顶点层面的,边层面的
图层面的