图卷积神经网络(GCN)的理解

目录

前言

矩阵乘法的三种视角

图信号与图的拉普拉斯矩阵

图傅里叶变换

图滤波器

空域视角

频域视角

图卷积神经网络

对频率响应矩阵进行参数化

对多项式系数进行参数化

设计固定的图滤波器


前言

现在网上已经有很多了,为什么还要写? 原因有以下4点:

1. 自从我学习机器学习和深度学习以来,在CSDN平台获得了不少高手的真知灼见,受益匪浅。回馈于社区,帮助刚刚入门GNN的同学是一种自然的想法;

2. 我也是刚刚接触和学习GNN,关于这一部分内容,我才刚刚看完,我希望自己能够将自己的思路和理解整理出来,让我获得更多的放松感,正如心理学家Daniel Kahneman在《思考,快与慢》一书中说的那样,对认知任务进行重复,能够获得放松感,而放松感能够带来愉悦的心情和激发人的创造力,显然,这是一个正反馈的过程;

3. 对书本内容的进一步细化或许对于初学者来说将会是必要的。书上或者论文上的讲解,很多地方只是一句带过,对于那些数学基础不是特别好,但是有迫于想理解GNN背后的事儿的学习者来说,他们的系统2是不容易被激发出来的,甚至有可能会对该部分内容心生恐惧和排斥感。因此,以一种容易理解的方式表述出来对于读者的理解是有帮助的;

4.在阅读书中内容的时候,部分读者由于没有傅里叶变换的基础,很容易被其中掺杂的一些无关紧要的点困住,致使抓不住重点,理不清楚逻辑链。

假设你已经学习过深度学习的基础知识(CNN最重要),要看懂这篇博文,如果你有复杂网络的基础并了解一点傅里叶变换,理解起来将会更容易,但这并不是必要的,你只需要具备高等代数(线性代数)和一点点数学分析的知识就可以啦!

在进入正题之前,我们必须要思考这样一个问题:GNN解决了什么问题?

传统的深度学习处理的是规则的数据,仅仅只是局限于欧式空间。但是在真是的世界里,我们常常能够看到有很多图数据,例如生物网络(蛋白质相互作用网络,基因调控网络),交通网络,社交网络,科研文章引用网络等等,这些数据内部之间有自己的结构和相互联系。将深度学习在以往欧式空间中处理数据的成功迁移到图数据上来,是一种自然且十分必要的需求。

接下来大概需要1个小时的时间,泡杯茶,笔和草稿纸准备好,我们一起开始!

矩阵乘法的三种视角

这部分内容主要以矩阵乘法为主,为了帮助读者更容易地理解这部分内容,有必要再介绍矩阵乘法的另外两种视角。

设有矩阵A\in R^{K\times M}B\in R^{M\times P}, 对于C=AB, 有如下三种计算方式:

(1)内积视角:这个我们已经很熟悉啦,将A视为行向量矩阵,B视为列向量矩阵,则

C_{ij}= \sum_{m}^{M}A_{im}B_{mj}       

(2)将B视为一个行向量矩阵, A视为一个系数矩阵,则

C_{i,:}=\sum_{m}^{M}A_{im}B_{m,:}

举个例子,你马上就能明白,设

A=\begin{bmatrix} 1& -1 &-1 \\ 0& 2 &1 \end{bmatrix}B=\begin{bmatrix} 2 & 0\\ -1 & 1\\ 0 & -1 \end{bmatrix}

用熟悉的内角视角立即得到

C=\begin{bmatrix} 3&-3 \\ -2&1 \end{bmatrix}

按照上述行视角进行计算,以C的第一行为例:

\begin{bmatrix} 3&-3 \end{bmatrix}=\begin{bmatrix} 1& -1 &2 \end{bmatrix}\begin{bmatrix} 2&0 \\ -1&1 \\ 0&1 \end{bmatrix}

                                                                =1\times \begin{bmatrix} 2&0 \end{bmatrix}+(-1)\times \begin{bmatrix} -1&1 \end{bmatrix}+2\times \begin{bmatrix} 0&-1 \end{bmatrix}

                                                                =\begin{bmatrix} 2&0 \end{bmatrix}+\begin{bmatrix} 1&-1 \end{bmatrix}+\begin{bmatrix} 0&-2 \end{bmatrix}

                                                                =\begin{bmatrix} 3&-3 \end{bmatrix}

