传统神经网络要求输入的格式是固定的,规模是相同的,但是GNN要求输入的数据格式不做要求,多大的图都可以
图有N个点,那么图的邻接矩阵可写成 NN,但是一般传到NN中的是 2N 的矩阵,2指的是source->target 即 source 到 target 之间有一条边, N指的是边的个数
GNN中节点特征的更新不仅要考虑自身的,还要考虑邻居的信息:
GNN可以是多层的,对于多层GNN,输入的邻接矩阵不会改变
多层GNN可以使单个节点接受到其他节点的数据增多
比如上图,如果是一层GNN,节点信息更新时,节点h1会考虑他的两个临邻点;
如果是两层GNN,那么在第二层时,h1节点会把他的两个临邻点的邻接点考虑进来,即h7,h3等
得到节点最好的特征之后,可以对节点进行分类,对图进行分类等
所以GNN多层会使单个节点的感受野变大,甚至感受到全局
GNN不需要太多层,因为6层就可以感受到整个图
输入到GCN中的信息包含:1.各节点输入特征 2.网络结构图
GCN优势:
它是一个半监督学习,不需要所有的节点都有标签,训练的时候只用少量有标签的点进行训练,计算损失时只用有标签的
为什么这样可以?因为带标签的点会把邻居节点考虑进去,多层GCN会把感受野内的所有节点考虑进去
多层GCN算出来每个点都会对应一个向量,但是这个向量的维度不一定和输入点向量的维度一样,因为中间可能做了全连接等操作
邻接矩阵,度矩阵,特征矩阵
一般把邻接矩阵对角线设为1,表示也要考虑自己
同时为了使更新的特征进行平均,需要把度矩阵改为1/1, 1/2, 1/3, 1/4 等
由此得到
因此可写为
上述只是对行进行了归一化,加上对列的归一化,所以需要右乘D~,所以D~需要开根号
下面一幅图是一层GNN(使用的激活函数是relu)+一层全连接(使用的是softmax)
别人做的实验:GCN在2-5层时效果较好,层数再增多效果就变差了