题记

2019 年,GNN 从来没有这样繁荣过。一方面,计算机视觉、自然语言处理等领域都忽如一夜春风来,反复“发现”了自身潜在的 Graph 结构,与 GNN 融合。另一方面,GNN 基础模型工作者,如同奥林匹克运动员一样,为零点几秒的“进步”而拼尽全力。GNN 的风口似乎随着时间的推移而消散,进入了空气稀薄的高原期。

展望 2020,想要在 GNN 上更进一步,我们需要继承前人海量的实践经验,需要跨专业的知识整合,需要更深入的理论支撑。所幸,尽管道阻且长,GNN 的发展并未停滞,每一篇文章、每一次讨论都在为 GNN 的下一次爆发积蓄着力量。让 2020 从一篇综述或者一本书开始吧,开卷有益。

引言

元旦过后,极验出版的《深入浅出图神经网络》终于开始发货了。感谢 Lynn 运营小姐姐第一时间发给我尝鲜。平心而论,这本书的介绍还是很系统化的:

1-4 章 都是基础内容,作者直接将入门时需要查阅的资料摆上了台面,我当做备用字典跳过了。

5-6 章 从空域和频域两条主线介绍了 GCN 理论体系的发展,公式和推导过程比较完整。

7-9 章 介绍了 GCN 常用的变体,比起论文原作者的介绍添加了不少实现细节的讲解。

第 10 章 作者略写了一些 GCN 的应用场景,如果这本书再版的话这一部分应当是重中之重了。不同任务的特点不同,所用的图构建、图卷积方法还是很有对比和借鉴意义的。

总的来看,这本书是一篇很不错的中文 survey(附代码的那种)。

再谈谱图理论

刚入门 GNN 的时候,我是一个坚定的空域理论支持者,毕竟空域理论下的图卷积简洁实用,很容易在各种任务上讲通。直到去年为止,在研究中发现很多改进方案似乎可以从频域理论更为系统化地得到,因而转向了频域理论。在读过这本书后,笔者更坚定地站在了频域理论一方。下面笔者再结合书中的内容和自己的一些改进思路重新谈一谈谱图理论下的图卷积。

解释和设计图像的卷积核

在讨论 Graph 之前,我们先回顾一下 Image 上的卷积核的理论基础。我们都知道,在图像处理领域中,我们通常会使用一个窗口,对目标像素及其周围的一圈像素进行加权,计算出新的像素值。

Image 上的滤波器

根据这个窗口的权重不同,卷积实现的功能也有所不同。例如,我们可以通过拉普拉斯算子,实现用于边缘检测的滤波器。

后面会说到这种卷积核对应了 GCN 中的

拉普拉斯算子用作边缘检测

为什么拉普拉斯算子这种卷积核能够检测花朵的边缘呢?傅里叶变换从频率域角度给出了解释:物体的边缘颜色变动更为剧烈(红色和绿色相邻处是花朵的边缘,红色和红色相邻处是花朵的内部),拉普拉斯算子保留了图像中颜色变动剧烈的部分(高频),过滤了图像中颜色变动平缓的部分(低频)。

1 维信号和 2 维信号的傅里叶展开

如何对图像中的频率进行定量的描述呢?我们首先使用傅里叶变换变换,将任意源信号拆分成一组不同频率不同幅度的正弦信号(分量)。如上图所示,声波等一维信号可以拆分为不同频率(横线长度)、不同幅度(心形高度)的一维正弦信号;图像等二维信号可以拆分为不同频率(横线长度)、不同方向(箭头方向)、不同幅度(心形高度)的二维正弦信号

正弦信号的幅度描述了源信号在该分量上的占比。我们可以将这些正弦信号(在不同频率和方向上)的幅度记录下来,作为信号的频域表达,对于一维信号可以得到频谱函数

,对于二维信号可以得到

频谱函数

我们对拉普拉斯算子的频谱函数进行可视化,可以看到在低频段,拉普拉斯算子的频谱函数值接近 0,在高频段,拉普拉斯的频谱函数值接近 1:

拉普拉斯算子的频谱函数

我们知道,在空域上的卷积操作,等价于在频域上的乘法。因此,在图像的频谱函数与拉普拉斯的频谱函数相乘后,仅有高频部分(即边缘部分)会被保留下来。

在傅里叶变换的指导下,我们也可以设计出保留低频信号、剔除高频信号的卷积核,用于对图像的模糊化等等。下面这是一个设计用于锐化的卷积核:

后面会说到这种卷积核对应了 GCN 中的