(3)将A视为一个行向量矩阵,B视为一个系数矩阵,则

C_{:,j}=\sum_{m}^{M} B_{mj}A_{:,m}

还是上面的例子,以C的第一列计算来看的话:

\begin{bmatrix} 3\\-2 \end{bmatrix}=\begin{bmatrix} 1&-1 &2 \\ 0&2 &1 \end{bmatrix}\begin{bmatrix} 2\\-1 \\0 \end{bmatrix}

                                                                 =2\begin{bmatrix} 1\\0 \end{bmatrix}+(-1)\begin{bmatrix} -1\\2 \end{bmatrix}+0\begin{bmatrix} 2\\0 \end{bmatrix}

                                                                 =\begin{bmatrix} 2\\0 \end{bmatrix}+\begin{bmatrix} 1\\-2 \end{bmatrix}+\begin{bmatrix} 0\\0 \end{bmatrix}

                                                                 =\begin{bmatrix} 3\\-2 \end{bmatrix}

上述矩阵乘法三种视角对后面矩阵、向量运算推导的理解大有益处,务必留意。

图信号与图的拉普拉斯矩阵

设无向无权图G=(V,E)V表示的是网络图中所有节点的结合,E表示的是网络图中所有边的集合。在后面的表示中,我们如果将图G中的所有节点用自然数1,2,3,\cdots ,i,\cdots N进行编号,将第i个节点记为v_{i},节点v_{i},v_{j}之间的连边记为e_{ij}

图信号是一种描述由映射V\rightarrow R所决定的函数值,可以将上述图网络G的图信号表述成向量的形式:

x=\begin{bmatrix} x_{1} & x_{2} & \dots & x_{N} \end{bmatrix}^{T}

其中的分量x_{i}所表示的是节点v_{i}上的信号强度,如图1所示,竖线的长度表示节点上信号值的大小:

图1 图信号示例

需要注意的是,图信号是定义在网络中节点上的信号,而节点之间有自己的关联结构。在研究图信号性质的时候,除了要考虑图信号的强度之外,还需要考虑图网络的拓扑结构,同样一组图信号在不同图网络上具有截然不同的性质。 

拉普拉斯矩阵(Laplacian Matrix)是用来研究图网络的结构性质的核心对象,拉普拉斯矩阵的定义如下:

L=D-A

其中,A是图G邻接矩阵D是图G度矩阵,即

D_{ii}=\sum_{j}A_{ij}

由此拉普拉斯矩阵元素级别的定义是容易理解的:

L_{ij}=\left\{\begin{matrix} deg(v_{i} )& i=j \\ -1 & e_{ij}\in E \\ 0&otherwise \end{matrix}\right.

deg(v_{i})表示的是节点v_{i}的度值,显然L是一个实对称矩阵。另外,拉普拉斯矩阵还有一种正则化的形式(symmetric normalized laplacian):

L_{sym}[i,j]=\left\{\begin{matrix} 1& i=j \\ \frac{-1}{\sqrt{deg(v_{i})deg(v_{j})} } & e_{ij}\in E \\ 0&otherwise \end{matrix}\right.

在图信号中,拉普拉斯算子被用来描述中心节点与邻居节点之间的信号差异,这将在下面的式子中得到体现:

Lx=(D-A)x

先别急,这样还看不出来,将上面的式子剖析开来:

x_{i}^{'}=L_{i,:}x=(D_{i,:}-A_{i,:})x=D_{i,:}x-A_{i,:}x=D_{ii}x_{i}-A_{i,:}x=\sum_{v_{j}}A_{ij}x_{i}-\sum_{v_{j}}A_{ij}x_{j}=\sum_{v_{j}}A_{ij}(x_{i}-x_{j})=\sum_{v_{j} \in N(v_{i})}(x_{i}-x_{j})

最后一个等号处是由于A_{ij}要么是0,要么是1,在节点v_{i},v_{j}之间有连边时候取1,满足v_{j} \in N(v_{i})的那些节点就是与节点v_{i}有连边的节点。从而有

Lx=(D-A)x=\begin{bmatrix} \dots & \sum_{v_{j} \in N(v_{i})}(x_{i}-x_{j}) & \dots \end{bmatrix}

由此可知,拉普拉斯矩阵是一个反应图信号局部(每一个节点的一阶子图)平滑度的算子,即反映出来的是每一个节点与其邻居节点的信号差异程度。

更进一步地,我们可以看到下面的二次型(非常重要!):

x^{T}Lx=\sum_{v_{i}}\sum_{v_{i}\in N(i))}x_{i}(x_{i}-x_{j})=\sum_{e_{ij}\in E}(x_{i}-x_{j})^{2}

TV(x)=x^{T}Lx=\sum_{v_{i}}\sum_{v_{i}\in N(i))}x_{i}(x_{i}-x_{j})=\sum_{e_{ij}\in E}(x_{i}-x_{j})^{2}

TV(x)被称为总变差(Total Variation),它是一个标量,它量所有具有连边的节点之间的信号差进行累加,刻画了信号整体的平滑度。

图傅里叶变换

傅里叶变换在数字信号的处理中获得了巨大的成功,围绕傅里叶变换,信号的滤波,等操作都有了完备的理论定义。类比数学信号的傅里叶变换,接下来将导出图信号傅里叶变换的定义,即将图信号由空域(spatial domain)视角转化到频域(frequency domain)视角,以便于图信号处理理论体系的建立。

假设无向无权图G的拉普拉斯矩阵为L\in R^{N\times N},由于L是一个是对称矩阵,由线性代数的知识可知,L可以被正交对角化,所以有

L=V\Lambda V^{T}=V\begin{bmatrix} \lambda _{1}& & & \\ & \lambda _{2}& & \\ & & \ddots & \\ & & &\lambda _{N} \end{bmatrix}V^{T}

其中V=\begin{bmatrix} v_{1}&v_{2} &\dots &v_{N} \end{bmatrix} 是一个正交矩阵,即VV^{T}=Iv_{i}表示L的第i个特征值\lambda _{i}所对应的单位特征向量,由正交矩阵的性质可知,这些单位特征向量彼此之间是线性无关的,我们不妨设\lambda _{1}\le \lambda _{2}\le \cdots \le \lambda _{N}

对于任意向量x,拉普拉斯矩阵的二次型

x^{T}Lx=\sum_{v_{i}}\sum_{v_{i}\in N(i))}x_{i}(x_{i}-x_{j})=\sum_{e_{ij}\in E}(x_{i}-x_{j})^{2}\ge0

因此拉普拉斯矩阵是一个半正定矩阵,故所有的特征值都大于或等于0。

图信号的傅里叶变换(Graph Fourier Transform,GFT)定义为:

对于任意一个在图G上的信号x,其傅里叶变换为:

\tilde{x}_{k}=v_{k}\cdot x=\sum_{i=1}^{N}V_{ki}x_{i}

特征向量称为傅里叶基\tilde{x}_{k}是信号x在第k个傅里叶基上的傅里叶系数。上面的式子右端是内积运算,相当于傅里叶系数是图信号在傅里叶基上的投影,衡量了图信号与傅里叶基之间的相似度。利用矩阵形式计算出所有的傅里叶系数:

\tilde{x}=V^{T}x,\tilde{x}\in R^{N}

注意到,由于V是正交矩阵,故上式两端同时左乘V,有:

V\tilde{x}=VV^{T}x=Ix=x

即:

x=V\tilde{x},x\in R^{N} 

于是,逆图傅里叶变换(Inverse Graph Fourier Transform,IGFT)定义为:

x_{k}=\sum_{i = 1}^{N}V_{ki}\cdot \tilde{x}_{i}

上面矩阵形式的逆图傅里叶变换可以进一步利用矩阵相乘的列向量视角进行改写:(这个式子很重要!!!)

x = V\tilde{x}=\begin{bmatrix} v_{1}&v_{2} &\dots &v_{N} \end{bmatrix} \begin{bmatrix} \tilde {x}_{1}\\ \tilde{x}_{2}\\ \vdots \\ \tilde {x}_{N} \end{bmatrix}

=\tilde {x}_{1}v_{1}+\tilde {x}_{2}v_{2}+\cdots +\tilde {x}_{N}v_{N}=\sum_{k=1}^{N} \tilde {x}_{k}v_{k}

由此可知,从线性代数的角度来看,v_{1},v_{2},\cdots ,v_{N}组成了N维特征空间中的一组完备的基向量,图G上的任意一个图信号都可以表示为这组基向量的线性组合,组合系数就是图信号在对应傅里叶基上的傅里叶系数。

