图基本模块
点:点由特征向量来表示;比如一个人是一个点,特征是身高,体重,年龄等等
边:边也是由向量表示的;比如预测2个人之间的关系,是塑料的关系,还是青铜的关系
图:图也是一个向量;
图神经网络最终要输出什么?
看任务是什么?对点做分类/回归?对边做分类/回归?对整个图做分类/回归?
邻接矩阵
邻接矩阵表示了谁和谁有关系,谁和谁有连接
GNN应用领域
化学分子预测;轨道交通;社交网络;
GNN常见三种任务:图级别任务;点级别任务;边级别任务
传统的神经网络的要求:
输入的格式是固定的,比如训练图像里面,一个batch里面,一会32×32,一会64×64,这样的是没有的。但是实际生活当中有很多东西都不是固定的。分子:每个分子都不一样;轨道交通:每个城市的交通都不一样,有的点不同,有的边不同;不同的数据结构完全不同的情况应该怎么处理?第一种硬是往神经网络上面靠,多退少补,会导致一些特征被破坏,这是不被希望的。
所以来使用图神经网络来处理这些事情,对与输入结构没有要求(图神经网络的优势)。比如给定100张图,其中每个图的顶点和边都不一样,都没关系。
比如说社交网络,他的顶点和连接不是不变的,是变化的。
消息传递计算方法
消息传递的方法,在更新一个顶点的特征的时候,需要考虑它邻居的特征。计算方式如下图所示,需要结合自己和邻居来更新自己的特征。结合邻居的方式有很多,比如求和,求平均,求最大最小值。。。。。。其中W权重是通过神经网络训练得来的。
多层GNN的作用
GNN的本质是更新各部分特征,其中邻接矩阵不会改变,改变的是特征
只改变特征,为什么要2层呢?只用1层可以吗?
不可以,因为每一个点在更新的时候都受它的邻居影响,那么做了很多层之后,宏观上来看,类似于CNN的感受野,它的感受野就越来越大。
所有的点和边都是向量。
GCN基本模型概述
传统的神经网络解决不了,输入不同应该怎么办。
GCN的输入是:各节点的特征 和 邻接矩阵
很多图的任务并不一定是有监督学习,是半监督学习
比如说下图中针对点,红色的点有标签,?的点没有标签;
所以针对图的数据,有些点没有标签是可以的。
图卷积的基本计算
如下图所示,在第一层的时候,更新每一个点的特征,更新点的特征的方式如上图所示,然后经过以RELU函数,然后在第二层的时候,再次更新每一个点的特征,然后再使用一个RELU函数,最后得到输出,使用多层的目的是为了扩大类似于CNN里面的感受野一样的东西,就是让每一个节点更新的时候都受所有其他点的影响,比如1号点想要受6号点影响,就需要2层才可以。
A表示邻接矩阵,D表示度矩阵(表示那个点有几个邻居),X是特征矩阵。
GCN的层数不易太多,层数多了,相当于感受野就变大了,但是并不总是一件好事,因为距离比较远的两个点之间的关系可能没有那么的大。