这篇文章主要介绍图卷积神经网络,主要参考[1],中间还包含了很多个人的理解。论文中还有很多点,我理解得还不是很通透,如果错误,欢迎指出。请多多指教。

Spectral Networks and Locally Connected Networks on Graphs​arxiv.org

一、简介

这篇文章是最早提出将CNN扩展到图上,直接处理图类型的数据而不需要对图类型的数据进行转化。在之前的一篇文章[2]中,我讲过欧式空间和非欧式空间的区别。CNN一般作用与欧式空间,无法直接作用于非欧式空间。CNN具有以下几个特点:

  1. 权重共享:同一个卷积核可以作用于不同的位置。
  2. 局部性:欧式空间可以简洁的支持卷积核(直接根据卷积公式计算卷积结果即可),卷积核的大小一般远小于输入信号的大小。
  3. 多尺度:CNN往往包含下采样,可以减少参数,并获得更大的感受野(receptive field)。

文章中,作者提出了两种方式构建图卷积神经网络:空域构建(Spatial Construction)和频域构建(Spectral Construction)。

二、空域构建(Spatial Construction)

空域构建主要考虑(2)(3)两点,即CNN多尺度,层次,局部感受野的特点。

首先,我们先定义一个有权重的无向图

,这里
表示结点,大小为
表示边,大小为
,是一个对称的非负矩阵。因此结点
的相邻结点可以表示为:

空域卷积(Spatial Convolution)

图1 空域卷积示意图。对结点6做卷积,其实就是对及结点6的相邻结点做加权求和。

如图1所示,我们要对结点6做卷积,和结点6相邻的结点有结点1和结点5(包括自身,结点6),即

。因此对结点6做卷积可以表示为
表示每个结点的特征,
表示卷积的权重。因此对某个结点
做卷积,可以表示为:

卷积的输入的结点特征可能是一个向量,维度记为

。同时,一次卷积操作可能包含多个卷积核,即卷积的通道数
。类似与图像中的卷积,对输入特征的每一维做卷积,然后累加求和,就可以得到某个通道
的卷积结果,公式如下所示:

转化成矩阵形式,可以写成:

Pooling层实现

CNN通过pooling和下采样层,减小特征图的尺寸。在图上,同样可以使用多尺度聚类的方式,来获得层次结构。图2展示了一个图的多尺度聚类。

图2 无向图G包含了两层聚类。原始的点用灰色表示。

根据聚类结果,我们可以构造这样一个矩阵

,行表示cluster,列表示结点,矩阵中的元素表示每个结点对聚类中心的权重,如果是求平均的话,就是1除以类中结点数,图3显示展示了一个例子。
图3 矩阵L举例

因此我们通过

就可以得到avg pooling后的输出结果。同样,矩阵
可以标注每个cluster最大值所在的结点。这样,我们通过
得到max pooling后的输出结果。

多层空域卷积

现在我们考虑有K个尺度。第0个尺度表示原始的图,即

,对于之后的每个尺度的特征图,定义为
。聚类算法会把图
分成
个类,
为原始图的结点数量
。因此图
中每个结点的相邻结点可以定义为:

我们定义layer

,卷积核的数量为
。因此网络的layer
维特征转化为
维特征。假设,
是layer
的输入,大小为
是layer
结点的数量,
是layer
特征的维度(卷积核的数量),卷积输出结果
可以定义为:

加入pooling层之后,输出结果

可以定义为:

这里

是大小为
的稀疏矩阵,非零向量的位置由
给定,h是非线性激励函数。
表示输出图
中每个类的pooling操作的结果。
可以通过以下方式构建:

图4展示了空域卷积的构建方式。

图4 Spatial Construction,K=2。出于展示的目的,pooling操作跟卷积操作合并在了一起。每一层空间尺度变小了,但是卷积核的数量变多了。

假设

是图
中每个结点的平均相邻结点的数量,即
的平均support。因此,layer
的参数数量为
,这里
就是矩阵
中非零元素的数量。

使用空域构建,我们实现了CNN的特点(2)(3),但是很难实现特点(1)权重共享。从公式中我们可以看出,对于每个结点,卷积的权重是不同的。但是对于图像中的卷积,不同位置的卷积核的权重是共享的。主要的原因是在图G上无法使用传统的卷积公式