类比傅里叶变换与时域信号频率的关系,接下来我们将探图傅里叶变换与图信号的频率的关系。

首先我们回到总变差的定义式子上:

TV(x)=x^{T}Lx=x^{T}V\Lambda V^{T}x

              =(V\tilde{x})^{T}V\Lambda V^{T}(V^{T}\tilde{x})

     =\tilde{x}V^{T}V\Lambda V^{T}V\tilde{x}

                                                                =\tilde{x}^{T}\Lambda \tilde{x}

                                                                =\sum_{k}^{N}\lambda _{k} \tilde{x}_{k}^{2}

这说明,总变差是图的特征值的线性组合,组合系数是图信号在对应傅里叶基上的傅里叶系数的平方。

将图信号限定在单位向量上来考虑。不防设特征值\lambda _{1},\lambda_{2},\cdots,\lambda_{N}是从小到大依次排列的,总变差取得最小值的条件是图信号与最小特征值所对应的特征向量v_{1}完全重合,由于\lambda _{1},\lambda_{2},\cdots,\lambda_{N}是两两正交的单位向量,所以此时总变差TV(v_{1})=\lambda_{1}。可以证明,若x=v_{k},则必然有TV(v_{k})=\lambda_{k},进一步地,若要在图G上选择一组彼此正交的图信号,使得各自的总变差依次取得最小值,那么这组图信号就是v_{1},v_{2},\cdots,v_{N}

结合总变差代表着图信号整体平滑度的实际意义,容易发现,特征值从小到大依次排列在一起,对图信号的平滑度作出了一种梯度刻画,因此我们可以将特征值等价成频率。

特征值越低,频率越低,对应的傅里叶基就变化得越缓慢,相邻节点上的信号值就越趋近于一致;特征值越高,频率越高,对应的傅里叶基就变化得越剧烈,相邻节点上的信号值则非常不一致。

同时,图信号的能量定义为:

E(x)=\left \| x \right \|_{2}^{2} =x^{T}x=(V\tilde{x})^T(V\tilde {x})=\tilde {x}^{T}\tilde {x}

即图信号的能量可以同时从空域和频域进行等价定义,单位向量的图信号能量为1。

有了频率的定义,傅里叶系数就可以等价成图信号在对应频率上的幅值(回忆总变差),反映了图信号在该频率分量上的强度。图信号在低频分量上的强度越大,该信号的平滑度就越高;相反,图信号在高频分量上的强度越大,该信号平滑度就越低。

定义好了图信号的傅里叶变换之后,我们就可以从频域的视角去研究图信号了。我们把图信号所有的傅里叶系数合在一起称为该信号的频谱(spectrum)。图傅里叶变换的逆变换更常用:在给定的一个图中,图信号的频谱就好比是一个人的身份ID,给出了频谱,就可以利用图傅里叶变换的逆变换,完整地推导出空域中的图信号。同时,频谱完整地描述了图信号的频域特性,为接下来的图信号采样、滤波、重构等信号处理工作创造了条件。

需要注意的是,频域视角是一种全局视角,图频谱上的任意一个傅里叶系数,都是对图信号的某种低频或高频特征的定量描述,这种描述既考虑了图信号本身值的大小,也考虑了图的结构信息。

图滤波器

有了频率的定义之后,接下来就可以定义图滤波器(Graph Filter)了。类比傅里叶变换在离散信号处理中的滤波器,在图信号处理中,图滤波器定义为对给定图信号的频谱中各个频率分量的强度进行增强或衰减的操作。具体来说,假设图滤波器为H\in R^{N\times N}H:R^{N}\longrightarrow R^N,令输出图信号为y,则有:

y=Hx=\sum_{k=1}^{N} (h(\lambda _{k})\tilde{x}_{k})v_{k}

与上述逆图傅里叶变换的公式相比,可以清楚地看到增强还是减弱是通过h(\lambda)来控制的,为了进一步了解H的形式,对上式作变换:

y=Hx=\sum_{k=1}^{N}(h(\lambda_{k})\tilde{x}_{k})v_{k}=\begin{bmatrix} v_{1} &v_{2} &\cdots &v_{N} \end{bmatrix}\begin{bmatrix} h(\lambda_{1})\tilde{x}_{1})\\ h(\lambda_{2})\tilde{x}_{2})\\ \vdots \\ h(\lambda_{N})\tilde{x}_{N}) \end{bmatrix}

