理解Graph Convolutional Network(GCN)

理解Laplacian矩阵

在GCN相关的理论知识中,都提到了Laplacian矩阵(拉普拉斯矩阵),那么GCN为什么要用拉普拉斯矩阵以及拉普拉斯矩阵是怎么来的却很少有人说明。下面通过一个列子来说明。

一个基于图的热传播模型

理解Graph Convolutional Network(GCN)
上图一个热传播模型,我们都知道热量只会从温度高的地方流向温度低的地方,再上图中,热量只会从温度高的节点流向温度低的节点,比如节点1会与节点0,2,4发生直接的热交换,会与其他间接连通的节点(比如节点8)发生间接的温度交换。

假设热量的流动满足牛顿冷却定律(热量传递的速度正比于温度梯度,直观上看,如果A,B两个地方接触,温度高的地方的热量会以正比于他们俩温度差的速度从A流向B。)

考虑图中某个节点ii随时间tt的变化可以用下式来刻画:
dφidt=kjAi,j(φiφj)(1){\tag 1}{d\varphi_{i} \over dt} = -k\sum_{j}A_{i,j}(\varphi_{i}-\varphi_{j})

变量说明:
φ\varphi表示图中节点的温度,φi\varphi_{i}表示第ii个节点的温度。
AA表示图的邻接矩阵,若节点i与节点j之间有边连接,则Ai,j=1A_{i,j}=1否则Ai,j=0A_{i,j}=0
kk是与节点的比热容有关的常数。

注意到上图是一个无向图,所以AA是对称阵,节点没有回到自己的边,所以AA对角线的元素都为0。所以(1)式表示只有与节点ii直接连接才会发生热交换。

对(1)式使用乘法分配律:
dφidt=k[φijAi,jjAi,jφj]=k[φiDeg(i)jAi,jφj](2) \begin{aligned} \tag{2}{d\varphi_{i} \over dt} = & -k[\varphi_{i}\sum_{j}A_{i,j} -\sum_{j}A_{i,j}\varphi_{j}] \\ =& -k[\varphi_{i}Deg(i) -\sum_{j}A_{i,j}\varphi_{j} ] \end{aligned}
Deg(i)Deg(i)表示对节点i求度,对于无向图来说,某个节点ii的度就是邻接矩阵AA中第ii行的元素和。
若对图中的所有节点都用(2)式计算,则可以写成矩阵的形式:
[dφ1dtdφ2dt...dφndt]=k[Deg(1)φ1Deg(2)φ2...Deg(n)φn]+kA[φ1φ2...φn] \begin{bmatrix} {d\varphi_{1} \over dt} \\ {d\varphi_{2} \over dt} \\ ... \\ {d\varphi_{n} \over dt} \end{bmatrix} = -k \begin{bmatrix} Deg(1) *\varphi_{1} \\ Deg(2) *\varphi_{2}\\ ... \\ Deg(n) *\varphi_{n} \end{bmatrix} +kA \begin{bmatrix} \varphi_{1} \\ \varphi_{2}\\ ... \\ \varphi_{n} \end{bmatrix}
然后我们定义向量Φ=[φ1,φ2,...φn]T\varPhi = [\varphi_{1}, \varphi_{2},...\varphi_{n}]^{T},那么有
dΦdt=kDΦ+kAΦ=k(DA)Φ=kLΦ(3) \begin{aligned} \tag{3} {d\varPhi \over dt} =& -kD\varPhi + kA\varPhi \\ = & -k(D-A)\varPhi \\ = &-kL\varPhi \end{aligned}
其中D=diag(Deg(1),Deg(2),...,Deg(n))D=diag(Deg(1), Deg(2), ..., Deg(n))称为度矩阵,是一个对角矩阵。L=DAL=D-A就是拉普拉斯矩阵。

(3)式的意义:刻画了拓扑空间中的有限节点,单位时间状态的变化正比于L-L作用在状态Φ\varPhi

推广到GCN

