如果你看到了这篇文章想学GNN,那么建议你直接看原文。我写的就是一坨shit
博客开头有一个可操作的动画来展示图神经网络的结构。
Distill上很多文章都非常好,通常都是比较短可以通篇阅读的,结构和文风也比论文易懂。所以上面的文章有兴趣可以看一看。
图神经网络可以应用在: 1. 药物发现 2. 物理模拟 3. 虚假新闻检测 4. 交通流量估计 5. 推荐系统 (刚刚开始进入实际应用)
文章:
1. 什么样的数据可以表示成一张图
1.1 图
图是表示实体(Node)之间的关系(Edge)
V: Node Attributes
E: Edge Attributes
U: 代表整个图 Global Attributes
其中V,E,U都可以用向量表示
图还可以分为有向图和无向图
1.2 数据如何用图来表示
1.2.1 图来表示图片
例如有一张图片(244x244x3),那么把每个像素看成一个Node,并让每个像素与周围像素之间连成边(Edge)。此处博客中有很好的演示动画。
1.2.2 图来表示文本
例如一句话
Graphs are all around us
[Graphs] -> [are] -> [all] -> [around] -> [us]
那么每个单词就是一个节点,前一单词与后一单词间有一条有向边
1.2.3 什么样的问题有着图结构的数据?
大体上来说有三种图预测任务:
1. Graph-level
对图进行分类,例如挑出一堆图中含有两个环的图
2. Node-level
对顶点进行分类,例如可能可以聚类
3. Edge-level
例如先进行图片分割,在对分割后的Entity之间的关系作判断
1.2.4 如何把图应用在神经网络
主要挑战:怎么样表示图才能使图和神经网络兼容
图有四种信息:Nodes,Edges,Global-contect和Connectivity。前三种很容易就用矩阵表示,但最后一种比较复杂。用邻接矩阵的话有以下问题,1.矩阵会非常大;2.行列交换不会影响关系,但神经网络需要保证对变换过的矩阵的输出是一样的。
Adjacency List=[[1,0],[2,0],[4,3],[6,2],[7,3],[7,4],[7,5]]
所以解决方法是把邻接矩阵换为邻接列表(Adjacency List)。邻接列表的长度和边的数量是一样的,第i项表示第i条边连接的哪两个节点。这样对顺序无关,只是Nodes,Edges,Adjacency List的顺序需要一一对应
我的总结:
感觉自然界中有先验关系的数据都可以作为图。例如位置关系,时间关系,逻辑关系,引用关系等等。
2. 图和其他数据的区别;为什么要用GNN
2.1 GNN
A GNN is an optimizable transformation on all attributes of the graph (Nodes, edges, global-contect) that preserves graph symmetries (permutation invariances)
GNN是一个对图上所有的属性进行的一个可以优化的变换,这个变化可以保持图的对称信息的(打乱后结果不会变)。作者用的是Message Passing neural Network,并且输入是图,输出也是图。其中图的属性会进行改变的同时图片的连接性不会改变。
请问图神经网络和知识图谱类似吗,都有实体和关系