=V\begin{bmatrix} h(\lambda_{1}) & & & \\ & h(\lambda_{2}) & & \\ & & \ddots & \\ & & &h(\lambda_{N}) \end{bmatrix}\begin{bmatrix} \tilde{x}_{1}\\ \tilde{x}_{2}\\ \vdots \\ \tilde{x}_{N} \end{bmatrix}

=V\begin{bmatrix} h(\lambda_{1}) & & & \\ & h(\lambda_{2}) & & \\ & & \ddots & \\ & & &h(\lambda_{N}) \end{bmatrix}V^{T}x

从而有

H=V\begin{bmatrix} h(\lambda_{1}) & & & \\ & h(\lambda_{2}) & & \\ & & \ddots & \\ & & &h(\lambda_{N}) \end{bmatrix}V^{T}=V\Lambda _{h}V^{T}

相较于图的拉普拉斯矩阵,滤波器H仅仅改动了对角矩阵上的值(特征值/图信号的频率),由此可知,H=0,如果i\neq je_{ij}\notin E,即H只在对角与边坐标上才有可能会取到非零值。从算子的角度上看,Hx描述了一种作用在每一个节点一阶子图上的变换操作。我们将满足上述性质的矩阵称为G的图位移算子(Graph Shift Operator)。拉普拉斯矩阵与邻接矩阵都是典型的图位移算子。

图滤波器(矩阵,算子)具有以下性质:

(1)线性:H(x+y)=Hx+Hy

(2)滤波操作是顺序无关的:H_{1}(H_{2}x)=H_{2}(H_{1}x)

(3)如果h(\lambda)不是0向量,则该滤波操作是可逆的。

\Lambda _{h}为图滤波器H频率响应矩阵,对应的函数h(\lambda)H频率响应函数,不同的频率响应函数可以实现不同的滤波效果。

在这里可以简单了解一下:信号处理中,常见的滤波器有3类,分别是低通滤波器、高通滤波器和带通滤波器(如图2)。

图2  三类滤波器的频率响应函数

 从图(a)中可以看出,低通滤波器只保留信号中的低频成分,更加关注信号中平滑的部分;从图(b)中可以看出,高通滤波器只保留信号中的高频成分,更加关注信号中剧烈变化得部分,从图(c)中可以看出,带通滤波器只保留信号特定频段的成分。

理论上,我们希望实现任意性质的图滤波器,也就是实现任意类型函数曲线的频率响应函数。泰勒定理是极其重要的,我们可以用多项式函数逼近近似任意函数。由矩阵理论可知,可以将泰勒定理推广到矩阵上来,考虑拉普拉斯矩阵多项式拓展形式的图滤波器:

H=h_{0}L^{0}+h_{1}L^{1}+h_{2}L^{2}+\cdots +h_{K}L^{K}=\sum_{k=0}^{K}h_{k}L^{k}

其中K是滤波器H的阶数。我们可以同时从空域视角和频率视角来理解上述图滤波器。

空域视角

对于y=Hx=\sum_{k=0}^{K}h_{k}L^{k}x,为了方便,我们可以约定:

x^{(k)}=L^{k}x=Lx^{(k-1)}

则:

y=\sum_{k=0}^{K}h_{k}x^{(k)}

通过上式,图滤波器将输入信号x作用了后,输出K+1组图信号的线性组合。由于L是一个图位移算子,因此从x^{k-1}x^{k}的变换只需要所有节点的一阶邻居参与计算。总的来看,x^{k}的计算只需要所有节点的k阶邻居参与,我们称这种性质为图滤波器的局部性质。顺便说一下,这里所说的k阶邻居是指,与目标节点的距离小于等于k的所有节点,例如,一节邻居是指与目标节点直接有边相连的所有节点。

从空域视角来看,图滤波操作具有以下性质:

(1)具有局部性质,每一个节点的输出信号值只需要考虑其K阶子图;

(2)可以通过K步迭代式的矩阵向量乘法完成滤波操作。

下面用一个例子来进一步理解图信号的滤波操作在空域的计算过程:

图3   图信号的滤波操作在空域的计算的一个例子

