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

 

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yyl424525/article/details/100058264

 

文章目录

 

1. 为什么会出现图卷积神经网络?

普通卷积神经网络研究的对象是具备Euclidean domains的数据,Euclidean domains data数据最显著的特征是他们具有规则的空间结构,如图片是规则的正方形,语音是规则的一维序列等,这些特征都可以用一维或二维的矩阵来表示,卷积神经网络处理起来比较高效。

CNN的【平移不变性】在【非矩阵结构】数据上不适用

  • 平移不变性(translation invariance):比较好理解,在用基础的分类结构比如ResNet、Inception给一只猫分类时,无论猫怎么扭曲、平移,最终识别出来的都是猫,输入怎么变形输出都不变这就是平移不变性,网络的层次越深这个特性会越明显。
  • 平移可变性(translation variance):针对目标检测的,比如一只猫从图片左侧移到了右侧,检测出的猫的坐标会发生变化就称为平移可变性。当卷积网络变深后最后一层卷积输出的feature map变小,物体在输入上的小偏移,经过N多层pooling后在最后的小feature map上会感知不到,这就是为什么R-FCN原文会说网络变深平移可变性变差。

离散卷积本质就是一种加权求和。CNN中的卷积就是一种离散卷积,本质上就是利用一个共享参数的过滤器(kernel),通过计算中心像素点以及相邻像素点的加权和来构成feature map实现空间特征的提取,当然加权系数就是卷积核的权重系数(W)。

那么卷积核的系数如何确定的呢?是随机化初值,然后根据误差函数通过反向传播梯度下降进行迭代优化。这是一个关键点,卷积核的参数通过优化求出才能实现特征提取的作用,GCN的理论很大一部分工作就是为了引入可以优化的卷积参数。

生活中很多数据不具备规则的空间结构,称为Non Euclidean data,如,推荐系统、电子交易、分子结构等抽象出来的图谱。这些图谱中的每个节点连接不尽相同,有的节点有三个连接,有的节点只有一个连接,是不规则的结构。对于这些不规则的数据对象,普通卷积网络的效果不尽人意。CNN卷积操作配合pooling等在结构规则的图像等数据上效果显著,但是如果作者考虑非欧氏空间比如图(即graph,流形也是典型的非欧结构,这里作者只考虑图),就难以选取固定的卷积核来适应整个图的不规则性,如邻居节点数量的不确定和节点顺序的不确定。

例如,社交网络非常适合用图数据来表达,如社交网络中节点以及节点与节点之间的关系,用户A(有ID信息等)、用户B、帖子都是节点,用户与用户之间的关系是关注,用户与帖子之间的关系可能是发布或者转发。通过这样一个图谱,可以分析用户对什么人、什么事感兴趣,进一步实现推荐机制。

总结一下,图数据中的空间特征具有以下特点:
1) 节点特征:每个节点有自己的特征;(体现在点上)
2) 结构特征:图数据中的每个节点具有结构特征,即节点与节点存在一定的联系。(体现在边上)
总地来说,图数据既要考虑节点信息,也要考虑结构信息,图卷积神经网络就可以自动化地既学习节点特征,又能学习节点与节点之间的关联信息。

综上所述,GCN是要为除CV、NLP之外的任务提供一种处理、研究的模型。
图卷积的核心思想是利用『边的信息』对『节点信息』进行『聚合』从而生成新的『节点表示』。

2. 图卷积网络的两种理解方式

GCN的本质目的就是用来提取拓扑图的空间特征。 而图卷积神经网络主要有两类,一类是基于空间域或顶点域vertex domain(spatial domain)的,另一类则是基于频域或谱域spectral domain的。通俗点解释,空域可以类比到直接在图片的像素点上进行卷积,而频域可以类比到对图片进行傅里叶变换后,再进行卷积。

所谓的两类其实就是从两个不同的角度理解,关于从空间角度的理解可以看本文的从空间角度理解GCN

2.1 vertex domain(spatial domain):顶点域(空间域)

基于空域卷积的方法直接将卷积操作定义在每个结点的连接关系上,它跟传统的卷积神经网络中的卷积更相似一些。在这个类别中比较有代表性的方法有 Message Passing Neural Networks(MPNN)[1], GraphSage[2], Diffusion Convolution Neural Networks(DCNN)[3], PATCHY-SAN[4]等。

2.2 spectral domain:频域方法(谱方法)

这就是谱域图卷积网络的理论基础了。这种思路就是希望借助图谱的理论来实现拓扑图上的卷积操作。从整个研究的时间进程来看:首先研究GSP(graph signal processing)的学者定义了graph上的Fourier Transformation,进而定义了graph上的convolution,最后与深度学习结合提出了Graph Convolutional Network。

基于频域卷积的方法则从图信号处理起家,包括 Spectral CNN[5], Cheybyshev Spectral CNN(ChebNet)[6], 和 First order of ChebNet(1stChebNet)[7] 等

论文Semi-Supervised Classification with Graph Convolutional Networks就是一阶邻居的ChebNet

认真读到这里,脑海中应该会浮现出一系列问题:
Q1 什么是Spectral graph theory?
Spectral graph theory请参考维基百科的介绍,简单的概括就是借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质

Q2 GCN为什么要利用Spectral graph theory?
这是论文(Semi-Supervised Classification with Graph Convolutional Networks)中的重点和难点,要理解这个问题需要大量的数学定义及推导

过程:
(1)定义graph上的Fourier Transformation傅里叶变换(利用Spectral graph theory,借助图的拉普拉斯矩阵的特征值和特征向量研究图的性质)
(2)定义graph上的convolution卷积

下面将介绍关于频谱域的图卷积网络的推导相关的内容。

3. 什么是拉普拉斯矩阵?

拉普拉斯矩阵(Laplacian matrix) 也叫做导纳矩阵、基尔霍夫矩阵或离散拉普拉斯算子,主要应用在图论中,作为一个图的矩阵表示。对于图 G=(V,E),其Laplacian 矩阵的定义为 L=D-A,其中 L 是Laplacian 矩阵, D=diag(d)是顶点的度矩阵(对角矩阵),d=rowSum(A),对角线上元素依次为各个顶点的度, A 是图的邻接矩阵。

Graph Fourier Transformation及Graph Convolution的定义都用到图的拉普拉斯矩阵。

频域卷积的前提条件是图必须是无向图,只考虑无向图,那么L就是对称矩阵。

3.1 常用的几种拉普拉斯矩阵

普通形式的拉普拉斯矩阵

L=DAL=D-AL=DA
L中的元素给定为:
Li,j=⎧⎩⎨⎪⎪diag(vi)10i=jij and vi is adjacent to vjotherwiseL_{i,j}=\begin{cases}diag(v_i) & i=j\\-1 & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\0 & otherwise\end{cases}Li,j=diag(vi)10i=ji=j and vi is adjacent to vjotherwise
其中diag(vi) 表示顶点 i 的度。

对称归一化的拉普拉斯矩阵(Symmetric normalized Laplacian)

Lsys=D1/2LD1/2=ID1/2AD1/2L^{sys}=D^{-1/2}LD^{-1/2}=I-D^{-1/2}AD^{-1/2}Lsys=D1/2LD1/2=ID1/2AD1/2
矩阵元素定义为:

Lsysi,j=⎧⎩⎨⎪⎪⎪⎪⎪⎪11diag(vi)diag(vj)√0i=j and diag(vi)  0ij and vi is adjacent to vjotherwiseL^{sys}_{i,j}=\begin{cases}1 & i=j \ and \ diag(v_i) \ \neq \ 0\\-\frac{1}{\sqrt{diag(v_i)diag(v_j)}} & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\0 & otherwise\end{cases}Li,jsys=1diag(vi)diag(vj)10i=j and diag(vi) = 0i=j and vi is adjacent to vjotherwise

很多GCN的论文中应用的是这种拉普拉斯矩阵

随机游走归一化拉普拉斯矩阵(Random walk normalized Laplacian)

Lrw=D1L=ID1AL^{rw}=D^{-1}L=I-D^{-1}ALrw=D1L=ID1A
矩阵元素定义为:

Lrwi,j=⎧⎩⎨⎪⎪⎪⎪11diag(vi)0i=j and diag(vi)  0ij and vi is adjacent to vjotherwiseL^{rw}_{i,j}=\begin{cases}1 & i=j \ and \ diag(v_i) \ \neq \ 0\\-\frac{1}{diag(v_i)} & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\0 & otherwise\end{cases}Li,jrw=1diag(vi)10i=j and diag(vi) = 0i=j and vi is adjacent to vjotherwise

泛化的拉普拉斯 (Generalized Laplacian)

泛化的拉普拉斯(用得少)定义为:

⎧⎩⎨⎪⎪Qi,j<0Qi,j=0anynumberi  j and diag(vi)  0ij and vi is adjacent to vjotherwise\begin{cases}Q_{i,j}<0 & i \ \neq \ j \ and \ diag(v_i) \ \neq \ 0\\Q_{i,j}=0 & i \neq j \ and \ v_i \ is\ adjacent \ to \ v_j\\any number & otherwise\end{cases}Qi,j<0Qi,j=0anynumberi = j and diag(vi) = 0i=j and vi is adjacent to vjotherwise

一个拉普拉斯矩阵的计算例子(依据于上图):