Image 上的锐化滤波器

解释和设计图的卷积核

在 Graph 中,我们如何使用拉普拉斯算子,像在图像中一样进行边缘检测呢?

这里,给定图

表示图中的节点集合,
表示图中边的集合。除了图结构外,图中的每个顶点都带有一属性信息,我们称之为图信号。图信号可以表示成向量的形式:
,其中
表示的是节点
上的信号值(属性值)。

图像中,拉普拉斯算子可以画成滑动窗口,与某像素及其相邻的 8 个像素相乘。在图结构中,节点的相邻节点数量是变化的。这时,应该如何表示拉普拉斯算子呢?

图像上的拉普拉斯卷积核和图上的拉普拉斯卷积核

(规范的话应当用二阶微分来求,这里说说笔者的发现)通过观察,我们发现当前像素对应的数值应当为相邻像素的总数;当周围节点与当前像素相连时,周围像素对应的数值为 -1(一圈 -1);当周围节点与当前像素不相连时,周围像素对应的数值为 0(圈外的 0 没写,但是乘的时候可以当做 0)。

将像素替换为节点,可以写出图上的拉普拉斯算子

其中,

为拉普拉斯算子中第
行第
列的值(第
行代表节点
对应的滑动窗口),当
时,当前节点对应的数值应当为相邻节点的总数,即节点
的度;当
时,该相邻节点与第
个节点相连,因此对应的数值为 1;其他情况(即不相连)的数值为 0。
使用拉普拉斯卷积核在图上进行高通滤波

在图像中,我们令滑动窗口与所有像素进行乘加操作(窗口外像素的可以视为 0 与像素的乘加);相似地,在 Graph 中我们令滑动窗口(拉普拉斯算子的每一行)与所有节点的信号进行乘加操作。因此,使用拉普拉斯在图上进行高通滤波,可以写为

我们手中已经有了一个 Graph 上的拉普拉斯滤波器,如何解释和设计其他 Graph 上的卷积核呢图谱理论登上了历史的舞台。

个人而言,图谱理论最精妙之处就在于,图谱理论用矩阵的特征分解代替了傅里叶变换。这二者惊人的一致:特征分解和傅里叶变换都是正交变换;特征分解的本质是一种改变基底坐标的坐标变换,对应了傅里叶变换在空域和频域间的变换;特征分解中较大的特征值对应矩阵的主要特征,对应了傅里叶变换中数据集中分布在低频分量上等等。

我们知道,图

的拉普拉斯矩阵
是一个对称矩阵,可以被特征分解为:

其中,

表示拉普拉斯矩阵的
个特征向量,
表示第
个特征向量对应的特征值。此时,

特征向量对应傅里叶变换中的(不同频率的正弦信号),特征值对应傅里叶变换中的傅里叶系数(基的幅度)。我们可以写出拉普拉斯矩阵在频域上的表达式:

书中给出了特征向量的可视化(通过将每列特征向量的值用带有长度的线表达),我们可以发现低特征值对应的基(特征向量的列)变换较为平缓(低频),高特征值对应的基波动较大(高频)。

书中可视化特征向量的插图(这本书的插图非常好看)

将拉普拉斯矩阵在频域上的表达式变换回空域时,利用特征分解的表达式

,对
右乘

即可:

即:

对低频信息进行保留

要求改这个滤波器,只需要修改

的值,手动对不同频率的信息进行所需的保留和过滤即可。要设计一个

可以学习的滤波器,最简单粗暴地思路是

的值全部替换为参数

其中,

代表由
构成的对角矩阵。由此可得(非常)

早期图卷积的表达式:

【图信号的傅里叶变换】在图像信号处理中,图像信号也是可以经过拉普拉斯变换,得到频域上的频谱函数的(表达式)。但是图信号

是一组信号强度构成的一维信号,无法使用同样的方法分解。因此,在图谱理论的研究中,我们直接将图信号投影在拉普拉斯矩阵分解得到的基上,作为图信号的频域表达式:

将图信号的频域表达变换回图信号时,利用特征矩阵的正交性

,在频域表达式上左乘
即可:

即:

简化与近似的历史

早期的 GNN 体积庞大,且非常容易过拟合。这是由于

引入了

过多的学习参数(参数量与节点数目一致,在大规模图中是无法使用的);忽视了频段信息的作用(低频信息含有的信息多,而滤波器为每个频段都赋予了需要学习的参数)。

因此,图卷积工作者们将

修改为

相关的多项式

与其之前的方法不同,该方法的参数量(多项式系数的个数)可以由参数

