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

题记

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 上的卷积核的理论基础。我们都知道,在图像处理领域中,我们通常会使用一个窗口,对目标像素及其周围的一圈像素进行加权,计算出新的像素值。

7f76fde3941fcae8739bc7bb13ca5bd9.png
Image 上的滤波器

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

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

dc84761fa6e3d2ed9e88e4f36877dd43.png
拉普拉斯算子用作边缘检测

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

43cee5cd882980cc6ca00e5314ac9c3b.png
1 维信号和 2 维信号的傅里叶展开

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

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

,对于二维信号可以得到
频谱函数

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

d91290a5a9546e92450e2e8e8656e8f6.png
拉普拉斯算子的频谱函数

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

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

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

ce686ed14bd80c5fd1900825eef8c42d.png
Image 上的锐化滤波器

解释和设计图的卷积核

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

这里,给定图

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

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

2cb847c1ca653fa73452f440bcb6d2d3.png
图像上的拉普拉斯卷积核和图上的拉普拉斯卷积核

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

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

其中,

为拉普拉斯算子中第
行第
列的值(第
行代表节点
对应的滑动窗口),当
时,当前节点对应的数值应当为相邻节点的总数,即节点
的度;当
时,该相邻节点与第
个节点相连,因此对应的数值为 1;其他情况(即不相连)的数值为 0。

396fa764ac19bc809b004b23c0ee449c.png
使用拉普拉斯卷积核在图上进行高通滤波

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

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

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

我们知道,图

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

其中,

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

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

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

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

,对
右乘
即可:

即:

0e95e25cb279b073be5cff3d647c7428.png
对低频信息进行保留

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

的值,手动对不同频率的信息进行所需的保留和过滤即可。要设计一个
可以学习的滤波器,最简单粗暴地思路是
的值全部替换为参数

其中,

代表由
构成的对角矩阵。由此可得(非常)
早期图卷积的表达式:

【图信号的傅里叶变换】在图像信号处理中,图像信号也是可以经过拉普拉斯变换,得到频域上的频谱函数的(表达式)。但是图信号
是一组信号强度构成的一维信号,无法使用同样的方法分解。因此,在图谱理论的研究中,我们直接将图信号投影在拉普拉斯矩阵分解得到的基上,作为图信号的频域表达式:

将图信号的频域表达变换回图信号时,利用特征矩阵的正交性
,在频域表达式上左乘
即可:

即:

简化与近似的历史

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

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

因此,图卷积工作者们将

修改为
相关的多项式

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

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

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

进行限制
,令
,从而消掉

近似地,我们令

,则:

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

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

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

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

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

其中

。如果对应到图信号处理中其实就是
均值滤波,起到 降噪模糊化的效果:

a36bf252676bab16ee5f4ba3d01d500a.png
Graph 和 Image 上的均值滤波

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

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

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

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

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

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

如今,这个信号值

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

8e4b4534d9ca5509958a1016c9b60675.png
对高维节点中有效的分量进行卷积

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

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

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

作为滤波器进行卷积:

在层数较深的情况下,

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

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

由于

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

因此,上式可以化简为:

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

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

再谈 GCN 变体中的奇技淫巧

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

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

后记

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

70fa571ded93cc01041aeeaff3828ecb.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值