原创:袁一歌
前言导语
图结构数据 (Graph) 广泛的存在于我们的日常生活之中,从社交网络错综复杂的人际关系,到化学分子键键相连的结构特征。图卷积神经网络(Graph Convolutional Network, GCN) 正是一类对这种图结构数据进行建模的算法。本文《图卷积神经网络打怪升级之路》将从 GCN 的诞生以及三代 GCN 的进阶升级的角度对图卷积领域进行简要介绍,下面让我们开始吧~
从 CNN 到 GCN
CNN 卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN),是一类包含卷积计算且具有深度结构的神经网络,自1998年 Yann LeCun 等人构建出 LeNet 并成功应用于手写数字识别任务之后,已经成为视觉领域一大杀器,在各种任务上表现出色。下图为 LeNet 模型架构图,可以看出 LeNet 输入是原始图像,经过多层卷积核的卷积操作,不断提取特征图,最终输出原始图像的表示向量。
图数据的非欧性
CNN 成功之后,很多学者开始思考:卷积能否应用于图(Graph)的网络结构之中? 解决这个问题的第一步,是思考图(Graph)与图像(Image)的联系与区别。Graph 与 Image 的联系在于 Image 可以看做一种特殊的 Graph,每个像素点看做一个节点,相邻的像素点直接认为存在连边,即密布整齐排列的 grid-graph。
基于此,Graph 与 Image 的区别便昭然若现:Image 中每个像素节点其邻居,即存在连边直接相连的节点数量都是固定的,然而 Graph 节点邻居数量不固定。上述区别提炼到数学领域可以表达为:图是非欧空间而图像是欧式空间1 。


看到现在,很多同学可能会问:欧式空间有什么影响呢,Graph 不是欧式空间会给卷积运算带来什么问题?实际上,非欧空间对于卷积的影响在于卷积核的定义。
回顾一下 CNN 的卷积与卷积核,卷积核定义为 n*n 大小的矩阵并在 Image 上扫描游走。如下图所示的二维卷积运算,其 Image 大小为 5*5,在大小为 3*3 的卷积核的扫描下,得到了大小为 3*3 的特征图。正是因为该Image 数据是像素点整齐排布的欧式空间,每个像素点只与周围的 8 个像素点固定相连,其卷积核才可以被定义并游走扫描。试想一下,如果该 Image 排布不规则,可以与很远的某个像素点存在连边,但与相邻的像素点不存在连边,那么这个 3*3 的卷积核便失去了意义:因为卷积核体现的是感受的范围,感受到的是与中心像素相关联的像素点,而并非无关的像素点。

GCN 核心问题
上文说到:图(Graph)是非欧空间,图的空间不规则,其邻域数量不固定,不便于卷积核的定义;而图像(Image)是典型的欧几里得空间,其空间是规则的,其邻域是确定的,便于卷积核的定义。至此,GCN的研究问题就变成:如何克服非欧性,定义 Graph 上的卷积?
下面将介绍的内容是 GCN 的三代打怪升级之路:SCNN -> Chebynet -> 3rd GCN2。这里需要解释一下,打怪的“怪”指的是每代模型存在的问题与弊端,下一代解决了上一代的弊端,不断完善优化,就是GCN 的打怪升级之路。
SCNN: 开山之作
概述简介
《Spectral Networks and Deep Locally Connected Networks on Graphs》这篇论文是 GCN 的开山之作,提出了谱域 GCN 的第一代模型 SCNN。SCNN 利用谱域变换3定义了Graph 上的卷积核。谱域变换简单来讲可以理解为:在当前空间,Graph 数据为非欧空间,难以定义卷积核;那么将 Graph 数据进行某种空间变换,变换到欧式空间不就可以了?而 SCNN 的这个“某种空间变换”,正是利用了谱图理论中图傅里叶变换与图卷积定理的相关知识,将 Graph 数据投射到了谱域。在谱域下,Graph 是欧式空间,可以定义卷积核,可以进行卷积运算。
模型设计
第一代图卷积神经网络 SCNN 卷积计算公式如下,其利用图傅里叶变换与图的卷积定理,直接将卷积核进行参数化。其中, U U U 为 Graph 拉普拉斯矩阵特征向量,利用 U T U^{T} UT与图数据相乘代表图傅里叶变换,目的是将非欧的空域 Graph 数据变换到欧式的谱域; g θ g_{\theta} gθ 为卷积核,其中每一个参数 t h e t a theta theta 都为可学习的卷积核参数; f f f 为输入的图上信号(特征)。
( f ∗ G g ) = U ( U T g ⊙ U T f ) Let g θ = d i a ( U T g ) then ( f ∗ G g ) = U ( g θ U T f ) g θ = [ θ 1 … 0 … … … 0 … θ n ] \begin{aligned} &(f * _{G} g)=U\left(U^{T} g \odot U^{T} f\right)\\ &\text{Let}\; g_{\theta}=dia(U^{T} g)\\ &\text{then} \; (f * _{G} g)=U\left( g_{\theta}U^{T} f\right)\\ &g_{\theta} =\left[\begin{array}{ccc} \theta_{1} & \ldots & 0 \\ \ldots & \ldots & \ldots \\ 0 & \ldots & \theta_{n} \end{array}\right] \end{aligned} (f∗Gg)=U(UTg⊙UTf)Letgθ=dia(UTg)then(f∗Gg)=U(gθUTf)gθ=⎣⎡θ1…0………0…θn⎦⎤
SCNN 模型架构图如下,原始 Graph 不断经过卷积操作,变换为特征向量。其一层卷积计算公式如下,其中, x k x_k xk 是第 k 层特征; G k G_{k} Gk 是第 k 层卷积核; U U U 是 Graph 拉普拉斯矩阵特征向量; h h h 是激活函数。下式为一层卷积计算表达,SCNN 由多层卷积层叠加而成
x k + 1 , j = h ( U ∑ i = 1 f k −