卷积神经网络流程图_图神经网络入门级总结

9a65f04ee10b38907be606d6ae75530e.png

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原理

假设一个无向图图有

个节点,每个节点都有
维的特征。图的邻接矩阵记为
,节点的特征组成的
维矩阵记为
。那么对于GCN网络而言,层与层之间的传播可以用如下公式表示:

其中
  1. 为第
    层图的特征,对于第一层网络的输入有
  2. 是单位矩阵。
  3. 的度(degree)矩阵,
    ,也即度矩阵在对角线上存储
    的度,其他位置为0.
  4. 为激活函数
  5. 为第
    层的网络权值,该层仅起到特征映射的作用。

至于为何这样子定义公式,其实作者的论文中,最简化版本的公式长得是这个样子:

其中
就是我们之前说的邻接矩阵,作者的实验表示这个网络在半监督学习数据集下已经很强了。但是存在以下几个缺陷:
  1. 的对角线为0,这样下一层节点特征相当于其邻居特征之和,该节点自己的特征没有加入计算中,因此作者使用了
    使得对角线元素变为1
  2. 没有经过归一化,这样相当于直接对自己和邻居进行特征求和,会改变数据分布,因此要对
    进行归一化处理,使得每一行加起来都为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的公式:

开山之作中的GCN是基于固定的图做的计算,在提出时仅考虑了固定的图,在训练时也是在固定的图上进行的训练。

若图是变动的,比如突然加入一个顶点进来,就会导致前面计算的归一化矩阵整体变动。

这时如果非要强行进行预测,需要重新计算归一化矩阵,这样也会加大计算量导致难以进行新节点的预测。此外,由于归一化矩阵已经整体变动,再次前向传播后的节点embedding和之前会有一定的偏移,故预测效果不会很好。

因此GCN对于大规模的图数据集其可拓展性是很低的,这样我们想要的 inductive learning 就变成了 transductive learning. 所以说,归一化矩阵是导致Transductive的根源

2.3 GraphSAGE算法流程

GraphSAGE对于GCN主要的改进是,他将GCN传播的步骤拆分出了

函数。在训练GrapgSAGE时,只需要学习
函数即可实现

GraphSAGE与原本的GCN在训练方式上也有很大的不同。原本的GCN是将整个图放进网络中进行训练,即batch size等于数据集所有节点数目。而GraphSAGE可以节点为单位进行训练(mini batch方式),batch size就是batch所包含的节点数量,测试时将测试集节点放进网络进行预测即可。

先给出算法流程(

全图节点数目):

a53ac2789b076e149daa1bd24e7aadcc.png

其实跟GCN一样,对每层图而言,该层都是由上一层图的特征计算得到,更改的只是其计算方式。此处添加了

函数的概念。

此外还给出了mini batch的训练方式:

3b7788c66122164fd3214237f4993f76.png

2.4 可选用的Aggregate函数

  1. Mean Aggregator
    该Aggregator其实就是将当前节点与其邻居节点计算 elementwise mean,然后将等到的特征进行映射再使用激活函数。
    其中,
    表示层数,
    表示当前节点,
    表示节点
    的邻居节点集合。
  2. LSTM aggregator
    其实就是将邻居节点的随机打乱输入到LSTM中进行提取特征。
个人觉得LSTM并不靠谱,因为LSTM主要是提取序列信息,但邻居节点间没有顺序。我倒是有个大胆的想法(狗头滑稽),等实现了再说。

3. Pooling aggregator
把各个邻居节点单独经过一个MLP得到一个向量,最后把所有邻居的向量做一个element-wise的max-pooling。

2.5 实验效果

e8a303c14707caf93ba581e30a9827fd.png

3. GAT—图注意力机制

标题:Graph Attention Networks
地址:https://arxiv.org/abs/1710.10903
这文章是Yoshua Bengio团队写的

3.1 先回顾下Attention

Attention的提出一开始是在NLP中的,提出了在Encoder-Decoder框架中加入Attention机制改善机器翻译的方法。其实Attention机制一直可以解释为以下的形式:

45228f2642d1da23fb76a383acd89125.png

Attention本质其实就是一个查询(query)到一系列键值(key-value)对的映射。

而具体的计算流程一般如下:

0f4a0ab08153e998e2c9f148ff5a22fa.png

先计算Query和Keys的相似度,然后对相似度进行softmax归一化,再利用归一化的结果计算Keys的加权和得到Attention Value。描述为公式形式如下:

对于多头注意力机制(Multi-Head Attention),其实就是将上面的Attention做n次然后再拼接起来,此处不再赘述。

3.2 如何在GCN中嵌入Attention机制

GCN中的Attention机制给我感觉更像是提出了一个新的Aggregate函数,其图网络下一层节点的Feature就是利用上一层网络节点Feature计算出的Attention Value。

先给出计算加权系数

的公式:

5ea600c83629ecdad404a90b4e774a27.png

随后也是加权求和:

ea1d5c8f5e3b7b70a90ee61700132274.png

其中,

表示concatenation,
表示当前节点,
表示其邻居节点集合(包含其本身),
表示节点
的Feature,
表示一个
的向量,用于计算相似度,
的作用仅在于将映射特征到另一个维度。 对于Multi-Head Attention,作者给出两个方法:
  • 拼接:多用于图网络的隐藏层间

381c39d9cb787c48c9f78c5d194bcdc9.png
  • 平均:用于最后一层

5fb7b8934d103fd5e6ff2b0e2c79aa31.png

作者还给出了计算流程图:

6e30a4f45f012d36af185585c927b091.png

3.3 实验效果

f9d21ca10c866c2a64341baf7e0c2466.png

38ba9469969de2498bb5937d9075280e.png

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:

3f35ebe5a23d93f332182c1f23d03095.png

4.1.2 Dense Connections in GCNs

DenseNet的提出是为了利用各层之间的紧密连通性,这改善了网络中的信息流,实现了各层之间特征的高效重用。受DenseNet的启发,作者将类似的想法应用到GCNs中,以便利用来自不同GCN层的信息流。具体做法如下:

90281eb9ea7081b596515cb1e4bd865a.png

会产生
维的特征,且
的特征是
维,则第
层的特征维度应该是
维。

4.1.3 Dilated Aggregation in GCNs

作者从借鉴小波分析,提出了以下方法:

  • 作者考虑在特征空间上使用
    距离,对与目标节点(卷积中心点)的距离进行排序:
  • Dilated K-NN: 使用dilated方法确定dilated系数为
    时,目标节点(卷积中心点)
    相 对应的邻居节点为

如下图所示:

affcb061ddb5035e833506a4416608a2.png
  • 此方法相当于将卷积中心点
    和自定义的邻居节点集
    中的每 一个点连成一条边。 然后,按照等式(1)中所示,进行GCN步骤中的
    AggregateUpdate 函数

4.2 实验效果

630ac117e4505bc68bb9c971d37ad240.png

5d4a212b3757e354f94b943a7871b79d.png
个人认为,由于该算法是面向 point cloud segmentation 提出的,因此不一定具有很强的普适性。此外作者使用的类似于ResNet方法在GCN开山之作的附录中也有提及,该文章更像是面向与某一特定任务而提出的深度训练GCN的方法。需要在别的数据集上也进行更深入的实验。

5. GCN的一些应用

会放到下一篇文章中

5.1 骨架动作识别(Skeleton-Based Action Recognition)

5.2 NLP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值