现在问题已经很明朗了,只要你给定了一个空间,给定了空间中存在一种东西可以在这个空间上流动,两邻点之间流动的强度正比于它们之间的状态差异,那么何止是热量可以在这个空间流动,任何东西都可以!

自然而然,假设在图中各个结点流动的东西不是热量,而是特征(Feature),而是消息(Message),那么问题自然而然就被推广到了GCN。所以GCN的实质是什么,是在一张Graph Network中特征(Feature)和消息(Message)中的流动和传播!这个传播最原始的形态就是状态的变化正比于相应空间(这里是Graph空间)拉普拉斯算子作用在当前的状态。

以上内容转载自:如何理解 Graph Convolutional Network(GCN)

GCN推导

上面理解了GCN中拉普拉斯矩阵的作用,阐述了特征、消息等在图数据结构中流动和传播的可行性,我们运用GCN的目的就是学习到graph的特征,然后基于这些特征对下游任务做一些处理。

那么如何运用GCN学习到graph的特征呢,考虑CNN网络是怎么学习图像的特征的,是用卷积来实现的,但是图像是规则的,而图是不规则的,所以不能用CNN中的卷积来处理不规则的graph,后来有学者借鉴傅里叶变换中的卷积来在graph空间中使用卷积。

我们知道线性代数中的特征方程定义是:AV=λVAV = \lambda V,其中AA是一个方阵,VVAA的特征向量,λ\lambda是对应的特征值。若我们将上述定义推广,AA是一种变换,则VV就是其特征函数。

拉普拉斯算子
拉普拉斯算子其实就是对函数求二阶微分。比如f(x)=x3Δf=6xf(x) = x^3,则\Delta f = 6x
关于拉普拉斯算子的物理意义可以看:为什么 空间二阶导(拉普拉斯算子)这么重要?

下面我们看看拉普拉斯算子Δ\Delta的特征函数。
Δeiwt=2eiwtt2=w2eiwt\Delta e^{-iwt} = {\partial^2e^{-iwt} \over \partial t^2} = -w^2e^{-iwt}
所以eiwte^{-iwt}就是拉普拉斯算子的特征函数。

Graph上的傅里叶变换

传统的傅里叶变换为:
理解Graph Convolutional Network(GCN)
可以看到,传统的欧式空间上的傅里叶变换引入了拉普拉斯算子的特征函数,在Graph空间中,我们前面提到了拉普拉斯矩阵,所以自然而然就去考虑拉普拉斯矩阵的特征值和特征向量了。

由于LL是对称阵,所以有下式:Lu=λuLu = \lambda uuLu是L的特征向量,设ff是定义在Graph上的N维向量,维度与Graph的节点数一致,由于ff是离散的,离散的积分就是求和,所以Graph上的傅里叶变换定义如下:
理解Graph Convolutional Network(GCN)
其中,f(i)f(i)表示Graph上的第i个节点,ul(i)u_{l}(i)表示第ll个特征向量的第ii个分量,所以在特征值λl\lambda_{l}下的,ff在Graph上的傅里叶变换就是fulf与u_{l}的内积,f^(λl)\hat{f}(\lambda_{l})是一个值而不是一个向量。

注:上述的内积运算是在复数空间中定义的,所以采用了 ul(i)u^{*}_{l}(i),也就是特征向量ul(i)u^{*}_{l}(i)的共轭。
理解Graph Convolutional Network(GCN)
理解Graph Convolutional Network(GCN)
注意:(b)式说明了,将定义在Graph上的任意向量,表示成了拉普拉斯矩阵的特征向量的线性组合

Graph上的卷积

