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)。
将像素替换为节点,可以写出图上的拉普拉斯算子:
其中,
在图像中,我们令滑动窗口与所有像素进行乘加操作(窗口外像素的可以视为 0 与像素的乘加);相似地,在 Graph 中我们令滑动窗口(拉普拉斯算子的每一行)与所有节点的信号进行乘加操作。因此,使用拉普拉斯在图上进行高通滤波,可以写为:
我们手中已经有了一个 Graph 上的拉普拉斯滤波器,如何解释和设计其他 Graph 上的卷积核呢?图谱理论登上了历史的舞台。
个人而言,图谱理论最精妙之处就在于,图谱理论用矩阵的特征分解代替了傅里叶变换。这二者惊人的一致:特征分解和傅里叶变换都是正交变换;特征分解的本质是一种改变基底坐标的坐标变换,对应了傅里叶变换在空域和频域间的变换;特征分解中较大的特征值对应矩阵的主要特征,对应了傅里叶变换中数据集中分布在低频分量上等等。
我们知道,图
其中,
书中给出了特征向量的可视化(通过将每列特征向量的值用带有长度的线表达),我们可以发现低特征值对应的基(特征向量的列)变换较为平缓(低频),高特征值对应的基波动较大(高频)。
书中可视化特征向量的插图(这本书的插图非常好看)将拉普拉斯矩阵在频域上的表达式变换回空域时,利用特征分解的表达式
即:
要求改这个滤波器,只需要修改
其中,
【图信号的傅里叶变换】在图像信号处理中,图像信号也是可以经过拉普拉斯变换,得到频域上的频谱函数的(表达式)。但是图信号是一组信号强度构成的一维信号,无法使用同样的方法分解。因此,在图谱理论的研究中,我们直接将图信号投影在拉普拉斯矩阵分解得到的基上,作为图信号的频域表达式:
将图信号的频域表达变换回图信号时,利用特征矩阵的正交性,在频域表达式上左乘即可:
即:。
简化与近似的历史
早期的 GNN 体积庞大,且非常容易过拟合。这是由于
因此,图卷积工作者们将
与其之前的方法不同,该方法的参数量(多项式系数的个数)可以由参数
在此基础上,图卷积工作者们发现,尽管参数量大大降低,矩阵的特征分解导致 GNN 的时间复杂度过高。一些工作者想到对上式中的
近似地,我们令
在性能上,虽然单次 GNN 卷积操作是由线性近似推导得到的,但是堆叠多层卷积层,也可以在某种程度上达到高阶多项式形式的效果。
至此,图卷积的空间复杂度和时间复杂度大幅下降,形式也越来越简单。GNN 迎来了爆发期。
蓦然回首,我们发现最终的卷积形式不过是从拉普拉斯卷积核推导出了一种新的卷积核(和上文图像信号处理中用于锐化的卷积核相似),并在卷积核上(或者理解为在卷积结果上)使用待学习的参数进行了变换。
现在可用的卷积核可以说是百花齐放了,除了上文中介绍的基于拉普拉斯算子的高通滤波
其中
我们可以这样想:在图像中,每个节点的周围像素有 8 个,添加 1 个自身即为 9。窗口中的每个值为
也有的工作会把所有卷积核形式尝试一遍进行对比,但是其实效果都差不多(毕竟在卷积核的基础上还有待学习的参数可以对卷积核进行调整),对比上文中低通滤波和高通滤波一般就可以找到适合的算子,其他变体的差异不大。
个人认为,在正常情况下(不容易过拟合的情况下),GAT 应该能够不依赖任何先验卷积核学习一个新的卷积核,值得优先使用。
图谱理论的残留问题:高维图信号
回到问题的开始,我们发现图谱理论的开创者们似乎从未料到如今 GNN 的盛况。图信号被认为可以表示成向量的形式:
如今,这个信号值
工作者们想出了各种各样的操作:先对 Region 进行 Pooling/Attention,再设计一个高维度的边做 Attention 等等。其实,类似于 PCA --> 2D PCA 或是 Conv2d --> Conv3d,我们也可以设计更高维的局部图谱卷积核。
图谱理论的残留问题:over-smooth
从频域考虑,GNN 的 over-smooth 问题非常理所当然。假设我们忽略待学习的参数(对先验卷积核进行微调的参数)的影响,在一个图上多次使用
在层数较深的情况下,
我们知道当图为全连通图,且仅包含一个连通分量时,
由于
因此,上式可以化简为:
可以发现无限次的滤波器叠加后,滤波器窗口中的每一个值都趋向于
TODO 正准备将阅读过程中写的 notebook 上传。
TODO 准备谈一谈我的封装与加速。
在过去的 2019 年,无论是图书还是讲座,都能看得出极验在图卷积领域的大力投入。新的一年祝愿领域内的小伙伴也能硕果累累,逢投必中~ 最后再放一个《深入浅出图神经网络》的海报: