网络上的CNN-图卷积网络模型

3,363 阅读12分钟

2020年3月11日更新:

  1. 增加引用论文的链接
  2. 优化一些细节描述

本篇文章主要整理自集智学园的论文解读视频《网络上的CNN-图卷积网络模型》《基于图卷积网络的半监督分类》

前置知识:卷积神经网络(CNN),线性代数基础

主讲人介绍:

  1. 辛茹月:北京师范大学系统科学学院硕士 曾参与《走近2050》一书的编撰。研究方向: 复杂网络分类器、复杂网络的深度学习、GCN等
  2. 高飞:北京师范大学系统科学学院博士生。研究兴趣与方向: 深度学习在复杂网络中的研究和应用

本文主要介绍了图卷积神经网络。也就是将卷积神经网络(CNN)的方法用在“图”这种数据上。

什么是图数据 / 为何要处理图数据

当前机器学习技术在各个领域都有非常好的发展,尤其在图像和语言领域,经典的代表模型有CNN和RNN,以及基于它们扩展出来的模型,这些模型在图片识别,语音识别等任务上都很好的效果。

然而,这些模型都是作用于规则的欧式数据——图像是规则的二维晶格数据,文本或者声音都是规则的一维序列数据。离开了这些规则的数据之后,这些模型就很难再有很好的表现。而我们日常遇到的,其实更多是不规则的非欧式几何数据,社交网,交通网,电路网,大脑神经系统,天气系统等等等等,我们迫切地需要更好的方法去处理这些数据,完成更复杂的任务。

图1:左边两张语音、文本和图像是欧式数据,右侧的四张是非欧数据

对于不规则的数据,也有一些传统的方法可以进行处理。但是目前都仅仅局限于小数据集上,一旦数据量达到一定的规模,传统方法就会非常难以处理。而有了深度学习的方法之后,大家就开始思考如何将深度学习应用在对不规则数据的处理上。近几年也有非常多的研究。这类研究还有一个名字叫做Geometric deep leaning。像这篇文章就是对处理非欧数据做了一个综述。 Geometric deep learning: going beyond euclidean data[J] Bronstein M M, Bruna, J.IEEE Signal Processing Magazine (2017)

根据这篇文章,非欧数据可以分成流型数据和图数据。因为我们一直都是研究复杂网络,所以对流型数据并不是很关注,主要的关注点在于对图结构数据,也就是网络数据的研究。

机器学习在图数据的应用

将机器学习的方法应用在图结构数据研究上,当然首先想到的就是对经典RNN和CNN的进一步扩展。这里先简单提一下对RNN的扩展。这是16年有人提出来了Gated Graph Sequence Neural Networks,是根据RNN的思路来对图结构的数据进行处理,它将图上面的每一个节点都处理成一个神经元。

用RNN来处理的一个优点是,它擅长处理时序性数据。缺点就是对于很大型的网络,它的效率很低

Gated Graph Sequence Neural Networks Yujia Li,Daniel Tarlow,Marc Brockschmidt.arXiv:1511.05493 (2015)

我们的研究团队主要关注的是使用CNN的思路来处理图数据,这个研究相对来说关注的人也很多,方法的效果也更好。所以接下来就介绍一下如何用CNN的方法来处理图结构数据,也就是我们说的graph convolutional network(GCN,图卷积神经网络)。

对CNN在图上的应用——GCN

接下来我们会具体围绕下面这篇论文展开对GCN的介绍,这是一篇关于GCN理论基础的文章。主要解决了如何在拓扑图中定义卷积操作。 Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering Michaël Defferrard,Xavier Bresson,Pierre Vandergheynst.(NIPS 2016) (2016)

文章背景

CNN主要是用于图像的分类。以手写体数据集MINIST为例,输入一张图片,模型会告诉你图片上的是哪一个数字(分类),CNN在图像分类任务上的精度非常高。同时CNN还可以做一些识别或者检测任务,效果也都很不错。

在这篇文章中,最后的实验是使用GCN在MINIST数据集上做了基础的分类任务。图数据中的分类任务主要氛围两种:图分类和节点分类。其中图分类任务的输入是多个图,最后输出这每个图的对应的类别;节点分类任务的输入是一个网络,最终输出网络中的节点各自的所属标签。

我们这里因为要类比图像,所以主要谈论图分类

下面我们就来说明GCN是怎样工作的。而因为GCN可以说是CNN的扩展,所以我们先来简单回顾一下CNN的网络架构。

图3:CNN架构图

对于一个在CNN执行的分类任务:

  1. 输入是一组图片,输出是每张图片对应的类别。
  2. 上图中间一层一层的操作,就是在不断地进行卷积(convolution) + 池化(pooling)的过程。
  3. 卷积是为了强化图像特征信息,池化是在保留图像特征的前提下,提取特征,减少维度。
  4. 最后是几个全连接层,映射为输出。

整个过程最关键的,就是使用卷积核进行的卷积操作,以及池化的过程。

首先卷积层,是定义了一个卷积核( Filter)。卷积核会对图片进行不断的扫描,和扫描到的区域做卷积操作,最终得到一个结果可以看成是这张图的特征。卷积操作有助于我们找到特定的局部图像特征(如边缘强化)。

图3.卷积操作。把图像特征使用定义的卷积核进行特征强化。而为了保证维度不变,所以会在提取前的像素四周补0。 图4.卷积之后的示意

池化层可以理解为对图片做一个缩小的操作。目的是在保留原图特征的前提下,减少图像特征维度,降低训练参数数量级,同时也排除掉图像中的冗余信息。

图5.池化操作。通常使用平均值,最大值、最小值等简单操作完成

说完了CNN,我们再来看看这篇文章中的GCN是怎样的一个架构。同样的我们在它上面执行一个分类任务