计算,之前的内容只是近似的实现了卷积的操作。

三、频域构建(Spectral Construction)

既然在空域中,不好进行卷积。能不能将图转化到另一个空间(频域)来实现卷积操作呢?根据卷积定理,在空域(时域)中的卷积等于在频域中直接相乘:

这里

是傅里叶变换和傅里叶逆变换。关于卷积,傅里叶变换、拉普拉斯矩阵的更多详细内容可以参考[3][4]。

因此,我们需要找到一组傅里叶变换的基,将图从空域转到这组基所表示的频域空间。我们通过构建拉普拉斯矩阵来找到一组傅里叶变换的基。其实拉普拉斯矩阵就是图上的拉普拉斯算子。

图5 拉普拉斯矩阵,图片来自[5]

如图5所示,我们构造这样两个矩阵。

度数矩阵

(Degree matrix):

邻接矩阵

(Adjacency matrix):

那么拉普拉斯矩阵L可以写成是:

这里我们使用的是无向图,所以L是对称矩阵。因此

可以按照如下公式进行分解:

这里特征向量

就是我们要找的一组傅里叶变换的基,特征值
是对应的特征向量所占的比重。通过这组傅里叶变换的基,我们可以将输入
从空域转到频域,

因此,图的卷积公式,从空域转换到频域,可以表示为:

这里可以将

整体看成一个可以学习的卷积核,记为
,因此最终的卷积公式可以表示成:

加入通道和激励函数后,第

层卷积可以写成:

这里

是一个对角矩阵:

通常,我们根据特征值的大小选择前

个特征向量作为一组傅里叶变换的基,
。在保证精度的情况下,减少参数量和计算量,同时可以去除高频噪声。因此,频域卷积的参数量为

此外,作者还提出使用三次样本插值来增加平滑约束,因此卷积核

的参数可以表示为:

这里

是大小为
的三次样本核函数,
个样条参数。假设采样的步长正比于结点数量,
。则,频域卷积的参数可以减少为:

四、数值实验

这里作者通过两个数字实验来证明模型的有效性。实验的数据集是MNIST。第一个实验是从原始

的图片中随机采样400个像素点,结果如图6所示。这些像素点虽然还是有2-D结构,但是无法使用标准的卷积。图7展示了实验一构建的图的层次聚类结果;图8展示了图拉普拉斯矩阵的两个特征向量。第二个实验见论文[1]。
图6 下采样MNIST数字举例
图7 层次聚类的结果。(a)k=1最细粒度的聚类结果 (b)k=3的聚类结果
图8 图拉普拉斯矩阵的两个特征向量u2,u20

这里分别使用Nearest Neighbor分类器,两层全连接神经网络作为对比模型。第一个实验的结果如表1所示,FC

表示全连接层(
维输出),LRF
表示空域卷积(
维输出),MP
表示max-pooling层(
维输出),SP
表示频域卷积(
维输出):
表1 400个随机点下采样MNIST的分类结果

MNIST中的数字由笔画构成,具有局部性。空域卷积明确地满足这一约束,而频域卷积并没有强制具有空间局部性,如图9(c)(d)所示。添加平滑约束后,频域卷积的结果有所提升,由于卷积核被约束,获得更好的空间局部性,如图9(e)(f)所示。

图9 空域和频域卷积在下采样MNIST上学习得到的卷积核。(a)(b)在两个不同的cluster中编码相同的特征的两个不同的感受野。(c)(d)频域卷积学习得到的卷积核。(e)(f)带平滑约束的空域卷积学习得到的卷积核。

五、实现

文章中的图卷积神经网络的实现代码见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

