![cafdf8679aa24bdd42f970007d49b25a.png](https://i-blog.csdnimg.cn/blog_migrate/f19c9b6763fabc3e49a42a9176fa3bbd.jpeg)
这篇文章主要介绍图卷积神经网络,主要参考[1],中间还包含了很多个人的理解。论文中还有很多点,我理解得还不是很通透,如果错误,欢迎指出。请多多指教。
Spectral Networks and Locally Connected Networks on Graphsarxiv.org一、简介
这篇文章是最早提出将CNN扩展到图上,直接处理图类型的数据而不需要对图类型的数据进行转化。在之前的一篇文章[2]中,我讲过欧式空间和非欧式空间的区别。CNN一般作用与欧式空间,无法直接作用于非欧式空间。CNN具有以下几个特点:
- 权重共享:同一个卷积核可以作用于不同的位置。
- 局部性:欧式空间可以简洁的支持卷积核(直接根据卷积公式计算卷积结果即可),卷积核的大小一般远小于输入信号的大小。
- 多尺度:CNN往往包含下采样,可以减少参数,并获得更大的感受野(receptive field)。
文章中,作者提出了两种方式构建图卷积神经网络:空域构建(Spatial Construction)和频域构建(Spectral Construction)。
二、空域构建(Spatial Construction)
空域构建主要考虑(2)(3)两点,即CNN多尺度,层次,局部感受野的特点。
首先,我们先定义一个有权重的无向图
空域卷积(Spatial Convolution)
![717bceb2df1f1e5cbe3a7e57274e6664.png](https://i-blog.csdnimg.cn/blog_migrate/94ac039f6f7d3dc4b6c074bbea502261.png)
如图1所示,我们要对结点6做卷积,和结点6相邻的结点有结点1和结点5(包括自身,结点6),即
卷积的输入的结点特征可能是一个向量,维度记为
转化成矩阵形式,可以写成:
Pooling层实现
CNN通过pooling和下采样层,减小特征图的尺寸。在图上,同样可以使用多尺度聚类的方式,来获得层次结构。图2展示了一个图的多尺度聚类。
![9745c6f785ca10a8a58fc1b317d262f1.png](https://i-blog.csdnimg.cn/blog_migrate/a468afcf468be3135f8b4e9fd92a2bf3.jpeg)
根据聚类结果,我们可以构造这样一个矩阵
![93ed5a7b5a3e39cd586bd4d3554149ef.png](https://i-blog.csdnimg.cn/blog_migrate/2acdf75baa41cbc58f4c0ba2f67e2478.png)
因此我们通过
多层空域卷积
现在我们考虑有K个尺度。第0个尺度表示原始的图,即
我们定义layer
加入pooling层之后,输出结果
这里
图4展示了空域卷积的构建方式。
![13a649d1b1a175e31e78d0d7d7ef63f3.png](https://i-blog.csdnimg.cn/blog_migrate/80a68c49e3585e402c4c7716d47fe648.jpeg)
假设
使用空域构建,我们实现了CNN的特点(2)(3),但是很难实现特点(1)权重共享。从公式中我们可以看出,对于每个结点,卷积的权重是不同的。但是对于图像中的卷积,不同位置的卷积核的权重是共享的。主要的原因是在图G上无法使用传统的卷积公式
三、频域构建(Spectral Construction)
既然在空域中,不好进行卷积。能不能将图转化到另一个空间(频域)来实现卷积操作呢?根据卷积定理,在空域(时域)中的卷积等于在频域中直接相乘:
这里
因此,我们需要找到一组傅里叶变换的基,将图从空域转到这组基所表示的频域空间。我们通过构建拉普拉斯矩阵来找到一组傅里叶变换的基。其实拉普拉斯矩阵就是图上的拉普拉斯算子。
![5677639cd3f2a57d1dc2bf362a13e83b.png](https://i-blog.csdnimg.cn/blog_migrate/2288b6c7f521203c4c14eee0e06d5564.jpeg)
如图5所示,我们构造这样两个矩阵。
度数矩阵
邻接矩阵
那么拉普拉斯矩阵L可以写成是:
这里我们使用的是无向图,所以L是对称矩阵。因此
这里特征向量
因此,图的卷积公式,从空域转换到频域,可以表示为:
这里可以将
加入通道和激励函数后,第
这里
通常,我们根据特征值的大小选择前
此外,作者还提出使用三次样本插值来增加平滑约束,因此卷积核
这里
四、数值实验
这里作者通过两个数字实验来证明模型的有效性。实验的数据集是MNIST。第一个实验是从原始
![996d668905e755023ec28d006a9bbaf8.png](https://i-blog.csdnimg.cn/blog_migrate/a53ae4f59ce7ac34278275f1ae1d0b73.jpeg)
![c48cad47a351a789b7d491b71543f340.png](https://i-blog.csdnimg.cn/blog_migrate/d60d0c7357793a907badf40cbdffe561.jpeg)
![1d4505219722b7d8df3b71d5de6ca5f3.png](https://i-blog.csdnimg.cn/blog_migrate/2bbda6e660509251a8b90d57ad2bdb8b.jpeg)
这里分别使用Nearest Neighbor分类器,两层全连接神经网络作为对比模型。第一个实验的结果如表1所示,FC
![36d9897665ebc8eab5e7e92bca6a0bc2.png](https://i-blog.csdnimg.cn/blog_migrate/c1b6bdff972c44edeeaf77f062a2deea.jpeg)
MNIST中的数字由笔画构成,具有局部性。空域卷积明确地满足这一约束,而频域卷积并没有强制具有空间局部性,如图9(c)(d)所示。添加平滑约束后,频域卷积的结果有所提升,由于卷积核被约束,获得更好的空间局部性,如图9(e)(f)所示。
![aa6c9f40ccdd0b98148e3206c9a345ad.png](https://i-blog.csdnimg.cn/blog_migrate/d0a19f32786ee70217b0648093b388e5.jpeg)
五、实现
文章中的图卷积神经网络的实现代码见https://github.com/Ivan0131/gcn_demo,使用tensorflow2.0实现。Pooling层被我改成了avg pooling,由于max pooling的实现比较繁琐,avg pooling会让代码简洁很多。实现的效果离论文中的结果还是有点差距。
六、总结
这篇文章,介绍了两种构建图卷积的方式:空域卷积和频域卷积。其它论文中实现的图卷积,基本也可以归到这两类上。希望通过对这篇文章的介绍,可以帮助大家更好地理解图卷积。
[1] Spectral Networks and Deep Locally Connected Networks on Graphs https://arxiv.org/abs/1312.6203
[2] 图神经网络:The Graph Neural Network Model https://zhuanlan.zhihu.com/p/85768094
[3] 图卷积网络(GCN)新手村完全指南 https://zhuanlan.zhihu.com/p/54505069
[4] 拉普拉斯矩阵与拉普拉斯算子的关系 https://zhuanlan.zhihu.com/p/85287578
[5] Laplacian matrix https://en.wikipedia.org/wiki/Laplacian_matrix