图6.GCN架构图

GCN输入和输出

类比图像中的每像素点会有的灰度值,图数据中每个节点也会带有一个“信号值”作为节点的特征。所以在GCN的分类任务里,如果是图分类任务,输入的则是一堆图的信息(包含图中节点的信号值),输出的是每张图对应的分类信息。

图分类也需要分情况,并不是在所有情况下都需要详细的节点信息,比如在引文网中,图的分类主要由节点信息决定,这时候就需要输入节点信息。而在另外一些情况下,节点信息不充分,或者说图的分类主要由图的拓扑结构所决定,那么节点信息就不是一个必备的输入了。

我们这里以图分类任务为例,再来形象的来看一下,这里的“信号”是如何传递的。

图7.GCN的输入示意

如上图所示,每一个红色的点代表网络网络中的一个节点。蓝色的小柱子代表节点携带的信号。每一个节点都有一个属于自己的信号值,也就是节点状态。这个状态可以转化为一个向量来表示。假设我们有m张网络,一个网络有n个节点,若表示节点状态的向量是d维,那么模型的输入就是这些网络的节点的信号值,就意味着输入是一个大小是m * n * d的矩阵。

对应的输出,就是每个网络代表的类别(label),每个类别也可以使用一个向量表示,假设代表类别的输出向量是d',那么模型输出的就是一个大小为m * d'矩阵。整个训练过程要做的,就是要把输入映射成输出。

图上的卷积操作

GCN的卷积,目的和CNN的卷积是类似的,是为了提取输入节点的特征,最终映射为这张图的分类。在图卷积操作中,同样也定义了一个卷积核filter。而这个步骤和CNN最大不同之处在于,图像每个晶格周围链接固定大小的节点,所以CNN的filter可以是固定尺寸的。而在非欧数据中,节点的度大小不尽相同,对于GCN来说,首要任务就是定义出一个可以完成提取特征任务的“卷积核”。

在这里,主要是受到图信号处理领域的启发,利用图谱的理论去实现拓扑图上的卷积。研究者们提出可以把图上的卷积,理解为傅立叶变换在时域上的卷积,对于傅立叶变化来说,时域上的卷积计算,可以将信号转化到频域上再直接进行相乘。

傅立叶变换:把x轴上的周期信号,分解为多个波函数的线性求和(离散的话就是求和,连续的话就是求积分),这就是一个傅立叶变换的过程(即谱分解)

图8. 左边是傅立叶变换的图示(谱分解),右侧是傅立叶变换的公式,f(X)可以被分解为多个f-hat(λ) 乘以基函数

两个函数做卷积其实就是用他们的傅立叶变换(逆变换)的乘积表示

图9. 这里的f和h代表的是两个要做卷积的函数,那么他们的卷积操作,就可以表示成f函数的傅立叶变换(逆变换),乘上h函数的傅立叶变换(逆变换)。

这样有什么好处呢?其实这就意味着,我们不需要像在图像任务中一样,去定义一个显示卷积核,只需要找出卷积核函数的逆傅立叶变换就可以了。

更多详细的谱分解数学原理,可以阅读这篇论文。

"The emerging field of signal processing on graphs: Extending high-dimensional data analysis to networks and other irregular domains," Shuman D. I., Narang S. K., Frossard P..in IEEE Signal Processing Magazine (2013)

本文在这里引入了图谱的理论,主要参考了Kpif的GraphConvNet,用了切比雪夫多项式来定义的卷积。之后还演化出了很多关于图卷积的定义,不过基于图谱的卷积定义依然是经典,之后我们所说的GCN,其实在一定程度上就特指kipf基于之前的工作,提出的一种基于谱分解的图卷积方法,并且在下游分类任务中取得了非常好的效果。

GraphConvNet:kipf, Welling 2016

Semi-Supervised Classification with Graph Convolutional Networks Thomas N. Kipf,Max Welling (2016)

粗粒化、池化

接着就是池化和粗粒化。这里的两个步骤,相当于CNN中的池化操作,目的是为了保留特征的同时提高训练效率。粗粒化可以理解为对图的结构进行精简,这里是使用了Graclus算法通过比对节点的权重,找出相似的节点进行融合,得到一张新的图,新的图可以认为保留了原图的结构信息。然后再对节点信号进行融合和聚类,即池化的步骤,将节点信号融入精简之后的图上。

图10. Graclus算法示意 图11. 图上的粗粒化和池化操作。先固定图的大小(新图大小是一个超参),再对相似节点进行聚合,得到一张新的图。以此类推,完成粗粒化和池化的过程

GCN的效果

GCN可以认为是对CNN的泛化,使其不仅仅局限于在图像领域应用,还能扩展到结构更复杂,数据更庞杂的网络,从而能够完成更多的任务。

之后更多对GCN的研究和扩展都表明了,GCN不仅仅在图像领域效果达到了CNN的水平,比如本文的实验是把GCN这个方法用在了MINIST数据集上),和CNN对比后发现二者在识别任务中的精度相差无几。而且在分类任务上也表现的非常出色

图13. 在MINIST数据集上,graph CNN和经典CNN的表现对比 图14. GCN在不同数据集上做分类任务,对比其他经典模型

结语

基于图数据的任务,除了图上的节点feature之外,图结构也非常重要。为了分析图拓扑结构中包含的信息,GCN借鉴了CNN的卷积操作去聚合邻居的信息,并且受到图谱理论的启发定义了在图上的卷积。之后也出现了图上卷积的更多探索,对GCN进行了简化和扩展。GCN系列模型的发展为我们处理图数据提供了一个非常好的手段,由于图数据在真实世界的广泛存在,GCN的发展可能也意味着我们今后对世界的探索会更加深入,更加透彻。