卷积定理
函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数 f(t)f(t)h(t)h(t)两者的卷积是其函数傅立叶变换乘积的逆变换.
理解Graph Convolutional Network(GCN)
类比到Graph上并把傅里叶变换的定义带入, ff与卷积核 hh 在Graph上的卷积可按下列步骤求出:
理解Graph Convolutional Network(GCN)
其中,h^(λl)=i=1Nh(i)ul(i)\hat{h}(\lambda_{l}) = \sum^{N}_{i=1}h(i)u_{l}(i)是卷积核hh在Graph上的傅里叶变换,也是一个值,不是向量。
理解Graph Convolutional Network(GCN)
理解Graph Convolutional Network(GCN)
(1)与(2)式是等价的,证明见:GCN中的等式证明

Deep learning中的 Graph Convolution

Deep learning中的Convolution就是要设计含有可被训练参数的kernel,从(1)式中很直观,就是
[h^(λ1)...h^(λn)]\begin{bmatrix} \hat{h}(\lambda_{1}) & & \\ & ... & \\ & & \hat{h}(\lambda_{n}) \end{bmatrix},令 gθ(Λ)=[h^(λ1)...h^(λn)]g_{\theta}(\Lambda) = \begin{bmatrix} \hat{h}(\lambda_{1}) & & \\ & ... & \\ & & \hat{h}(\lambda_{n}) \end{bmatrix}
则,(1)式变为
(fh)G=Ugθ(Λ)UTf(f*h)_{G} = Ug_{\theta}(\Lambda) U^{T}f
下面的每一代GCN主要就是gθ(Λ)g_{\theta}(\Lambda)的不同,为了避免混淆,称gθ(Λ)g_{\theta}(\Lambda)为卷积核。

  1. 第一代GCN
    《Spectral Networks and Deep Locally Connected Networks on Graphs》论文中提出了第一代GCN,

y=σ(Ugθ(Λ)UTx)gθ(Λ)=[θ1...θn] y = \sigma(Ug_{\theta}(\Lambda)U^{T}x) \\其中, g_{\theta}(\Lambda) = \begin{bmatrix} \theta_{1} & & \\ & ... & \\ & & \theta_{n} \end{bmatrix}
σgθ(Λ)xGraphfeaturevector\sigma是**函数,g_{\theta}(\Lambda)初始化赋值后通过误差反向传播进行调整,x是Graph上每个顶点的feature vector

该版本的GCN有一下缺点:

  • 没有local信息。每次卷积都是所有顶点都参与运算,没有实现局部卷积和参数共享。
  • 运算量大。每次卷积都要进行拉普拉斯矩阵分解和矩阵相乘,计算复杂度为O(n2)O(n^{2})
  • 参数量大。每个卷积核参数量为n。
  1. 第二代GCN
    《Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering》中提出了第二代GCN,
    理解Graph Convolutional Network(GCN)
    注意:λi\lambda_{i}表示的是LL的第i个特征值,λij\lambda^{j}_{i}表示的jj次幂,
    所以, y=σ(j=0K1ajLjx)y = \sigma(\sum^{K-1}_{j=0}a_{j}L^{j}x)
    其中,a1,a2,,,ak1a_{1}, a_{2},,,a_{k-1}是任意的参数,通过初始化赋值后利用误差反向传播调整。

图的邻接矩阵AkA的k次幂具有一定的物理意义,若Ai,jK0A^{K}_{i,j} \not = 0,则说明顶点ijki和j之间有一条长为k的路径。所以LLkk次幂也具有类似的物理意义,表示k-hop的感受野,也就是说与中心节点距离为k的路径上的节点都可以捕捉到。

所以第二代GCN的优点有:

  • 卷积核只有K个参数,复杂度降低了。
  • 矩阵变换后,不需要对LL进行矩阵分解了,直接用拉普拉斯变换进行即可
  • 引入了k-hop的感受野,可以捕获局部特征。
    理解Graph Convolutional Network(GCN)
  1. 第三代GCN
    《Semi-supervised Classification with Graph Convolutional Networks》中提出了第三代GCN,是通过切比雪夫多项式来近似卷积核的,具体可以看Chebyshev多项式作为GCN卷积核

上述内容转载自:如何理解 Graph Convolutional Network(GCN)