A=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪010010101010010100001011110100000100⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪D=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪200000030000002000000300000030000001⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪,L=DA=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪210010131010012100001311110130000101⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪A=\left\{\begin{matrix}0 & 1 & 0 & 0 & 1 & 0\\1 & 0 & 1 & 0 & 1 & 0\\0 & 1 & 0 & 1 & 0 & 0\\0 & 0 & 1 & 0 & 1 & 1\\1 & 1 & 0 & 1 & 0 & 0\\0 & 0 & 0 & 1 & 0 & 0\end{matrix}\right\},D=\left\{\begin{matrix}2 & 0 & 0 & 0 & 0 & 0\\0 & 3 & 0 & 0 & 0 & 0\\0 & 0 & 2 & 0 & 0 & 0\\0 & 0 & 0 & 3 & 0 & 0\\0 & 0 & 0 & 0 & 3 & 0\\0 & 0 & 0 & 0 & 0 & 1\end{matrix}\right\},L=D-A=\left\{\begin{matrix}2 & -1 & 0 & 0 & -1 & 0\\-1 & 3 & -1 & 0 & -1 & 0\\0 & -1 & 2 & -1 & 0 & 0\\0 & 0 & -1 & 3 & -1 & -1\\-1 & -1 & 0 & -1 & 3 & 0\\0 & 0 & 0 & -1 & 0 & 1\end{matrix}\right\}A=010010101010010100001011110100000100D=200000030000002000000300000030000001,L=DA=210010131010012100001311110130000101

D1/2=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪12√00000013√00000012√00000013√00000013√0000001⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪,Lsys=D1/2LD1/2=ID1/2AD1/2=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪116√016√0016√116√019√0016√116√0016√016√119√13√019√019√1000013√01⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪D^{-1/2}=\left\{\begin{matrix}\frac{1}{\sqrt{2}} & 0 & 0 & 0 & 0 & 0\\0 & \frac{1}{\sqrt{3}} & 0 & 0 & 0 & 0\\0 & 0 & \frac{1}{\sqrt{2}} & 0 & 0 & 0\\0 & 0 & 0 & \frac{1}{\sqrt{3}} & 0 & 0\\0 & 0 & 0 & 0 & \frac{1}{\sqrt{3}} & 0\\0 & 0 & 0 & 0 & 0 & 1\end{matrix}\right\},L^{sys}=D^{-1/2}LD^{-1/2}=I-D^{-1/2}AD^{-1/2}=\left\{\begin{matrix}1 & -\frac{1}{\sqrt{6}} & 0 & -\frac{1}{\sqrt{6}} & 0 & 0\\-\frac{1}{\sqrt{6}} & 1 & -\frac{1}{\sqrt{6}} & 0 & -\frac{1}{\sqrt{9}} & 0\\0 & -\frac{1}{\sqrt{6}} & 1 & -\frac{1}{\sqrt{6}} & 0 & 0\\-\frac{1}{\sqrt{6}} & 0 & -\frac{1}{\sqrt{6}} & 1 & -\frac{1}{\sqrt{9}} & -\frac{1}{\sqrt{3}}\\0 & -\frac{1}{\sqrt{9}} & 0 & -\frac{1}{\sqrt{9}} & 1 & 0\\0 & 0 & 0 & -\frac{1}{\sqrt{3}} & 0 & 1\end{matrix}\right\}D1/2=21000000310000002100000031000000310000001,Lsys=D1/2LD1/2=ID1/2AD1/2=16106100611610910061161006106119131091091100003101可以看出,标准归一化的拉普拉斯矩阵还是对称的,并且符合前面的公式定义。

Graph Convolution与Diffusion相似之处,当然从Random walk normalized Laplacian就能看出了两者确有相似之处(其实两者只差一个相似矩阵的变换,可参考Diffusion-Convolutional Neural Networks)
其实维基本科对Laplacian matrix的定义上写得很清楚,国内的一些介绍中只有第一种定义。这让我在最初看文献的过程中感到一些的困惑,特意写下来,帮助大家避免再遇到类似的问题。

3.2 无向图的拉普拉斯矩阵有什么性质

(1)拉普拉斯矩阵是半正定矩阵。(最小特征值大于等于0)
(2)特征值中0出现的次数就是图连通区域的个数。
(3)最小特征值是0,因为拉普拉斯矩阵(普通形式:L=DAL=D-AL=DA)每一行的和均为0,并且最小特征值对应的特征向量是每个值全为1的向量;
(4)最小非零特征值是图的代数连通度。

拉普拉斯矩阵的半正定性证明,如下:
要证明拉普拉斯矩阵是半正定的,只需要证明其二次型fTLf0f^TLf \geq0fTLf0
证明:
fTLf=fTDffTAf=fTdiag(d)ffTAf=i=1mdif2ij=1m[i=1mfjaij]fj=i=1mdif2ii,j=1mfifjaij=12[i=1mdif2i2i,j=1mfifjaij+j=1mdjf2j]=12i,j=1maij(fifj)2\begin{aligned}f^TLf & =f^TDf-f^TAf \\& = f^T*diag(d)*f-f^TAf \\& =\sum_{i=1}^m d_i f_i^2-\sum_{j=1}^m[\sum_{i=1}^m f_j*a_{ij}]f_j \\& =\sum_{i=1}^m d_i f_i^2-\sum_{i,j=1}^m f_i*f_j*a_{ij} \\& =\frac{1}{2} [ \sum_{i=1}^md_if_i^2-2\sum_{i,j=1}^m f_i f_j a_{ij}+\sum_{j=1}^m d_j f_j^2 ] \\& = \frac{1}{2}\sum_{i,j=1}^m a_{ij}(f_i-f_j)^2 \\\end{aligned}fTLf=fTDffTAf=fTdiag(d)ffTAf=i=1mdifi2j=1m[i=1mfjaij]fj=i=1mdifi2i,j=1mfifjaij=21[i=1mdifi22i,j=1mfifjaij+j=1mdjfj2]=21i,j=1maij(fifj)2

所以,对于任意一个属于实向量fRmf \in \mathbb{R}^mfRm(f为m∗1的实数列向量 ),都有此公式成立:

fTLf=12mi,j=1aij(fifj)2f^TLf = \frac{1}{2}\sum_{i,j=1}^m a_{ij}(f_i-f_j)^2fTLf=21i,j=1maij(fifj)2

3.3 为什么GCN要用拉普拉斯矩阵?

  • 拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解)
  • 由于卷积在傅里叶域的计算相对简单,为了在graph上做傅里叶变换,需要找到graph的连续的正交基对应于傅里叶变换的基,因此要使用拉普拉斯矩阵的特征向量。

3.4. 拉普拉斯矩阵的谱分解(特征分解)

GCN的核心基于拉普拉斯矩阵的谱分解,文献中对于这部分内容没有讲解太多,初学者可能会遇到不少误区,所以先了解一下特征分解。

特征分解(Eigendecomposition),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。只有对可对角化矩阵或有n个线性无关的特征向量的矩阵才可以施以特征分解。

不是所有的矩阵都可以特征分解,其充要条件为n阶方阵存在n个线性无关的特征向量。

但是拉普拉斯矩阵是半正定矩阵(半正定矩阵本身就是对称矩阵),有如下三个性质:

  • 对称矩阵一定n个线性无关的特征向量
  • 半正定矩阵的特征值一定非负
  • 对阵矩阵的不同特征值对应的特征向量相互正交,这些正交的特征向量构成的矩阵为正交矩阵。

由上拉普拉斯矩阵对称知一定可以谱分解,且分解后有特殊的形式。

对于拉普拉斯矩阵其谱分解为:

L=UΛU1=U⎡⎣⎢λ1λn⎤⎦⎥U1L=U \Lambda U^{-1}=U\left[ \begin{matrix} \lambda_1 & & \\ & \ddots & \\ & & \lambda_n \\ \end{matrix} \right] U^{-1}L=UΛU1=Uλ1λnU1
其中U=(u1⃗ ,u2⃗ ,,un⃗ )U=(\vec{u_1},\vec{u_2},\cdots,\vec{u_n})U=(u1,u2,,un),是列向量为单位特征向量的矩阵,也就说 $ \vec{u_l} $是列向量,Λ是n个特征值构成的对角阵。

由于 U 是正交矩阵,即UUT=EUU^{T}=EUUT=E,所以特征分解又可以写成:
L=UΛU1=UΛUTL=U \Lambda U^{-1}=U \Lambda U^{T}L=UΛU1=UΛUT
注意,特征分解最右边的是特征矩阵的逆,只是拉普拉斯矩阵是对称矩阵才可以写成特征矩阵的转置。

3.5 拉普拉斯算子

定义:拉普拉斯算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度(f\nabla ff)的散度(f\nabla \cdot ff,即ff\nabla f \cdot fff)。因此如果f是二阶可微的实函数,则f的拉普拉斯算子∆定义为:

Δf=2f=f∆f=\nabla^2 f=\nabla \cdot \nabla ff=2f=f
f的拉普拉斯算子也是笛卡尔坐标系xi中的所有非混合二阶偏导数:

Δf=ni=12fx2i∆f=\sum_{i=1}^n \frac{\partial^2f}{\partial x_i^2}f=i=1nxi22f
函数f的拉普拉斯算子也是该函数的海塞矩阵(是一个多元函数的二阶偏导数构成的方阵)的迹:
Δf=tr(H(f))∆f=tr(H(f))f=tr(H(f))

拉普拉斯算子(Laplacian operator) 的物理意义是空间二阶导,准确定义是:标量梯度场中的散度,一般可用于描述物理量的流入流出。比如说在二维空间中的温度传播规律,一般可以用拉普拉斯算子来描述。

拉普拉斯矩阵也叫做离散的拉普拉斯算子。

4. 如何通俗易懂地理解卷积?

4.1 连续形式的一维卷积

在泛函分析中,卷积是通过两个函数f(x)和g(x)生成第三个函数的一种算子,它代表的意义是:两个函数中的一个(取g(x),可以任意取)函数,把g(x)经过翻转平移,然后与f(x)的相乘,得到的一个新的函数,对这个函数积分,也就是对这个新的函数求它所围成的曲边梯形的面积。

设f(t),g(t)是两个可积函数,f(t)与g(t)的卷积记为f(t)g(t)f(t)*g(t)f(t)g(t),它是其中一个函数翻转并平移后与另一个函数乘积的积分,是一个自变量是平移量的函数。也就是:

f(t)g(t)=+f(τ)g(tτ)dτ=+f(tτ)g(τ)dτf(t)*g(t)= \int_{-\infty}^{+\infty}f(\tau)g(t-\tau)d\tau= \int_{-\infty}^{+\infty}f(t-\tau)g(\tau)d\tauf(t)g(t)=+f(τ)g(tτ)dτ=+f(tτ)g(τ)dτ

4.2 离散形式的一维卷积

对于定义在整数Z\mathbb{Z}Z上的函数f,g,卷积定义为

(fg)(t)=τ=f(τ)g(tτ)(f*g)(t)={\sum}_{\tau=-\infty}^{\infty}f(\tau)g(t-\tau)(fg)(t)=τ=f(τ)g(tτ)

4.3 实例:掷骰子问题

光看数学定义可能会觉得非常抽象,下面举一个掷骰子的问题,该实例参考了知乎问题"如何通俗易懂地解释卷积"的回答。

想象现在有两个骰子,两个骰子分别是f跟g,f(1)表示骰子f向上一面为数字1的概率。同时抛掷这两个骰子1次,它们正面朝上数字和为4的概率是多少呢?相信读者很快就能想出它包含了三种情况,分别是:

  • f向上为1,g向上为3;
  • f向上为2,g向上为2;
  • f向上为3,g向上为1;

最后这三种情况出现的概率和即问题的答案,如果写成公式,就是3τ=1f(τ)g(4τ)\sum_{\tau=1}^{3}f(\tau)g(4-\tau)τ=13f(τ)g(4τ)。可以形象地绘制成下图:

如果稍微扩展一点,比如说认为 f(0) 或者 g(0)等是可以取到的,只是它们的值为0而已。那么该公式可以写成τ=f(τ)g(4τ)\sum_{\tau=-\infty}^{\infty}f(\tau)g(4-\tau)τ=f(τ)g(4τ)。仔细观察,这其实就是卷积(f∗g)(4)。如果将它写成内积的形式,卷积其实就是

[f(),,f(1),,f()][g(),,g(3),,g()][f(-\infty),\cdots,f(1),\cdots,f(\infty)] \cdot [g(\infty),\cdots,g(3),\cdots,g(-\infty)][f(),,f(1),,f()][g(),,g(3),,g()]

这么一看,是不是就对卷积的名字理解更深刻了呢? 所谓卷积,其实就是把一个函数卷(翻)过来,然后与另一个函数求内积。

对应到不同方面,卷积可以有不同的解释:g 既可以看作我们在深度学习里常说的核(Kernel),也可以对应到信号处理中的滤波器(Filter)。而 f 可以是我们所说的机器学习中的特征(Feature),也可以是信号处理中的信号(Signal)。f和g的卷积 (f∗g)就可以看作是对f的加权求和。下面两个动图就分别对应信号处理与深度学习中卷积操作的过程。

 

5. 傅里叶变换

5.1 连续形式的傅立叶变换

关于傅立叶变换相关的详细而有趣的内容,可以看这几篇文章:

下面是一个大致流程:
任意函数可以分解为奇偶函数之和:
f(x)=f(x)+f(x)2+f(x)f(x)2=feven+foddf(x)=\frac{f(x)+f(-x)}{2} + \frac{f(x)-f(-x)}{2}=f_{even}+f_{odd}f(x)=2f(x)+f(x)+2f(x)f(x)=feven+fodd

任意一个周期函数可以由若干个正交函数(由sin,cossin, cossin,cos 构成)的线性组合构成,写出傅里叶级数的形式如下:
f(x)=a0+n=1(ancos(2πnTx)+bnsin(2πnTx)),a0R\displaystyle f(x)=a_0+\sum _{{n=1}}^{\infty}\left(a_{n}cos({\frac{2\pi n}{T}x})+b_{n}sin({\frac{2\pi n}{T}x})\right),a_0\in\mathbb{R}f(x)=a0+n=1(ancos(T2πnx)+bnsin(T2πnx)),a0R
利用欧拉公式eix=cosx+isinxe^{ix}=\cos x+i \sin xeix=cosx+isinx(这里的指复数中的i),cosx,sinx\cos x, \sin xcosx,sinx可表示成

cosx=eix+eix2,sinx=eixeix2i\cos x=\frac{e^{ix} +e^{-ix}}{2} ,\sin x=\frac{e^{ix} -e^{-ix}}{2i}cosx=2eix+eix,sinx=2ieixeix

在时间t轴上,把eite^{it}eit向量的虚部(也就是纵坐标)记录下来,得到的就是sin(t)sin(t)sin(t):

在时间t轴上,把ei2te^{i2t}ei2t向量的虚部记录下来,得到的就是sin(2t)sin(2t)sin(2t):

如果在时间t轴上,把eite^{it}eit的实部(横坐标)记录下来,得到的就是cos(t)cos(t)cos(t)的曲线:

更一般的,具有两种看待sin,cossin, cossin,cos的角度:

eiωt{sin(ωt)cos(ωt)e^{i\omega t}\iff \begin{cases}sin(\omega t)\\cos(\omega t)\end{cases}eiωt{sin(ωt)cos(ωt)

这两种角度,一个可以观察到旋转的频率,所以称为频域;一个可以看到流逝的时间,所以称为时域:

所以,任意周期函数可以以eiωte^{i\omega t}eiωt为基函数用傅里叶级数的指数形式表示。即,对于一个周期函数f(x)f(x)f(x)以傅里叶级数的指数形式表示为:
f(x)=n=cn基的坐标ei2πnxT正交基f(x)=\sum ^{\infty }_{n=-\infty }\underbrace{c_{n}}_{\text{基的坐标}} \cdot \underbrace{e^{i\tfrac{2\pi nx}{T}}}_{\text{正交基}}f(x)=n=基的坐标cn正交基eiT2πnx
但是对于非周期函数,并不能用傅里叶级数的形式表示。但是还是用某个周期函数fT(x)f_T(x)fT(x)当TT \rightarrow \inftyT∞来逼近,即limTfT(x)=f(x)\lim_{T \rightarrow \infty} f_T(x)=f(x)limTfT(x)=f(x),用积分的形式可以表示为:

f(x)=[+f(x)eiωxdx] eiωxdω=F(ω) eiωxdωf(x) = \int_{-\infty}^\infty [\int ^{+\infty }_{-\infty } f(x)e^{-i\omega x} dx]\ e^{i\omega x}\,d\omega=\int_{-\infty}^\infty F(\omega)\ e^{i\omega x}\,d\omegaf(x)=[+f(x)eiωxdx] eiωxdω=F(ω) eiωxdω
其中,F(ω)F( \omega )F(ω)就是f(x)f(x)f(x)的连续形式的傅里叶变换:
F(ω)=F[f(x)]=+f(x)eiωxdxF( \omega ) =\mathcal{F}[f(x)]=\int ^{+\infty }_{-\infty } f(x)e^{-i\omega x} dxF(ω)=F[f(x)]=+f(x)eiωxdx
可以看出,f(x)f(x)f(x)和F(ω)F(\omega)F(ω)可以通过指定的积分运算相互表达。

当然,也可以利用欧拉公式通过cos和sin函数表示为F(u)F(u)F(u):

F(u)=+f(x)[cos(2πxu)isin(2πxu)]dxF(u)=\int_{-\infty}^{+\infty}f(x)\left[cos(2\pi xu)-i sin(2\pi xu)\right]dxF(u)=+f(x)[cos(2πxu)isin(2πxu)]dx

所以,对函数f(x)f(x)f(x)的傅里叶变换F\mathcal{F}F和傅里叶的逆变换F1\mathcal{F}^{-1}F1记作:

F(ω)=F[f(x)],f(x)=F1[F(ω)]F( \omega )=\mathcal{F}[f(x)],f(x)=\mathcal{F}^{-1}[F(\omega)] \\F(ω)=F[f(x)],f(x)=F1[F(ω)]

  • F(ω)F(\omega)F(ω)叫做f(x)f(x)f(x)的象函数或傅里叶变换,即通过傅里叶变换后关于频率的函数,函数图像就是频谱图,ω\omegaω 就是f对应在频域中的频率
  • f(x)f(x)f(x)叫做F(ω)F(\omega)F(ω)的原象函数

其实可以发现这个对信号f(x)f(x)f(x)的傅立叶变换F(ω)F(\omega)F(ω)形式上是f(x)f(x)f(x)与基函数eiωxe^{-i\omega x}eiωx的积分,本质上将函数f(x)f(x)f(x)映射到了以eiωxe^{-i\omega x}eiωx为基向量的空间中。

5.2 频域(frequency domain)和时域(time domain)的理解

时域:真实量到的信号的时间轴,代表真实世界。

频域:为了做信号分析用的一种数学手段。

要理解时域和频域只需要看下面两张动图就可以了:

 

上图来自于维基百科,图中红色部分就是原函数f(x)在时域里面的曲线图,此函数经过傅里叶变换后可以分解成很多如右图中的曲线。在左图中的的蓝色线就是对应的频域中的频谱图。

频谱图里的竖线分别代表了不同频率的正弦波函数,也就是之前的基,而高度则代表在这个频率上的振幅,也就是这个基上的坐标分量。

很多在时域看似不可能做到的数学操作,在频域相反很容易。这就是需要傅里叶变换的地方。尤其是从某条曲线中去除一些特定的频率成分,这在工程上称为滤波,是信号处理最重要的概念之一,只有在频域才能轻松的做到。

看一个傅里叶变换去噪的例子:
在傅里叶变换前,图像上有一些规律的条纹,直接在原图上去掉条纹有点困难,但我们可以将图片通过傅里叶变换变到频谱图中,频谱图中那些规律的点就是原图中的背景条纹。

只要在频谱图中擦除这些点,就可以将背景条纹去掉,得到下图右侧的结果。

5.3 周期性离散傅里叶变换(Discrete Fourier Transform, DFT)

傅里叶变换有连续时间非周期傅里叶变换,连续时间周期性傅里叶变换,离散时间非周期傅里叶变换和离散时间周期性傅里叶变换,鉴于计算机主要处理离散周期性信号,本文主要介绍周期性离散时间傅里叶变换(DFT)。信号xnx_nxn的傅里叶变换XkX_kXk

Xk=N1n=0xnei2πNknX_k=\sum_{n=0}^{N-1}x_n e^{-i \frac{2\pi}{N}kn}Xk=n=0N1xneiN2πkn
信号xnx_nxn用其傅里叶变换XkX_kXk表示为:
xn=N1n=0Xkei2πNknx_n=\sum_{n=0}^{N-1}X_k e^{i \frac{2\pi}{N}kn}xn=n=0N1XkeiN2πkn
其中

  • N表示傅里叶变换的点数
  • k表示傅里叶变换的第k个频谱

6. Graph上的傅里叶变换及卷积

把传统的傅里叶变换以及卷积迁移到Graph上来,核心工作其实就是把拉普拉斯算子的特征函数eiωte^{-i\omega t}eiωt 变为Graph对应的拉普拉斯矩阵的特征向量。

傅立叶变换与拉普拉斯矩阵的关系:传统傅立叶变换的基,就是拉普拉斯矩阵的一组特征向量。

6.1 图上的傅里叶变换

前面讲到可以用一组正交函数cos和sin(或eiωte^{-i\omega t}eiωt )表示任意函数,且傅里叶变换是连续形式的,在处理Graph时,用到的是傅里叶变换的离散形式。由于拉普拉斯矩阵进行谱分解以后,可以得到n个线性无关的特征向量,构成空间中的一组正交基,因此归一化拉普拉斯矩阵算子的特征向量构成了图傅里叶变换的基。图傅里叶变换将输入图的信号投影到了正交空间,相当于把图上定义的任意向量,表示成了拉普拉斯矩阵特征向量的线性组合。

离散积分就是一种内积形式,由此可以定义Graph上的傅里叶变换(实数域):
F(λl)=fˆ(λl)=Ni=1f(i)ul(i)F(\lambda_l)=\hat{f}(\lambda_l)=\sum_{i=1}^{N}{f(i) u_l(i)}F(λl)=f^(λl)=i=1Nf(i)ul(i)

  • fff是Graph上的N维向量,可以表示某个点的特征向量,f(i)f(i)f(i)表示第iii个特征
  • ul(i)u_l(i)ul(i)表示第lll 个特征向量的第iii 个分量
  • fff的Graph 傅里叶变换就是与 λl\lambda_lλl 对应的特征向量ulu_lul进行内积运算
  • λ\lambdaλ就对应于ω\omegaω(具体解释见第7部分)
  • fˆ\hat{f}f^表示fff的傅里叶变换

6.2 图的傅立叶变换——图的傅立叶变换的矩阵形式

利用矩阵乘法将Graph上的傅里叶变换推广到矩阵形式:
⎛⎝⎜⎜⎜⎜⎜fˆ(λ1)fˆ(λ2)fˆ(λN)⎞⎠⎟⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜ u1(1)u2(1)uN(1)u1(2)u2(2)uN(2)u1(N)u2(N)uN(N)⎞⎠⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜f(1)f(2)f(N)⎞⎠⎟⎟⎟⎟\left(\begin{matrix} \hat{f}(\lambda_1)\\ \hat{f}(\lambda_2) \\ \vdots \\\hat{f}(\lambda_N) \end{matrix}\right)=\left(\begin{matrix}\ u_1(1) &u_1(2)& \dots &u_1(N) \\u_2(1) &u_2(2)& \dots &u_2(N)\\ \vdots &\vdots &\ddots & \vdots\\ u_N(1) &u_N(2)& \dots &u_N(N) \end{matrix}\right)\left(\begin{matrix}f(1)\\ f(2) \\ \vdots \\f(N) \end{matrix}\right)f^(λ1)f^(λ2)f^(λN)= u1(1)u2(1)uN(1)u1(2)u2(2)uN(2)u1(N)u2(N)uN(N)f(1)f(2)f(N)
fff在Graph上傅里叶变换的矩阵形式为:

fˆ=UTf(a)\hat{f}=U^Tf \qquad(a)f^=UTf(a)

6.3 图的傅立叶逆变换——图的傅立叶逆变换的矩阵形式

类似地,传统的傅里叶变换是对频率ω\omegaω 求积分:

F1[F(ω)]=12ΠF(ω)eiωtdω\mathcal{F}^{-1}[F(\omega)]=\frac{1}{2\Pi}\int_{}^{}F(\omega)e^{i\omega t} d\omegaF1[F(ω)]=2Π1F(ω)eiωtdω

迁移到Graph上变为对特征值λl\lambda_lλl求和:

f(i)=Nl=1fˆ(λl)ul(i)f(i)=\sum_{l=1}^{N}{\hat{f}(\lambda_l) u_l(i)}f(i)=l=1Nf^(λl)ul(i)

利用矩阵乘法将Graph上的傅里叶逆变换推广到矩阵形式:

⎛⎝⎜⎜⎜⎜f(1)f(2)f(N)⎞⎠⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜ u1(1)u1(2)u1(N)u2(1)u1(2)u2(N)uN(1)uN(2)uN(N)⎞⎠⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜⎜fˆ(λ1)fˆ(λ2)fˆ(λN)⎞⎠⎟⎟⎟⎟⎟\left(\begin{matrix}f(1)\\ f(2) \\ \vdots \\f(N) \end{matrix}\right)= \left(\begin{matrix}\ u_1(1) &u_2(1)& \dots &u_N(1) \\u_1(2) &u_1(2)& \dots &u_N(2)\\ \vdots &\vdots &\ddots & \vdots\\ u_1(N) &u_2(N)& \dots &u_N(N) \end{matrix}\right) \left(\begin{matrix} \hat{f}(\lambda_1)\\ \hat{f}(\lambda_2) \\ \vdots \\\hat{f}(\lambda_N) \end{matrix}\right)f(1)f(2)f(N)= u1(1)u1(2)u1(N)u2(1)u1(2)u2(N)uN(1)uN(2)uN(N)f^(λ1)f^(λ2)f^(λN)

即 f 在Graph上傅里叶逆变换的矩阵形式为:

f=Ufˆ(b)f=U\hat{f} \qquad(b)f=Uf^(b)

6.4 图上的傅里叶变换推广到图卷积

在上面的基础上,利用卷积定理类比来将卷积运算,推广到Graph上。

卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数f与g两者的卷积是其函数傅立叶变换乘积的逆变换(中间的桥梁就是傅立叶变换与反傅立叶变换,证明见:https://zhuanlan.zhihu.com/p/54505069):

fg=F1{F(f)F(g)}=F1{fˆgˆ}f * g=\mathcal{F}^{-1}{\{\mathcal{F}(f) \cdot \mathcal{F}(g) \}}=\mathcal{F}^{-1}\{ \hat{f} \cdot \hat{g}\}fg=F1{F(f)F(g)}=F1{f^g^}
所以,对图上f和卷积核g的卷积可以表示为:
(fg)G=U((UTg)(UTf))(f*g)_G=U((U^T g)\cdot(U^Tf))(fg)G=U((UTg)(UTf))
从上面可以看出,对卷积核ggg和fff进行傅里叶变换的结果UTg,UTfU^T g,U^T fUTg,UTf都是一个列向量:

⎛⎝⎜⎜⎜⎜⎜fˆ(λ1)fˆ(λ2)fˆ(λN)⎞⎠⎟⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜f(1)f(2)f(N)⎞⎠⎟⎟⎟⎟\left(\begin{matrix} \hat{f}(\lambda_1)\\ \hat{f}(\lambda_2) \\ \vdots \\\hat{f}(\lambda_N) \end{matrix}\right),\left(\begin{matrix}f(1)\\ f(2) \\ \vdots \\f(N) \end{matrix}\right)f^(λ1)f^(λ2)f^(λN)f(1)f(2)f(N)

所以,很多论文中的Graph卷积公式也写作:
(fg)G=U((UTg)(UTf))(f*g)_G=U((U^Tg)\odot(U^Tf))(fg)G=U((UTg)(UTf))
\odot⊙ 表示hadamard product(哈达马积),对于两个向量,就是进行内积运算;对于维度相同的两个矩阵,就是对应元素的乘积运算。

如果把UTgU^TgUTg整体看作可学习的卷积核,这里我们把它写作gθg_\thetagθ。最终图上的卷积公式即是:

(fg)G=UgθUTf(f*g)_G = Ug_{\theta}U^Tf(fg)G=UgθUTf
有的地方,还把gθ=UTgg_\theta=U^Tggθ=UTg也成对角矩阵的形式,即定义一个滤波gθ=diag(UTg)g_\theta=diag(U^T g)gθ=diag(UTg),则:

fgθ=UgθUTf=U⎛⎝⎜gˆ(λ1)gˆ(λn)⎞⎠⎟UTff*g_\theta=Ug_{\theta}U^Tf= U\left(\begin{matrix}\hat g(\lambda_1) & \\&\ddots \\ &&\hat g(\lambda_n) \end{matrix}\right) U^Tffgθ=UgθUTf=Ug^(λ1)g^(λn)UTf

接下来第8节要介绍的图上频域卷积的工作,都是在gθg_\thetagθ的基础上做文章。

7. 为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?特征值表示频率?

在Chebyshev论文(M. Defferrard, X. Bresson, and P. Vandergheynst, “Convolutional neural networks on graphs with fast localized spectral filtering,”in Advances in Neural Information Processing Systems, 2016)中就有说明,图上进行傅里叶变换时,拉普拉斯矩阵是对称矩阵,所有有n个线性无关的特征向量,因此可以构成傅里叶变换的一组基,而其对应的特征值就是傅里叶变换的频率。

7.1 为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?

傅里叶变换一个本质理解就是:把任意一个函数表示成了若干个正交函数(由sin,cos 构成)的线性组合。

通过即 f 在Graph上傅里叶逆变换的矩阵形式: f=Ufˆ(b)f=U\hat{f} \qquad(b)f=Uf^(b)也能看出,graph傅里叶变换把graph上定义的任意向量f,表示成了拉普拉斯矩阵特征向量的线性组合,即:

f=fˆ(1)u1+fˆ(2)u2++fˆ(n)unf=\hat{f}(1)u_1+\hat{f}(2)u_2+\cdots +\hat{f}(n)u_nf=f^(1)u1+f^(2)u2++f^(n)un

那么:为什么graph上任意的向量f都可以表示成这样的线性组合?

原因在于(u1⃗ ,u2⃗ ,,un⃗ )(\vec{u_1},\vec{u_2},\cdots,\vec{u_n})(u1,u2,,un)是graph上 n维空间中的 n 个线性无关的正交向量(拉普拉斯矩阵是对称矩阵,必定可以进行特征分解,有n个线性无关的特征向量),由线性代数的知识可以知道:n 维空间中n 个线性无关的向量可以构成空间的一组基,而且拉普拉斯矩阵的特征向量还是一组正交基。

7.2 怎么理解拉普拉斯矩阵的特征值表示频率?

在graph空间上无法可视化展示“频率”这个概念,那么从特征方程上来抽象理解。

将拉普拉斯矩阵 L 的 n 个非负实特征值,从小到大排列为λ1λ2λn\lambda_1 \le \lambda_2 \le \cdots \le \lambda_nλ1λ2λn,而且最小的特征值λ1=0\lambda_1=0λ1=0,因为 n 维的全1向量对应的特征值为0(由 L 的定义就可以得出):

L⎛⎝⎜⎜⎜111⎞⎠⎟⎟⎟=0L \left(\begin{matrix}1\\ 1 \\ \vdots \\1 \end{matrix}\right)=0L111=0

从特征方程的数学理解来看:

Lu=λuLu=\lambda uLu=λu

在由Graph确定的 n 维空间中,越小的特征值 λl\lambda_lλl表明:拉普拉斯矩阵 L 其所对应的基ulu_lul上的分量、“信息”越少,那么当然就是可以忽略的低频部分了。

其实图像压缩就是这个原理,把像素矩阵特征分解后,把小的特征值(低频部分)全部变成0,PCA降维也是同样的,把协方差矩阵特征分解后,按从大到小取出前K个特征值对应的特征向量作为新的“坐标轴”。

Graph Convolution的理论告一段落了,下面开始Graph Convolution Network

8. 深度学习中GCN的演变

Deep learning 中的Graph Convolution直接看上去会和第6节推导出的图卷积公式有很大的不同,但是万变不离其宗,都是根据下式来推导的:
gθx=UgθUTx=U⎛⎝⎜gˆ(λ1)gˆ(λn)⎞⎠⎟UTxg_\theta * x = Ug_\theta U^Tx =U\left(\begin{matrix}\hat g(\lambda_1) & \\&\ddots \\ &&\hat g(\lambda_n) \end{matrix}\right) U^T xgθx=UgθUTx=Ug^(λ1)g^(λn)UTx

Deep learning 中的Convolution就是要设计含有trainable共享参数的kernel。

上式计算量很大,因为特征向量矩阵U 的复杂度是O(N2)O(N^2)O(N2)。此外,对于大型图来说,L特征值分解的计算量也很大。

基于上面最原始的卷积公式,深度学习中的GCN主要是从下面几篇文章演变而来的(引用次数都很高),后面一一进行简单介绍:

  • 【1】Bruna, Joan, et al. “Spectral networks and locally connected networks on graphs.” 源于ICLR 2014(被引740次)
  • 【2】Defferrard, Michaël, Xavier Bresson, and Pierre Vandergheynst. “Convolutional neural networks on graphs with fast localized spectral filtering.” 源于NIPS 2016(被引997次)
  • 【3】Hammond, David K., Pierre Vandergheynst, and Rémi Gribonval. “Wavelets on graphs via spectral graph theory.” Applied and Computational Harmonic Analysis 30.2 (2011)(被引874次)
  • 【4】Kipf, Thomas N., and Max Welling. “Semi-supervised classification with graph convolutional networks.” 源于ICML 2017 (被引1537次)

8.1 Spectral CNN

谱CNN源于论文(J. Bruna, W. Zaremba, A. Szlam, and Y. LeCun, “Spectral networks and locally connected networks on graphs,” in Proceedings of International Conference on Learning Representations, 2014),Bruna等人,第一次提出谱卷积神经网络。他们简单地把gθg_\thetagθ 看作是一个可学习参数的集合:gθ=Θki,jg_\theta=\Theta_{i,j}^kgθ=Θi,jk。并且假设图信号是多维的,图卷积层顶定义为:

Xk+1:,j=σ(fk1i=1UΘki,jUTXk:,i)(j=1,2,,fk)X_{:,j}^{k+1} = \sigma(\sum_{i=1}^{f_{k-1}}U\Theta_{i,j}^kU^TX_{:,i}^{k})\quad \quad \quad (j=1,2,\cdots,f_k)X:,jk+1=σ(i=1fk1UΘi,jkUTX:,ik)(j=1,2,,fk)

  • XkRN×fk1X^k\in \mathbb{R}^{N\times f_{k-1}}XkRN×fk1是输入图信号,对应图上就是点的输入特征
  • NNN是节点数量
  • fk1f_{k-1}fk1是输入通道的数量
  • fkf_{k}fk是输出通道的数量
  • Θki,j\Theta_{i,j}^kΘi,jk是一个可学习参数的对角矩阵,就跟三层神经网络中的weight一样是任意的参数,通过初始化赋值然后利用误差反向传播进行调整
  • σ()\sigma(\cdot)σ()是激活函数

第一代的参数方法存在着一些弊端,主要在于:
(1)计算复杂:如果一个样本一个图,那么每个样本都需要进行图的拉普拉斯矩阵的特征分解求U矩阵计算复杂;每一次前向传播,都要计算U,diag(θl)U,diag(\theta_l )U,diag(θl)及 UTU^TUT三者的乘积,特别是对于大规模的graph,计算的代价较高,需要O(n2)\mathcal{O}(n^2)O(n2)的计算复杂度
(2)是非局部性连接的
(3)卷积核需要N个参数,当图中的节点N很大时是不可取的

由于以上的缺点第二代的卷积核设计应运而生。

8.2 Chebyshev谱CNN(ChebNet)

Chebyshev谱CNN源于论文(M. Defferrard, X. Bresson, and P. Vandergheynst, “Convolutional neural networks on graphs with fast localized spectral filtering,”in Advances in Neural Information Processing Systems, 2016)。Defferrard等人提出ChebNet,定义特征向量对角矩阵的切比雪夫多项式为滤波器,也就是

gθ=gθ(Λ)K1i=0θiTk(Λ˜)g_θ=g_θ(Λ) \approx \sum^{K-1}_{i=0} \theta_i T_k(\tilde Λ)gθ=gθ(Λ)i=0K1θiTk(Λ~)
其实,就是利用Chebyshev多项式拟合卷积核的方法,来降低计算复杂度。

推导过程如下:
考虑信号xRNx∈\mathbb{R}^NxRN(x就是graph上对应于每个顶点的feathure vector,即由数据集提取特征构成的向量,而不是和线性代数中常说的特征向量,注意区别)与以参数为 θRNθ \in \mathbb{R}^NθRN的滤波器 gθ=diag(θ)g_θ=diag(θ)gθ=diag(θ)在傅里叶域的谱卷积。

gθx=UgθUTx(3)g_\theta * x = Ug_\theta U^Tx \qquad (3)gθx=UgθUTx(3)
其中

  • U 是对称归一化的拉普拉斯(normalized graph Laplacian)算子L=IND1/2AD1/2=UΛUTL=I_N−D^{−1/2}AD^{−1/2}=UΛU^TL=IND1/2AD1/2=UΛUT的特征向量矩阵,Λ是由L的特征向量构成的对角矩阵。

L=D12(DA)D12=D12DD12D12AD12=IND12AD12\begin{aligned}L &= D^{-\frac{1}{2}}(D - A)D^{-\frac{1}{2}} \\&= D^{-\frac{1}{2}} D D^{-\frac{1}{2}} -D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \\&= I_N - D^{-\frac{1}{2}} A D^{-\frac{1}{2}}\end{aligned}L=D21(DA)D21=D21DD21D21AD21=IND21AD21
由于normalized graph Laplacian矩阵L是实对称矩阵, 因此其特征向量矩阵U是正交矩阵,即UUT=INUU^T=I_NUUT=IN

  • UTxU^TxUTx是x的傅里叶变换。
  • gθg_θgθ是由参数θ构成的对角矩阵diag(θ)。由于参数θ的确定与L的特征值有关,作者认为gθg_θgθ是特征值 Λ的一个函数,即令

gθ=gθ(Λ)g_θ=g_θ(Λ)gθ=gθ(Λ)

式3的计算量很大,因为特征向量矩阵U 的复杂度是O(N2)O(N^2)O(N2)。此外,对于大型图来说,L特征值分解的计算量也很大。
为了解决这个问题,Hammond et al.(2011) :Wavelets on graphs via spectral graph theory指出gθ(Λ)g_θ(Λ)gθ(Λ)可以很好的通过Chebyshev多项式Tk(x)T_k(x)Tk(x) 的Kth-阶截断展开来拟合,并对Λ进行scale使其元素位于[−1,1]:

gθ(Λ)Kk=0θkTK(Λ˜)(4)g_{\theta}(Λ) \approx \sum^{K}_{k=0} \theta_kT_K(\tilde Λ) \qquad (4)gθ(Λ)k=0KθkTK(Λ~)(4)
其中

  • Λ˜=2Λ/λmaxIN\tilde Λ = 2Λ / λ_{max}− I_NΛ~=2Λ/λmaxIN(为缩放后的特征向量矩阵,缩放后范围是[−1,1],单位矩阵的特征值是n重1),缩放的目的是为了满足Chebyshev多项式Tk(x)T_k(x)Tk(x) 的KthK^{th}Kth 阶截断展开的条件:自变量范围需要在[−1,1]之间
  • λmaxλ_{max}λmax是L 的最大特征值,也叫谱半径。
  • θRKθ∈\mathbb{R}^KθRK 是切比雪夫系数的向量
  • Chebyshev多项式递归定义为Tk(x)=2xTk1(x)Tk2(x)T_k(x) = 2xT_{k−1}(x) − T_{k−2}(x)Tk(x)=2xTk1(x)Tk2(x), 其中T0(x)=1T1(x)=xT_0(x)=1, T_1(x)=xT0(x)=1T1(x)=x 。

回到对信号x与滤波器gθg_{θ}gθ的卷积的定义,现在有:

gθx=Kk=0θkTK(L˜)x(5)g_{\theta} * x = \sum^{K}_{k=0} \theta_kT_K(\tilde L)x \qquad (5)gθx=k=0KθkTK(L~)x(5)
其中

  • L˜=2L/λmaxIN=UΛ˜UT\tilde L= 2L / λ_{max}− I_N=U \tilde \Lambda U^TL~=2L/λmaxIN=UΛ~UT
  • 易证 (UΛUT)k=UΛkUT(UΛU^T)^k=UΛ^kU^T(UΛUT)k=UΛkUT

现在,相比于第一种Spectral CNN:

  • 此表达式现在是K-localized,具有局部连接性,因为它是拉普拉斯算子中的Kth-阶多项式,即它仅取决于离中央节点(Kth阶邻域)最大K步的节点
  • TK(L˜)xT_K(\tilde L)xTK(L~)x的复杂度是O(|E|),即与边数E呈线性关系,整个运算的复杂度是O(KE)O(K|E|)O(KE)。当graph是稀疏图的时候,计算加速尤为明显,这个时候复杂度远低于O(n2)O(n^2)O(n2)

公式4到公式5的补充证明如下:
(1)先用数学归纳法证明

UTk(Λ˜)UT=Tk(UΛ˜UT)U T_k (\tilde{\Lambda}) U^T = T_k (U \tilde{\Lambda} U^T)UTk(Λ)UT=Tk(UΛUT)
数学归纳法思路:当n=1时显然成立,假设n=k时成立,只需证n=k+1时成立

证明:
根据切比雪夫多项式的定义, 已知
UT0(Λ˜)UT=UUT=1=T0(UΛ˜UT)UT1(Λ˜)UT=UΛ˜UT=T1(UΛ˜UT)\begin{aligned}&U T_0(\tilde{\Lambda}) U^T = UU^T =1 = T_0(U \tilde{\Lambda} U^T) \\&U T_1(\tilde{\Lambda}) U^T = U\tilde{\Lambda}U^T = T_1(U \tilde{\Lambda} U^T)\end{aligned}UT0(Λ~)UT=UUT=1=T0(UΛ~UT)UT1(Λ~)UT=UΛ~UT=T1(UΛ~UT)
假设对于任意k>1, 满足
UTk2(Λ˜)UT=Tk2(UΛ˜UT)U T_{k-2} (\tilde{\Lambda}) U^T= T_{k-2} (U \tilde{\Lambda} U^T)UTk2(Λ)UT=Tk2(UΛUT)

UTk1(Λ˜)UT=Tk1(UΛ˜UT)U T_{k-1} (\tilde{\Lambda}) U^T= T_{k-1} (U \tilde{\Lambda} U^T)UTk1(Λ)UT=Tk1(UΛUT)

UTk(Λ˜)UT=2UΛ˜Tk1(Λ˜)UTUTk1(Λ˜)UT=2(UΛ˜UT)[UTk1(Λ˜)UT]UTk1(Λ˜)UT=2(UΛ˜UT)Tk1(UΛ˜UT)Tk1(UΛ˜UT)=Tk(UΛ˜UT)\begin{aligned}U T_k (\tilde{\Lambda}) U^T &= 2U \tilde{\Lambda} T_{k-1}(\tilde{\Lambda})U^T - U T_{k-1}(\tilde{\Lambda}) U^T \\&= 2 (U \tilde{\Lambda} U^T) \left[U T_{k-1}(\tilde{\Lambda})U^T \right] - U T_{k-1}(\tilde{\Lambda}) U^T \\&= 2 (U \tilde{\Lambda} U^T) T_{k-1} (U \tilde{\Lambda} U^T) - T_{k-1} (U \tilde{\Lambda} U^T) \\&= T_k (U \tilde{\Lambda} U^T)\end{aligned}UTk(Λ~)UT=2UΛ~Tk1(Λ~)UTUTk1(Λ~)UT=2(UΛ~UT)[UTk1(Λ~)UT]UTk1(Λ~)UT=2(UΛ~UT)Tk1(UΛ~UT)Tk1(UΛ~UT)=Tk(UΛ~UT)
因此,根据数学归纳法, 证毕。

(2)已知

L˜=UΛ˜UT\tilde L= U \tilde{\Lambda} U^TL~=UΛUT

(3)将(1)、(2)两式带入卷积公式:

gθx=UgθUTx=Ugθ(Λ)UTx=U(k=0KθkTK(Λ˜))UTx=(k=0KθkTK(UΛ˜UT))x=k=0KθkTK(L˜)x(5)\begin{aligned}g_\theta * x & = Ug_\theta U^Tx \\& = U g_{\theta}(Λ) U^Tx \\& =U (\sum^{K}_{k=0} \theta_kT_K(\tilde Λ)) U^Tx \\& = (\sum^{K}_{k=0} \theta_kT_K(U\tilde Λ U^T)) x \\& = \sum^{K}_{k=0} \theta_k T_K(\tilde L) x \qquad (5)\end{aligned}gθx=UgθUTx=Ugθ(Λ)UTx=U(k=0KθkTK(Λ~))UTx=(k=0KθkTK(UΛ~UT))x=k=0KθkTK(L~)x(5)


8.3 一阶ChebNet(1stChebNet)-GCN

一阶ChebNet源于论文(T. N. Kipf and M.Welling, “Semi-supervised classification with graph convolutional networks,” in Proceedings of the International Conference on Learning Representations, 2017)。这篇论文基于前面的工作,正式成为GCN的开山之作,后面很多变种都是基于这篇文章的。

该篇论文贡献有两点:

  • 作者对于直接操作于图结构数据的网络模型根据频谱图卷积(Hammond等人于2011年提出的Wavelets on graphs via spectral graph theory)使用一阶近似简化计算的方法,提出了一种简单有效的层式传播方法。
  • 作者验证了图结构神经网络模型可用于快速可扩展式的处理图数据中节点半监督分类问题,作者通过在一些公有数据集上验证了自己的方法的效率和准确率能够媲美现有的顶级半监督方法。

下面介绍ChebNet的一阶近似方法:
Kipf等人引入了一种一阶近似ChebNet。假设K=1,λmax=2K=1,\lambda_{max}=2K=1,λmax=2,则ChebNet卷积公式简化近似为:

xgθ=θ0xθ1D1/2AD1/2xx*g_\theta = \theta_0x - \theta_1 D^{− 1 /2} AD^{− 1 /2}xxgθ=θ0xθ1D1/2AD1/2x
为了抑制参数数量防止过拟合,1stChebNet假设θ=θ0=θ1\theta=\theta_0=-\theta_1θ=θ0=θ1,图卷积的定义就近似为(这是简单的一阶模型):

gθx=θ(IN+D1/2AD1/2)xg_θ * x = θ (I_N + D^{− 1 /2} AD^{− 1 /2} ) xgθx=θ(IN+D1/2AD1/2)x
其中

  • IN+D1/2AD1/2I_N+D^{−1/2}AD^{−1/2}IN+D1/2AD1/2是有范围[0,2]的特征值。因此,如果在深度神经网络模型中使用该算子,则反复应用该算子会导致数值不稳定(发散)和梯度爆炸/消失。

为了解决该问题, 引入了一个renormalization trick(归一化技巧):
IN+D1/2AD1/2A˜=A+IND˜1/2A˜D˜1/2I_N+D^{−1/2}AD^{−1/2} \stackrel{\tilde A=A+I_N}{\longrightarrow} \tilde D^{−1/2} \tilde A \tilde D^{−1/2}IN+D1/2AD1/2D~1/2A~D~1/2
其中

  • A˜=A+IN,D˜ii=jA˜ij\tilde A=A+I_N,\tilde D_{ii}=∑_j \tilde A_{ij}A~=A+IN,D~ii=jA~ij,即图中加上自环

再加上一个激活函数,最后就可以得到了论文中的快速卷积公式:
H(l+1)=f(Hl,A)=σ(D˜1/2A˜D˜1/2H(l)W(l))H ^{(l+1)} =f(H^l,A)=\sigma (\tilde D^{-1/2} \tilde A \tilde D^{ − 1/2} H^{(l)}W^{(l)} )H(l+1)=f(Hl,A)=σ(D~1/2A~D~1/2H(l)W(l))

  • WWW就是参数θ\thetaθ参数矩阵

推广:特征映射公式
可以将这个定义推广到具有C个输入通道(即每个节点的C维特征向量)的信号XRN×CX∈\mathbb{R}^{N×C}XRN×C和 F 个滤波器或特征映射如下:

Z=D˜1/2A˜D˜1/2XΘZ = \tilde D^{− 1 /2} \tilde A \tilde D^{− 1/ 2} XΘZ=D~1/2A~D~1/2XΘ
其中

  • ΘRC×FΘ∈\mathbb{R}^{C×F}ΘRC×F 是一个滤波器参数矩阵,其实就是参数矩阵W
  • ZRN×FZ∈\mathbb{R}^{N×F}ZRN×F 是一次卷积的输出矩阵。

这个滤波操作复杂度是 OEFCO(|E|FC)OEFC)(其中E为边数,C为特征向量维度,F为卷积核数量),并且A˜X\tilde AXA~X `可以有效地实现为密集矩阵和稀疏矩阵的乘积。(在源代码中使用了稀疏矩阵和稠密矩阵乘法)

带一阶滤波器的多层图卷积网络(GCN)的结构图如下图所示。

Input:Feature matrix XRN×DX \in \mathbb{R}^{N \times D}XRN×D,preprocessed adjacency matrix A˜\tilde AA~

在看了上面的公式以及论文中的训练方法之后,并没有觉得GCN有多么特别,无非就是一个设计巧妙的公式,也许不用这么复杂的公式,多加一点训练数据或者把模型做深,也可能达到媲美的效果呢。

最后论文的附录里提到“even an untrained GCN model with random weights can serve as a powerful feature extractor for nodes in a graph”,可见即使不训练,完全使用随机初始化的参数W,GCN提取出来的特征就已经十分优秀了!这跟CNN不训练是完全不一样的,CNN不训练是根本得不到什么有效特征的。

然后作者做了一个实验,使用一个俱乐部会员的关系网络,使用随机初始化的GCN进行特征提取,得到各个node的embedding,然后可视化:

 

可以发现,在原数据中同类别的node,经过GCN的提取出的embedding,已经在空间上自动聚类了。

而这种聚类结果,可以和DeepWalk、node2vec这种经过复杂训练得到的node embedding的效果媲美了。

作者接着给每一类的node,提供仅仅一个标注样本,然后去训练,得到的可视化效果如下:

GCN的一些特点

1)、权值共享,参数共享,从AXWAXWAXW可以看出每一个节点的参数矩阵都是W,权值共享;
2)、具有局部性Local Connectivity,也就是局部连接的,因为每次聚合的只是一阶邻居;
上述两个特征也是CNN中进行参数减少的核心思想
3)、感受野正比于卷积层层数,第一层的节点只包含与直接相邻节点有关的信息,第二层以后,每个节点还包含相邻节点的相邻节点的信息,这样的话,参与运算的信息就会变多。层数越多,感受野越大,参与运算的信息量越充分。也就是说随着卷积层的增加,从远处邻居的信息也会逐渐聚集过来。
4)、复杂度大大降低,不用再计算拉普拉斯矩阵,特征分解

关于1stChebNet CGN的更多细节,可以参考博客:
Semi-Supervised Classification with Graph Convolutional Networks用图卷积进行半监督分类

GCN的一些改进的变种

1stChebNet的主要缺点是在批训练时,随着1stChebNet层数的增加,计算消耗成指数增加。最后一层的每一个节点都必须递归的在以前层中扩展他的邻居节点。
Chen et al.(J. Chen, T. Ma, and C. Xiao, “Fastgcn: fast learning with graph
convolutional networks via importance sampling,”,ICLR 2018)假设1stChebNetD多维的图卷积方程中重新调整的邻接矩阵A˜\tilde AA~来自采样分布。这样就可以使用蒙特卡洛和方差约减技术加速训练过程。
Chen et al.(J. Chen, J. Zhu, and L. Song, “Stochastic training of graph
convolutional networks with variance reduction,”,ICML 2018 )通过邻域采样和原来的隐藏表示将GCN的感受野缩小到任意小size。
Huang et al.(W. Huang, T. Zhang, Y. Rong, and J. Huang, “Adaptive sampling
towards fast graph representation learning,”,NIPS,2018)提出了一种自适应分层抽样方法来加速1stChebNet的训练,其中低层的抽样以高层的抽样为条件。该方法也适用于显式方差约简。

9. GCN代码分析和数据集Cora、Pubmed、Citeseer格式

数据集格式见下一篇:GCN使用的数据集Cora、Citeseer、Pubmed、Tox21格式

代码分析见下一篇:图卷积网络GCN代码分析(Tensorflow版)

10. 从空间角度理解GCN

前面介绍了GCN谱方法的推导以及背后的思路等,这是一种比较严谨和理论的方法。但是,其实可以发现,在傅立叶域上定义出来的GCN操作,其实也可以在空间域上进行理解,其就是所谓的消息传递机制,或者说每次从邻居中聚集信息然后对中心节点进行更新。

如下图所示,红色节点S1的邻居正是蓝色节点B1,B2,B3,这些邻居节点根据一定的规则将信息,也就是特征,汇总到红色节点上。

通常来说,会加入一个线性变换矩阵W,以作为汇聚节点特征的特征维度转换(或者说是映射),于是有

uN(v)H(l)(u))W(l)\sum_{u \in \mathcal{N}(v)} H^{(l)}(u)) W^{(l)}uN(v)H(l)(u))W(l)
加入激活函数后有:

σ(uN(v)H(l)(u))W(l))\sigma(\sum_{u \in \mathcal{N}(v)} H^{(l)}(u)) W^{(l)})σ(uN(v)H(l)(u))W(l))
上式用更为紧致的矩阵形式表达:

H(l+1)=(H(l),A)=σ(AH(l)W(l))H ^{(l+1)}=(H^{(l)},A)=σ(A H^{(l)}W^{(l)})H(l+1)=(H(l),A)=σ(AH(l)W(l))
不难发现,其实HW的结果乘上邻接矩阵A的目的其实在于选在一阶邻居节点,其实本质就是在于邻居节点的信息传递。但是上式还可以进行一些改进,比如信息聚合时没有考虑节点自己的信息,因此可以在图中加入一个自环,邻接矩阵变为

A˜=A+IN\tilde A=A+I_NA~=A+IN
度矩阵变为

D˜ii=jA˜ij\tilde D_{ii}=∑_j \tilde A_{ij}D~ii=jA~ij
为了标准化(或归一化)邻接矩阵A使得每行之和为1,可以令:

A˜=D˜1A˜\tilde A=\tilde D^{-1} \tilde AA~=D~1A~

这样就行归一化以后,对邻居的聚合就不是求和了而是求平均值。

还是考虑此图

A=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪010010101010010100001011110100000100⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪D=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪200000030000002000000300000030000001⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪A=\left\{\begin{matrix}0 & 1 & 0 & 0 & 1 & 0\\1 & 0 & 1 & 0 & 1 & 0\\0 & 1 & 0 & 1 & 0 & 0\\0 & 0 & 1 & 0 & 1 & 1\\1 & 1 & 0 & 1 & 0 & 0\\0 & 0 & 0 & 1 & 0 & 0\end{matrix}\right\},D=\left\{\begin{matrix}2 & 0 & 0 & 0 & 0 & 0\\0 & 3 & 0 & 0 & 0 & 0\\0 & 0 & 2 & 0 & 0 & 0\\0 & 0 & 0 & 3 & 0 & 0\\0 & 0 & 0 & 0 & 3 & 0\\0 & 0 & 0 & 0 & 0 & 1\end{matrix}\right\}A=010010101010010100001011110100000100D=200000030000002000000300000030000001

A˜=A+IN=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪110010111010011100001111110110000101⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪D˜=jA˜ij=D+IN=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪300000040000003000000400000040000002⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪\tilde A=A+I_N=\left\{\begin{matrix}1 & 1 & 0 & 0 & 1 & 0\\1 & 1 & 1 & 0 & 1 & 0\\0 & 1 & 1 & 1 & 0 & 0\\0 & 0 & 1 & 1 & 1 & 1\\1 & 1 & 0 & 1 & 1 & 0\\0 & 0 & 0 & 1 & 0 & 1\end{matrix}\right\},\tilde D=∑_j \tilde A_{ij}=D+I_N=\left\{\begin{matrix}3 & 0 & 0 & 0 & 0 & 0\\0 & 4 & 0 & 0 & 0 & 0\\0 & 0 & 3 & 0 & 0 & 0\\0 & 0 & 0 & 4 & 0 & 0\\0 & 0 & 0 & 0 & 4 & 0\\0 & 0 & 0 & 0 & 0 & 2\end{matrix}\right\}A~=A+IN=110010111010011100001111110110000101D~=jA~ij=D+IN=300000040000003000000400000040000002则归一化以后为

D˜1A˜=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪1/30000001/40000001/30000001/40000001/40000001/2⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪110010111010011100001111110110000101⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪1/31/4001/401/31/41/301/4001/41/31/400001/31/41/41/21/31/401/41/400001/401/2⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪\tilde D^{-1} \tilde A=\left\{\begin{matrix}1/3 & 0 & 0 & 0 & 0 & 0\\0 & 1/4 & 0 & 0 & 0 & 0\\0 & 0 & 1/3 & 0 & 0 & 0\\0 & 0 & 0 & 1/4 & 0 & 0\\0 & 0 & 0 & 0 & 1/4 & 0\\0 & 0 & 0 & 0 & 0 & 1/2\end{matrix}\right\}\cdot\left\{\begin{matrix}1 & 1 & 0 & 0 & 1 & 0\\1 & 1 & 1 & 0 & 1 & 0\\0 & 1 & 1 & 1 & 0 & 0\\0 & 0 & 1 & 1 & 1 & 1\\1 & 1 & 0 & 1 & 1 & 0\\0 & 0 & 0 & 1 & 0 & 1\end{matrix}\right\}=\left\{\begin{matrix}1/3 & 1/3 & 0 & 0 & 1/3 & 0\\1/4 & 1/4 & 1/4 & 0 & 1/4 & 0\\0 & 1/3 & 1/3 & 1/3 & 0 & 0\\0 & 0 & 1/4 & 1/4 & 1/4 & 1/4\\1/4 & 1/4 & 0 & 1/4 & 1/4 & 0\\0 & 0 & 0 & 1/2 & 0 & 1/2\end{matrix}\right\}D~1A~=1/30000001/40000001/30000001/40000001/40000001/2110010111010011100001111110110000101=1/31/4001/401/31/41/301/4001/41/31/400001/31/41/41/21/31/401/41/400001/401/2上式对邻接矩阵进行了标准化,这个标准化称之为random walk normalization。然而,在实际中,动态特性更为重要,因此经常使用的是symmetric normalization(对称归一化):

A˜=D˜1/2A˜D1/2\tilde A=\tilde D^{− 1 /2} \tilde A D^{− 1 /2}A~=D~1/2A~D1/2

D˜1/2=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪13√00000014√00000013√00000014√00000014√00000012√⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪\tilde D^{-1/2}=\left\{\begin{matrix}\frac{1}{\sqrt{3}} & 0 & 0 & 0 & 0 & 0\\0 & \frac{1}{\sqrt{4}} & 0 & 0 & 0 & 0\\0 & 0 & \frac{1}{\sqrt{3}} & 0 & 0 & 0\\0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0 & 0\\0 & 0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0\\0 & 0 & 0 & 0 & 0 & \frac{1}{\sqrt{2}}\end{matrix}\right\}D~1/2=310000004100000031000000410000004100000021

A˜=D˜1/2A˜D1/2=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪13√00000014√00000013√00000014√00000014√00000012√⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪110010111010011100001111110110000101⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪13√00000014√00000013√00000014√00000014√00000012√⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪19√112√00112√0112√116√112√0116√00112√19√112√0000112√116√116√18√112√116√0116√116√000018√014√⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪\tilde A=\tilde D^{− 1 /2} \tilde A D^{− 1 /2}=\left\{\begin{matrix}\frac{1}{\sqrt{3}} & 0 & 0 & 0 & 0 & 0\\0 & \frac{1}{\sqrt{4}} & 0 & 0 & 0 & 0\\0 & 0 & \frac{1}{\sqrt{3}} & 0 & 0 & 0\\0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0 & 0\\0 & 0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0\\0 & 0 & 0 & 0 & 0 & \frac{1}{\sqrt{2}}\end{matrix}\right\}\cdot\left\{\begin{matrix}1 & 1 & 0 & 0 & 1 & 0\\1 & 1 & 1 & 0 & 1 & 0\\0 & 1 & 1 & 1 & 0 & 0\\0 & 0 & 1 & 1 & 1 & 1\\1 & 1 & 0 & 1 & 1 & 0\\0 & 0 & 0 & 1 & 0 & 1\end{matrix}\right\}\cdot\left\{\begin{matrix}\frac{1}{\sqrt{3}} & 0 & 0 & 0 & 0 & 0\\0 & \frac{1}{\sqrt{4}} & 0 & 0 & 0 & 0\\0 & 0 & \frac{1}{\sqrt{3}} & 0 & 0 & 0\\0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0 & 0\\0 & 0 & 0 & 0 & \frac{1}{\sqrt{4}} & 0\\0 & 0 & 0 & 0 & 0 & \frac{1}{\sqrt{2}}\end{matrix}\right\}=\\\left\{\begin{matrix}\frac{1}{\sqrt{9}} & \frac{1}{\sqrt{12}} & 0 & 0 & \frac{1}{\sqrt{12}} & 0\\\frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{12}} & 0 & \frac{1}{\sqrt{16}} & 0\\0 & \frac{1}{\sqrt{12}} & \frac{1}{\sqrt{9}} & \frac{1}{\sqrt{12}} & 0 & 0\\0 & 0 & \frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{8}}\\\frac{1}{\sqrt{12}} & \frac{1}{\sqrt{16}} & 0 & \frac{1}{\sqrt{16}} & \frac{1}{\sqrt{16}} & 0\\0 & 0 & 0 & \frac{1}{\sqrt{8}} & 0 & \frac{1}{\sqrt{4}}\end{matrix}\right\}A~=D~1/2A~D1/2=310000004100000031000000410000004100000021110010111010011100001111110110000101310000004100000031000000410000004100000021=91121001210121161121016100121911210000121161161811211610161161000081041

对拉普拉斯矩阵进行对称标准化,有:

Lsym:=D1/2LD1/2=D1/2(DA)D1/2=InD1/2AD1/2L^{sym} := D^{− 1 /2} L D^{− 1 /2} =D^{− 1 /2} (D-A) D^{− 1 /2} =I_n - D^{− 1 /2} A D^{− 1 /2}Lsym:=D1/2LD1/2=D1/2(DA)D1/2=InD1/2AD1/2
这就是在GCN谱方法推导中中提到的拉普拉斯矩阵要这样标准化的原因了。
经过邻接矩阵添加自环,已经对称标准化之后,可以得到

H(l+1)=f(Hl,A)=σ(D˜1/2A˜D˜1/2H(l)W(l))H ^{(l+1)} =f(H^l,A)=\sigma (\tilde D^{-1/2} \tilde A \tilde D^{ − 1/2} H^{(l)}W^{(l)} )H(l+1)=f(Hl,A)=σ(D~1/2A~D~1/2H(l)W(l))

这就是GCN用谱方法推导出来的公式,这样就可以从空间结构的角度理解一阶ChebNet(GCN)了。

虽然从空间的角度理解似乎更简单,但是,知其然,还要知其所以然嘛。了解了GCN的谱方法的推导相信可以更深刻的理解GCN,也有利于做一些其他的研究。

11. GCN处理不同类型的图

关于带权图问题

GCN论文里的针对的是无权的无向图,并且采用的是平均聚合的方法,邻居之间没有权重。但是,现实生活中更多的是带权图。比如,我们都认识马化腾,但是张志东与马化腾的亲密度要比我们和马化腾的亲密度高得多。因此,可以预测张志东的工资比我们更接近马化腾。

不过GCN还是可以直接处理带权图,原来的邻居矩阵取值只能是0和1,现在可以取更多的权值。

关于有向图问题

前面的都是针对于无向图的问题,所有拉普拉斯矩阵是对称矩阵,但是在有向图中,就不能定义拉普拉斯矩阵了。目前的两种解决思路:
(a)要想保持理论上的完美,就需要重新定义图的邻接关系,保持对称性
比如这篇文章MotifNet: a motif-based Graph Convolutional Network for directed graphs
提出利用Graph Motifs定义图的邻接矩阵。

(b)如果只是为了应用,有其他形式的GCN或者GAT可以处理有向图

值得说明的是:GAT作者写道“It is worth noting that, as Kipf & Welling (2017) and Atwood & Towsley (2016), our work can also be reformulated as a particular instance of MoNet (Monti et al., 2016). ”

也就是说本质上这些模型都可以认为是在重新定义了图的邻接关系后,再进行基本的卷积运算。

节点没有特征的图

对于很多网络,可能没有节点的特征,这个时候也是可以使用GCN的,如论文中作者对那个俱乐部网络,采用的方法就是用单位矩阵 I替换特征矩阵X。

12. 问题讨论

下面将总结一些常见的问题和回答,欢迎大佬们一起讨论

Q1:GCN中邻接矩阵为什么要归一化?

A1:归一化解决了平均的问题。举个例子,如果把『我』看成当前节点,『我的朋友』看做『我』的相邻节点,要估算『我的工资』该怎么做呢?对邻居节点的工资进行加权后是求和,不能估算『我的工资』,求和的方式可能出现一个低端交际花员工的工资比一个朋友较少的大佬的工资更高。因此,进行归一化(D1AD^{-1}AD1A)取平均值,就可以更合理的估算『我的工资』。

Q2:GCN中邻接矩阵为什么要对称归一化?

Q3:GCN中参数矩阵W的维度如何确定?

由下列公式可知
Z=D˜1/2A˜D˜1/2XWZ = \tilde D^{− 1 /2} \tilde A \tilde D^{− 1/ 2} XWZ=D~1/2A~D~1/2XW
参数矩阵W的行数为图中节点数N,而列数F为可调参数。

Q4:为什么GCN里使用NELL数据集相比于其他三个的分类准确率这么低?

Q5:目前GCN的分类准确率仅为80%左右,如何提高GCN在Citeseer、Cora、Pubmed、Nell上的分类准确率?







最后,欢迎加微信进群交流,只为一起学习,不含任何商业推广。

资料下载

多篇图卷积相关ppt下载
ResGCN-Can GCNs Go as Deep as CNNs? 两份PPT(官方PPT和会议PPT)
Cluster-GCN An Efficient Algorithm for Training Deep and Large Graph…ppt
Large-Scale Learnable Graph Convolutional Networks(LGCN)ppt

参考

本文结合了知乎,博客,论文,百度百科,维基百科等多方面的参考重新做了一个整理,感谢在这之前一些大佬做出的总结,一些重要的参考如下:
[1]. Neural Message Passing for Quantum Chemistry, https://arxiv.org/abs/1704.01212  
[2]. Inductive Representation Learning on Large Graphs, https://arxiv.org/abs/1706.02216  
[3]. Diffusion-Convolutional Neural Networks, https://arxiv.org/abs/1511.02136  
[4]. Learning Convolutional Neural Networks for Graphs, https://arxiv.org/pdf/1605.05273  
[5]. Spectral Networks and Locally Connected Networks on Graphs, https://arxiv.org/abs/1312.6203 
[6]. Convolutional neural networks on graphs with fast localized spectral filtering, https://papers.nips.cc/paper/6081-convolutional-neural-networks-on-graphs-with-fast-localized-spectral-filtering 
[7]. Semi-Supervised Classification with Graph Convolutional Networks, https://arxiv.org/pdf/1609.02907

图卷积神经网络入门基础
图卷积网络知识汇总
GNN 教程:漫谈谱图理论和GCN的起源
知乎:如何理解 Graph Convolutional Network(GCN)?
从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一)
从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)

posted on 2019-09-20 10:24  曹明  阅读(829)  评论(0编辑  收藏  举报