1. 图神经网络由来
标题:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS
地址:http://arxiv.org/abs/1904.03751
1.1 欧式空间与非欧式空间数据
图网络的提出和处理非欧式空间数据息息相关,对于传统的欧式空间数据(如:图像数据等),由于其数据的'规则性',常见的诸如CNN的网络方法已经可以很好的处理这类数据(注:欧式空间通俗的讲其实就是常见的n维空间,比如2维3维直角坐标系)。但是对于社交网络,交通网络这种非欧式空间数据,以前的一些方法就显得比较鸡肋...
1.2 半监督学习
文章从非欧式空间的数据集出发,以半监督节点分类为例,在一些Citation Network等数据集(Citeseer, Cora)上进行了测试。
1.3 GCN原理
假设一个无向图图有
-
为第层图的特征,对于第一层网络的输入有
-
,是单位矩阵。
-
是的度(degree)矩阵,,也即度矩阵在对角线上存储的度,其他位置为0.
-
为激活函数
-
为第层的网络权值,该层仅起到特征映射的作用。
至于为何这样子定义公式,其实作者的论文中,最简化版本的公式长得是这个样子:
-
的对角线为0,这样下一层节点特征相当于其邻居特征之和,该节点自己的特征没有加入计算中,因此作者使用了使得对角线元素变为1
-
没有经过归一化,这样相当于直接对自己和邻居进行特征求和,会改变数据分布,因此要对进行归一化处理,使得每一行加起来都为1。处理方式:,其中为的度矩阵。
1.4 训练方式
仅利用标签的节点计算交叉熵损失函数:
GCN在有关图网络的数据集中表现好的原因在于它对数据进行了平滑,也即让相邻节点间的特征尽可能类似。
2. GraphSAGE—从Transductive到Inductive
标题:Inductive Representation Learning on Large Graphs
地址:https://arxiv.org/abs/1706.02216
2.1 Inductive Learning 与 Transductive Learning 区别?
实际上我们平时所说的learning一般指的是inductive learning。
考虑普通学习问题,训练集为,测试(未标记),众所周知,不会出现在训练集中。这种情况就是inductive learning。
半监督学习的情况,训练集为,测试,此时,与都是未标记的,但我们测试的在训练时没有见过,这种情况是 inductive semi-supervised learning。
如果我们在训练的时候我们已经见过,或者说利用了的特征信息(可以认为),这时就叫transductive semi-supervised learning。
简单来说,transductive和inductive的区别在于我们想要预测的样本,是不是我们在训练的候已经见(用)过的。
通常transductive比inductive的效果要好,因为inductive需要从训练generalize到测试。
引自: https://www. zhihu.com/question/6827 5921/answer/529156908
2.2 为什么说GCN是Transductive的?
再看下GCN的公式:
若图是变动的,比如突然加入一个顶点进来,就会导致前面计算的归一化矩阵整体变动。
这时如果非要强行进行预测,需要重新计算归一化矩阵,这样也会加大计算量导致难以进行新节点的预测。此外,由于归一化矩阵已经整体变动,再次前向传播后的节点embedding和之前会有一定的偏移,故预测效果不会很好。
因此GCN对于大规模的图数据集其可拓展性是很低的,这样我们想要的 inductive learning 就变成了 transductive learning. 所以说,归一化矩阵是导致Transductive的根源。
2.3 GraphSAGE算法流程
GraphSAGE对于GCN主要的改进是,他将GCN传播的步骤拆分出了
GraphSAGE与原本的GCN在训练方式上也有很大的不同。原本的GCN是将整个图放进网络中进行训练,即batch size等于数据集所有节点数目。而GraphSAGE可以节点为单位进行训练(mini batch方式),batch size就是batch所包含的节点数量,测试时将测试集节点放进网络进行预测即可。
先给出算法流程(
其实跟GCN一样,对每层图而言,该层都是由上一层图的特征计算得到,更改的只是其计算方式。此处添加了
此外还给出了mini batch的训练方式:
2.4 可选用的Aggregate函数
- Mean Aggregator
该Aggregator其实就是将当前节点与其邻居节点计算 elementwise mean,然后将等到的特征进行映射再使用激活函数。其中,表示层数,表示当前节点,表示节点的邻居节点集合。 - LSTM aggregator
其实就是将邻居节点的随机打乱输入到LSTM中进行提取特征。
个人觉得LSTM并不靠谱,因为LSTM主要是提取序列信息,但邻居节点间没有顺序。我倒是有个大胆的想法(狗头滑稽),等实现了再说。
3. Pooling aggregator
把各个邻居节点单独经过一个MLP得到一个向量,最后把所有邻居的向量做一个element-wise的max-pooling。
2.5 实验效果
3. GAT—图注意力机制
标题:Graph Attention Networks
地址:https://arxiv.org/abs/1710.10903
这文章是Yoshua Bengio团队写的
3.1 先回顾下Attention
Attention的提出一开始是在NLP中的,提出了在Encoder-Decoder框架中加入Attention机制改善机器翻译的方法。其实Attention机制一直可以解释为以下的形式:
Attention本质其实就是一个查询(query)到一系列键值(key-value)对的映射。
而具体的计算流程一般如下:
先计算Query和Keys的相似度,然后对相似度进行softmax归一化,再利用归一化的结果计算Keys的加权和得到Attention Value。描述为公式形式如下:
3.2 如何在GCN中嵌入Attention机制
GCN中的Attention机制给我感觉更像是提出了一个新的Aggregate函数,其图网络下一层节点的Feature就是利用上一层网络节点Feature计算出的Attention Value。
先给出计算加权系数
随后也是加权求和:
其中,
- 拼接:多用于图网络的隐藏层间
- 平均:用于最后一层
作者还给出了计算流程图:
3.3 实验效果
4. DeepGCN—深度图卷积神经网络
请看之前的文章:https://zhuanlan.zhihu.com/p/95580833
标题:DeepGCNs: Can GCNs Go as Deep as CNNs?
链接:https://arxiv.org/abs/1904.03751
代码链接:https://github.com/lightaime/deep_gcns
4.1 DeepGCN方法简单总结
其实说白了就是提出了三种方式:
4.1.1 Residual Learning for GCNs
说简单点就是作者受到ResNet的启发把GCN改成了下面这样,并把它称为ResGCN:
4.1.2 Dense Connections in GCNs
DenseNet的提出是为了利用各层之间的紧密连通性,这改善了网络中的信息流,实现了各层之间特征的高效重用。受DenseNet的启发,作者将类似的想法应用到GCNs中,以便利用来自不同GCN层的信息流。具体做法如下:
若
4.1.3 Dilated Aggregation in GCNs
作者从借鉴小波分析,提出了以下方法:
- 作者考虑在特征空间上使用
距离,对与目标节点(卷积中心点)的距离进行排序:
- Dilated K-NN: 使用dilated方法确定dilated系数为
时,目标节点(卷积中心点)相 对应的邻居节点为。
- 此方法相当于将卷积中心点
和自定义的邻居节点集中的每 一个点连成一条边。 然后,按照等式(1)中所示,进行GCN步骤中的Aggregate 和 Update 函数
4.2 实验效果
个人认为,由于该算法是面向 point cloud segmentation 提出的,因此不一定具有很强的普适性。此外作者使用的类似于ResNet方法在GCN开山之作的附录中也有提及,该文章更像是面向与某一特定任务而提出的深度训练GCN的方法。需要在别的数据集上也进行更深入的实验。
5. GCN的一些应用
会放到下一篇文章中