时域上的乘积等于频域上的卷积_图卷积神经网络:Graph Convolutional Networks相关推荐

  1. 时域上的乘积等于频域上的卷积_时频域分析的一些常用概念补充(线性时不变系统、卷积、冲激响应、窗函数等)...

    在时频域分析中,需要先铺垫几个概念.分别是相加性.齐次性.时不变.卷积.冲击响应.下述内容将尽量通俗易懂,减少公式堆砌,可能会有不严谨之处. 1.相加性和齐次性 由于这两个概念是线性系统必须满足的两个 ...

  2. 3600000毫秒等于多少小时_科学家解密!你知道月球上一天等于地球上多久吗?...

    大家有没有想过在月球上呆一天,相当于在地球上是多少天呢?科学家通过一系列研究得出了惊奇的数字. 月球是太阳系中的第五大的卫星,也是地球唯一的天然卫星.月球的直径是地球的四分之一,质量是地球的八十分之一 ...

  3. matlab 离散傅里叶变换_时域上的采样VS频域上的周期延拓。用离散傅里叶变换直观地演示...

    数字信号处理DSP基本原理之一:采样时间信号的频谱具有周期性,且周期与采样率相等. 这个结论可以帮助我们在大脑中构建这样的一幅图像: 时域的动态采样,相当于在频域进行周期延拓,延拓的周期与时域采样率相 ...

  4. 图卷积 节点分类_在节点分类任务上训练图卷积网络

    图卷积 节点分类 This article goes through the implementation of Graph Convolution Networks (GCN) using Spek ...

  5. 图卷积在语义分割上的应用(论文集)

    文章目录 2018 Graph-Based Global Reasoning Networks 2019 Graph-FCN for image semantic segmentation Dual ...

  6. 【Mo 人工智能技术博客】图卷积网络概述及其在论文分类上的应用

    近年来,深度学习在计算机视觉.自然语言处理等领域大放异彩.这些领域所面对的数据都是结构化的,如图像.音频.文本等,它们内部都有明确的排列规则.结构化的数据由于具有这些确定的规则而方便处理,但是在现实生 ...

  7. 【音频处理】从时域和频域上分别改变音频的响度

    时域上尝试 如原始音频时域如下: 假如将所有数据乘上5. 可以发现有些地方都"破音"了. for (int i = 0; i < N; ++i) {in[i] = in[i] ...

  8. 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。

    已知数据文件IN13.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位 ...

  9. 设位于第一象限的曲线y=f(x)上的任一点P(x,y)的切线在x轴上的截距等于该点发现在y轴上截距的相反数,且曲线经过(1,0),求该曲线

    高数微分方程题目:设位于第一象限的曲线y=f(x)上的任一点P(x,y)的切线在x轴上的截距等于该点发现在y轴上截距的相反数,且曲线经过(1,0),求该曲线.

  10. 输出所有水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。

    /* 输出所有的水仙花数,所谓水仙花数是指一个三位数,其各个位上数字立方和等于其本身 例如:153=1*1*1+5*5*5+3*3*3 */ class FlowerTest  {     publi ...

最新文章

  1. 博士后工作站来了!智源研究院获得正式授牌
  2. python nose(二)
  3. PowerDesigner设计数据库
  4. JavaScript中map函数和filter的简单举例
  5. 为什么阿里工程师纷纷在内网晒代码?
  6. 作业3-6 查询水果单价
  7. Python3实现红黑树[上篇]
  8. function好的写法
  9. 计算机 游戏第24级,“24点”游戏五级竞赛法
  10. 软件工程经济学知识点总结
  11. 苹果手机录屏软件_4款手机录屏软件推荐,你觉得哪款更好用?
  12. opencv国内快速下载
  13. 友声条码秤对接软件_友声条码秤调试教程
  14. 云夜卡社区源码v4.2 带总控
  15. 个人资源小仓库之【工具】!
  16. 通过Navicat for MySQL导入数据时,日期时间错误问题解决办法
  17. sudo no tty present and no askpass program specified
  18. gridControl控件的gridView实现全选
  19. ssm框架搭建之ss框架
  20. 从勾股定理到立方公式的整数解

热门文章

  1. 关于 API 定义 安全
  2. Codeforces 448 D. Multiplication Table
  3. 实现MySQL的Replication
  4. 每天30分钟搞Software Rendering--(0)搜集资料,阅读,了解
  5. java 操作linux_java程序里调用linux命令
  6. 拓端tecdat|自然语言处理NLP:主题LDA、情感分析疫情下的新闻文本数据
  7. 拓端tecdat|基于r语言的疾病制图中自适应核密度估计的阈值选择方法案例
  8. Hystrix服务降级、服务熔断介绍
  9. 机床使用教学_2020清河正规ug加工培训16年研发教学行业-工之艺
  10. 重启docker容器命令