步如图3所示,图G中含有5个节点,(a)-(b)-(c) 是进行滤波器的3次迭代操作过程,每一个节点旁边标上的数字代表该节点的信号值。对于上图,知道这些信息就足够了,其他的暂时不消管,下面我们一起来看上面是如何来进行这3次迭代的:

G的邻接矩阵作为滤波器:

H=A=\begin{bmatrix} 0& 1& 1& 0& 0\\ 1& 0& 1& 1& 0\\ 1& 1& 0& 1& 0\\ 0& 1& 1& 0& 1\\ 0& 0& 0& 1& 0 \end{bmatrix}

给定图信号x=\begin{bmatrix} 1 & 0& 0& -1 & -1 \end{bmatrix}^{T},系数向量h=\begin{bmatrix} 1 & 0.5& 0.5 \end{bmatrix}^{T},由此滤波器的输出信号为:

y=h_{0}x^{(0)}+h_{1}x^{(1)}+h_{2}x^{(2)}

其中x^{(0)}=x=\begin{bmatrix} 1 & 0 & 0& -1 & -1 \end{bmatrix}^{T}x^{(1)}=Hx^{(0)}=\begin{bmatrix} 0 & 0 & 0& -1 & -1 \end{bmatrix}^{T}x^{(2)}=Hx^{(1)}=\begin{bmatrix} 0 & -1 & -1& -1 & -1 \end{bmatrix}^{T},代入数据后得到y:

y=1x+0.5x^{(1)}+0.5x^{(2)}=\begin{bmatrix} 1\\ 0\\ 0\\ -1\\ -1 \end{bmatrix}+0.5\begin{bmatrix} 0\\ 0\\ 0\\ -1\\ -1 \end{bmatrix}+0.5\begin{bmatrix} 0\\ -1\\ -1\\ -1\\ -1 \end{bmatrix}=\begin{bmatrix} 1\\ -0.5\\ -0.5\\ -2\\ -2 \end{bmatrix}

 这样输出y就计算出来了!

频域视角

由于L=V\Lambda V^{T},则:

H=\sum_{k=0}^{K}h_{k}L^{k}=\sum_{k=0}^{K}h_{k}(V\Lambda V^{T})^{k}

=V(\sum_{k=0}^{K}h_{k}\Lambda ^{k})V^{T}=V\begin{bmatrix} \sum_{k=0}^{K}h_{k}\lambda _{1}^{k} & & \\ & \ddots & \\ & & \sum_{k=0}^{K}h_{k}\lambda_{N} ^{k} \end{bmatrix}V^{T}

通过上式,我们可以发现,H的频率响应函数为\lambdaK次代数多项式,如果K足够大,我们可以用这种形式去逼近任意一个关于\lambda的函数。

如果用该滤波器进行滤波操作,则:

y=Hx=V(\sum_{k=0}^{K}h_{k}\Lambda ^{k})V^{T}x

我们可以将上述滤波操作分解为以下3个步骤:

(1)通过图傅里叶变换,利用V^{T}x将图信号x转换到频域空间;

(2)通过\Lambda _{h}=\sum_{k=0}^{K}h_{k}\Lambda ^{k}对频率的分量进行调节,得到\tilde{y}

(3)通过逆图傅里叶变换,即V\tilde{y}\tilde{y}反解成图信号y

假设所有的多项式系数构成向量h,则H的频率响应函数为:

\Lambda_{h}=\sum_{k=0}^{K}h_{k}\Lambda ^{k}=diag(\Psi h)

其中

\Psi=\begin{bmatrix} 1 & \lambda_{1} &\cdots &\lambda_{1}^{K} \\ 1 & \lambda_{2}& \cdots & \lambda_{2}^{K}\\ \vdots & \vdots &\ddots & \vdots \\ 1 &\lambda_{N} &\cdots & \lambda_{N}^{K} \end{bmatrix}

为范德蒙矩阵,可以由此反解得到多项式系数:

h=\Psi ^{-1}diag^{-1}(\Lambda_{h})

diag^{-1}表示将对角矩阵变成列向量。上式说明,给定频率响应矩阵,就可以通过上式求出多项式系数,这个式子对于特定性质的图滤波器的设计具有十分重要的意义!

在频域的视角下,我们可以对图滤波操作作出如下性质总结:

(1)图滤波器如何设计具有显示的公式指导;