手动控制

越大,
可以拟合的函数次数就越高,函数越复杂(参考泰勒展开);反之则越简单(越接近原始的拉普拉斯滤波)。

在此基础上,图卷积工作者们发现,尽管参数量大大降低,矩阵的特征分解导致 GNN 的时间复杂度过高。一些工作者想到对上式中的

进行限制

,令

,从而消掉

近似地,我们令

,则:

在性能上,虽然单次 GNN 卷积操作是由线性近似推导得到的,但是堆叠多层卷积层,也可以在某种程度上达到高阶多项式形式的效果。

至此,图卷积的空间复杂度和时间复杂度大幅下降,形式也越来越简单。GNN 迎来了爆发期。

蓦然回首,我们发现最终的卷积形式不过是从拉普拉斯卷积核推导出了一种新的卷积核(和上文图像信号处理中用于锐化的卷积核相似),并在卷积核上(或者理解为在卷积结果上)使用待学习的参数进行了变换

现在可用的卷积核可以说是百花齐放了,除了上文中介绍的基于拉普拉斯算子的高通滤波

,一些

低通滤波也取得了很好的效果。最常见的就是通过正则化防止梯度爆炸/弥散的对称正则化滤波器:

其中

。如果对应到图信号处理中其实就是

均值滤波,起到降噪模糊化的效果:

Graph 和 Image 上的均值滤波

我们可以这样想:在图像中,每个节点的周围像素有 8 个,添加 1 个自身即为 9。窗口中的每个值为

也有的工作会把所有卷积核形式尝试一遍进行对比,但是其实效果都差不多(毕竟在卷积核的基础上还有待学习的参数可以对卷积核进行调整),对比上文中低通滤波和高通滤波一般就可以找到适合的算子,其他变体的差异不大。

个人认为,在正常情况下(不容易过拟合的情况下),GAT 应该能够不依赖任何先验卷积核学习一个新的卷积核,值得优先使用

图谱理论的残留问题:高维图信号

回到问题的开始,我们发现图谱理论的开创者们似乎从未料到如今 GNN 的盛况。图信号被认为可以表示成向量的形式:

,其中
表示的是节点
上的信号值。

如今,这个信号值

早已不再是一个数值,甚至不再是一个向量。使用 1 个 channel 的卷积核全量地传递图信号已然捉襟见肘。在很多视觉任务中,一个节点表示 Image 中的一块 Region,是一个具有
形状的 Tensor。为了保证 Tensor 中只有任务相关的数值通过图结构进行传递:
对高维节点中有效的分量进行卷积

工作者们想出了各种各样的操作:先对 Region 进行 Pooling/Attention,再设计一个高维度的边做 Attention 等等。其实,类似于 PCA --> 2D PCA 或是 Conv2d --> Conv3d,我们也可以设计更高维的局部图谱卷积核。

图谱理论的残留问题:over-smooth

从频域考虑,GNN 的 over-smooth 问题非常理所当然。假设我们忽略待学习的参数(对先验卷积核进行微调的参数)的影响,在一个图上多次使用

作为滤波器进行卷积:

在层数较深的情况下,

我们知道当图为全连通图,且仅包含一个连通分量时,

。当
时,
,当
时,
。我们按照从小到大顺序排列
及其特征向量,当
时:

由于

。可以得到特征值 0 对应的特征向量为
(即,值全部为
的列向量)。再通俗一点,
的第一列值为
的第一行值为

因此,上式可以化简为:

可以发现无限次的滤波器叠加后,滤波器窗口中的每一个值都趋向于

会令每一个节点上的信号值变为以度为权的所有节点信号值的加权平均。解决方法已经在知乎回答中讨论过了,因此不再赘述。

再谈 GCN 变体中的奇技淫巧

TODO 正准备将阅读过程中写的 notebook 上传。

TODO 准备谈一谈我的封装与加速。

后记

在过去的 2019 年,无论是图书还是讲座,都能看得出极验在图卷积领域的大力投入。新的一年祝愿领域内的小伙伴也能硕果累累,逢投必中~ 最后再放一个《深入浅出图神经网络》的海报:

拉普拉斯算子属于卷积方法吗_2020 年 GNN 开卷有益与再谈图卷积相关推荐

  1. 【Pytorch神经网络理论篇】 26 基于空间域的图卷积GCNs(ConvGNNs):定点域+谱域+图卷积的操作步骤

    图卷积网络(Graph Convolutional Network,GCN)是一种能对图数据进行深度学习的方法.图卷积中的"图"是指数学(图论)中用顶点和边建立的有相关联系的拓扑图 ...

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

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

  3. 拉普拉斯算子属于卷积方法吗_论文笔记 - 图卷积神经网络综述

    文献题目:图卷积神经网络综述 文献来源:计算机学报,2019 文献原文:https://kns.cnki.net/kcms/detail/11.1826.tp.20191104.1632.006.ht ...

  4. python 图像处理 拉普拉斯算子的实现和改进-LoG和DoG算子

    拉普拉斯算子 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性. 我们经常把它作为边缘检测之一,也是工程数学中常用的一种积分变换,也可以用于图像增强.角点检测等等. 这里只给出它的代码,原理可 ...

  5. 图卷积神经网络1-谱域图卷积:拉普拉斯变换到谱域图卷积

    知乎主页 备注:本篇博客摘自某培训机构上的图神经网络讲解的视频内容,该视频关于图神经网络入门讲解.经典算法的引入和优缺点的介绍比较详细,逻辑主线也比较清晰.因此记录分享下. 目录: 图卷积近年发展 图 ...

  6. 【Pytorch神经网络理论篇】 25 基于谱域图神经网络GNN:基础知识+GNN功能+矩阵基础+图卷积神经网络+拉普拉斯矩阵

    图神经网络(Graph Neural Network,GNN)是一类能够从图结构数据中学习特征规律的神经网络,是解决图结构数据(非欧氏空间数据)机器学习问题的最重要的技术. 1 图神经网络的基础知识 ...

  7. 算法设计与智能计算 || 专题八: 拉普拉斯算子与图拉普拉斯

    拉普拉斯算子与图拉普拉斯 文章目录 拉普拉斯算子与图拉普拉斯 1. 拉普拉斯基本概念与计算 1.1 哈密尔顿算子 1.2 梯度(gradient) 1.3 散度(divergence) 1.4 拉普拉 ...

  8. 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导

    文章目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral domai ...

  9. GCN图卷积神经网络综述

    文章目录 一.GNN简史 二.GCN的常用方法及分类 2.1 基于频域的方法 2.2 基于空间域的方法 2.3 图池化模块 三. GCN常用的基准数据集 四.GCN的主要应用 4.1 计算机视觉 4. ...

最新文章

  1. Android studio中2种build.gradle文件介绍
  2. String常用方法大全(深入源码层面分析)
  3. 二维高斯滤波器(gauss filter)的实现
  4. 移动开发--移动web特别样式处理
  5. python基本代码教程-(Python基础教程之三)Python代码中添加注释
  6. 谷歌浏览器去除广告--广告终结者
  7. 产品补丁包测试的基本流程
  8. 计算机wifi共享怎么设置,笔记本电脑设置wifi热点共享教程
  9. Scrum板与Kanban如何抉择?敏捷工具:SHSYdsjgyadtgad
  10. 《视觉SLAM十四讲》-第五章第1节-1-“相机与图像”-“相机模型”-“针孔相机模型”-学习笔记总结
  11. 人脸识别撞脸名画_人脸识别_“名画匹配”刷爆屏 想知道你和哪副名画撞脸了吗...
  12. 如何学IT?零基础入门自学Java编程系列:java简介跟计算机常识
  13. 平面设计简化布局的要点是什么
  14. 阿里王坚:每一个物体都将是互联网终端
  15. 高中计算机教学工作计划,2017高中信息技术教学工作计划
  16. C#最小二乘法进行曲线拟合及相关系数
  17. 解决Windows 由于路径过长而无法删除文件的问题
  18. 为什么http请求会缓存?显示from disk cache?
  19. 英语期刊写作-通往国际学术舞台的阶梯第八,九章答案
  20. 前端vue3+typescript搭建vite项目(初识vite+项目配置完善+屏幕适配)

热门文章

  1. Adaboost、RandomFrest、GBRT的区别
  2. golang []byte和string相互转换
  3. Silverlight+WCF+ArcObjects获取地图服务图层列表的实现
  4. 模拟电子技术不挂科学习笔记3(放大电路的分析方法)
  5. Python稳基修炼的经典案例9(计算机二级、初学者必会turtle库例题)
  6. y7000怎么刷电池固件_redmi(红米)AC2100,刷老毛子固件
  7. Python在SQLite数据库中动态创建数据表的思路与实现
  8. 黑客走开系列1:Python使用元组做函数实参让代码更安全!
  9. 全国Python科研应用专题实操培训班
  10. Python批量修改Excel文件格式:加粗、颜色交替、渐变背景色填充