(2)对矩阵进行特征分解是一个非常耗时的操作,具有O(N^3)的时间复杂度,相比空域视角中的矩阵向量乘法而言,有工程上的局限性。

说完上面的这些后,我们终于可以讨论图卷积神经网络啦!

图卷积神经网络

给定图G上的两组图信号x_{1}x_{2},其图卷积运算定义如下:

x_{1}*x_{2}=IGFT(GFT(x_{1})\bigodot GFT(x_{2}))

其中,\bigodot表示哈达玛积(矩阵或向量对应位置元素相乘),GFT表示图傅里叶变换操作,IGFT表示逆图傅里叶变换操作。

上式可被继续进行推导:

x_{1}*x_{2}=IGFT(GFT(x_{1})\bigodot GFT(x_{2}))

                                                      =V((V^{T}x_{1})\bigodot( V^{T}x_{2}))=V(\tilde{x}\bigodot (V^{T}x_{2}))

                                                      =V(diag(\tilde{x}_{1})(V^{T}x_{2}))

                                                      =(Vdiag(\tilde{x}_{1})V^{T})x_{2}

H_{\tilde{x}_{1}}=Vdiag(\tilde{x}_{1})V^{T},显然H_{\tilde{x}_{1}}是一个图位移算子,其频率响应矩阵为x_{1}的频谱,于是有:

x_{1}*x_{2}=H_{\tilde{x}_{1}}x_{2}

这说明图G上的两组信号的卷积运算总能转化为对应形式的滤波运算,从这个层面上看,图卷积等价于图滤波,下文提到的图卷积运算都是特指上式右边的滤波形式,至于相对应的卷积信号,一般不需要显示地表达出来。

截止目前为止,前述的所有图信号处理的有关概念,都能被推广到图Gd组信号同时操作的情形,我们可以利用矩阵表示。设矩阵X \in R^{N\times d},可以将X视为d组定义在图G上的图信号,称X图信号矩阵d为图信号的总通道数X的第jX_{:,j}表示第j个通道上的图信号。例如,对Y=HX,我们可以理解成用图滤波器H对信号矩阵X的每个通道信号分别进行滤波操作,X_{:,j}对应的输出为图信号矩阵Y在第j个通道上的图信号Y_{:,j}

借鉴卷积神经网络在计算机视觉中的成功,将上述定义的图卷积运算推广到图数据的学习中去就成了一种自然而然的想法。接下来将介绍这其中几种具有代表性的工作。

对频率响应矩阵进行参数化

既然图卷积操作等价于图滤波操作,而图滤波算子的核心在于频率响应矩阵,那么一个自然的想法是对频率响应矩阵进行参数化,这样就可以定义如下的神经网络层:

X^{'}=\sigma {(V\begin{bmatrix} \theta _{1} & & & \\ & \theta _{2} & & \\ & &\ddots & \\ & & & \theta_{N} \end{bmatrix}V^{T}X)}

                                                   =\sigma (Vdiag(\theta)V^{T}X)

                                                   =\sigma (\Theta X)

其中,\sigma( {\cdot})是非线性激活函数,\theta =\begin{bmatrix} \theta_{1} &\theta_{2} &\cdots & \theta_{N} \end{bmatrix}是需要学习的参数,\Theta是对应的需要学习的滤波器,X是输入的图信号矩阵,X^{'}是输出的图信号矩阵。这个思路可以按照图滤波操作的空域视角和频域视角来理解:

(1)从空域视角看,该层引入了一个自适应的图位移算子(\Theta),通过训练的手段指导该算子的学习,从而完成对输入图信号的针对性变换操作。

(2)从频域视角看,该层在XX^{'}之间训练了一个自适应的图滤波器,图滤波器的频率响应函数是什么样儿的,可以通过任务与数据之间的对应关系来进行监督学习。

上述思路虽然简单,但也存在一个较大的问题:引入的学习参数较多,需要学习的参数量与图中的节点数量一样,这要是在大规模的图数据中,比如上亿节点数规模的图中,极易发生过拟合问题。

另外,再在真实的图数据中,数据的有效信息通常都蕴含在低频段中,因此为图滤波器设置N个维度的自由度,且对每个频段都进行学习是没有必要的。

对多项式系数进行参数化

同样,为了拟合任意的频率响应函数,我们也可以将拉普拉斯矩阵的多项式形式转化为一种可学习的形式,具体如下:

X^{'}=\sigma (V(\sum_{k=0}^{k}\theta _{k}\Lambda ^{k})V^{T}X)=\sigma (Vdiag(\Psi \theta )V^{T}X)

其中\theta=\begin{bmatrix} \theta_{1} &\theta_{2} &\cdots & \theta_{K} \end{bmatrix}是多项式的系数向量,也是该网络层真正需要学习的参数,与上述方法不同是,这个方法的参数量K可以自由控制。K越大,可拟合的频率响应函数的次数就越高,可以对应输入图信号矩阵与输出信号矩阵之间复杂的滤波关系;K越小,可拟合的频率响应函数的次数就越低,可以对应输入图信号矩阵与输出信号矩阵之间简单的滤波关系。总的来说,K< <N,这将会大大降低过拟合的风险。

设计固定的图滤波器

前述的方法虽然大大降低了参数量,但是却对矩阵的特征分解较为依赖而给计算带来了极高的复杂度。为了解决这个问题,研究人员对上式进行了限制,设K=1,则:

X^{'}=\sigma (\theta_{0}X+\theta_{1}LX)

\theta_{0}=\theta_{1}=\theta,则:

X^{'}=\sigma (\theta(I+L)X)=\sigma (\theta\tilde{L}X)

需要注意的是,\theta只是一个标量,相当于对\tilde{L}的频率响应函数做了一个尺度变换,通常这种尺度变换在神经网络模型中会被归一化操作替代,因此,这个参数是不必要引入的,不防设\theta=1,然后就得到了一个固定的滤波器\tilde{L}

为了加强网络学习的稳定性,作者仿照正则化拉普拉斯矩阵,对上面的滤波器也做了归一化处理。令\tilde{L}_{sym}=\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2}\tilde{A}=A+I\tilde{D}_{ii}=\sum_{j}^{}\tilde{A}_{ij},我们称\tilde{L}_{sym}为重归一化形式的拉普拉斯矩阵。\tilde{L}_{sym}的特征值范围为(-1,1],可以有效防止多层网络优化时出现的梯度消失或爆炸现象。

进一步地,为了加强网络的拟合能力,作者设计了一个参数化的权重矩阵W对输入的图信号矩阵进行仿射变换,于是得到:

X^{'}=\sigma (\tilde{L}_{sym}XW)

如果没有其他的特别说明,我们将上式称为图卷积层(GCN layer),以此为主体堆叠多层的神经网络模型称为图卷积模型(GCN)。

图卷积层是对频率响应函数拟合形式上进行极大简化后的结果,最后相应的图滤波器退化成了\tilde{L}_{sym},图卷积操作变成了\tilde{L}_{sym}X。在实际工程中,\tilde{L}_{sym}可以用系数矩阵来表示,这可以进一步降低图卷积层的计算复杂度。

在实际任务中,设计固定滤波器的做法是否有效,可以从以下两个方面进行说明:

(1)\tilde{L}_{sym}本身所具有的滤波特性是比较符合真实数据的特有性质的,能够对数据实现高效的滤波操作;

(2)虽然GCN层是由对频率响应函数的线性近似推导出来的,但是与深度学习中深度网络给模型带来的强大拟合能力一样,堆叠多层GCN层,在某种程度上,可以达到高阶多项式的频率响应函数的滤波能力。这种简化单层网络的能力,通过增加深度来提升模型表达能力的做法,在卷积神经网络在计算机视觉中的强大能力一致。事实证明,这种设计所带来的优越性也在GCN后续的相关论文中得到了充分的展示,以GCN为代表的模型俨然称为各类图数据学习任务的首选。

总的来说,正是由于有了图信号处理中对图卷积操作的定义与理解,图卷积神经网络的图卷积层才能得到非常直观的设计。一般来说,对于只能从频域出发进行矩阵特征分解而执行图卷积计算的模型,我们称之为频域图卷积模型。相应地,对于图卷积计算不需要进行矩阵特征分解,能在空域视角下执行矩阵乘法计算的模型,我们称之为空域图卷积模型。读者必须要注意的是,频域视角对于图卷积模型的设计是十分重要的!

好啦,就说到这里,欢迎一起交流!不足之处,望批评指正!

参考资料:

刘忠雨,李彦霖——《深入浅出 图神经网络——GNN原理解析》,2020年4月第一版.

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python_GNN-DL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值