文章目录
一、CNN卷积
离散卷积:离散卷积本质就是一种加权求和。就是传统的CNN。
CNN 中的卷积本质上就是利用一个共享参数的过滤器(kernel),通过计算中心像素点以及相邻像素点的加权和来构成 feature map 实现空间特征的提取(如下图)。加权系数就是卷积核的权重系数。
卷积核的系数是随机化初值,然后根据误差函数通过反向传播梯度下降进行迭代优化。卷积核的参数通过优化求出才能实现特征提取的作用。GCN的理论很大一部分工作就是为了引入可以优化的卷积参数。
卷积:指深度学习(CNN)中的卷积,与数学中定义的卷积运算严格意义上是有区别的(见scipy中的频谱卷积conv2函数)。
二、GCN 图卷积神经网络
在Computer Vision里我们用CNN可以很有效地提取空间特征。但是有一点需要注意:CNN处理的图像或者视频数据中像素点(pixel)是排列成成很整齐的矩阵(如下图所示,也就是很多论文中所提到的Euclidean Structure)。
关于GNN 详情请点击。
与之相对应,科学研究中还有很多Non Euclidean Structure的数据,如上图右所示。社交网络、信息网络中有很多类似的结构。实际上,这样的网络结构(Non Euclidean Structure)就是图论中抽象意义上的拓扑图。
所以,Graph Convolutional Network中的Graph是指数学(图论)中的用顶点和边建立相应关系的拓扑图。
2.1 GCN优点
- CNN无法处理Non Euclidean Structure的数据,学术上的表达是传统的离散卷积在Non Euclidean Structure的数据上无法保持平移不变性。通俗理解就是在拓扑图中每个顶点的相邻顶点数目都可能不同,那么当然无法用一个同样尺寸的卷积核来进行卷积运算。
- 由于CNN无法处理Non Euclidean Structure的数据,又希望在这样的数据结构(拓扑图)上有效地提取空间特征来进行机器学习,所以GCN成为了研究的重点。
- 广义上来讲任何数据在赋范空间内都可以建立拓扑关联,谱聚类就是应用了这样的思想(谱聚类(spectral clustering)原理总结)。所以说拓扑连接是一种广义的数据结构,GCN有很大的应用空间。
2.3 提取拓扑图空间特征的两种方式
GCN的本质目的就是用来提取拓扑图的空间特征,在vertex domain(空域 spatial domain)和spectral domain(谱域)实现目标是两种最主流的方式。
(1). 基于空间域(spatial domain)
vertex domain(spatial domain)是非常直观的一种方式。顾名思义:提取拓扑图上的空间特征,那么就把每个顶点相邻的neighbors找出来。
Learning Convolutional Neural Networks for Graphs ——ICML 2016 中为了能够对任意结构的图进行卷积操作,这篇文章提出了PATCHY-SAN (Select-Assemble-Normalize)的方法,
通过三个步骤构建卷积分片:
1.从图中选择一个固定长度的节点序列;
2.对序列中的每个节点,收集固定大小的邻域集合;
3.对由当前节点及其对应的邻域构成的子图进行规范化,作为卷积结构的输入。
通过上述三个步骤构建出所有的卷积片之后,利用卷积结构分别对每个分片进行操作。具体示意图如下图所示。
总体上讲,就是用w个固定size=k的子图来表示输入的graph,再将这w个子图正则化后,生成一个w*k维的向量,作为传统的CNN的输入,进行学习。其实就是做了一个从graph到向量的映射的一个预处理过程。
具体构建卷积分片的步骤:
- 节点序列选择:为对图中所有的节点进行标号排序,将图中的节点集合根据向心性(节点的度、中心度等)映射为有序的节点序列。从该序列中根据一定的间隔s隔段选取w个节点构成最终的节点序列。
- 邻域节点收集:对于上一步获得的节点序列中的每一个节点,利用广度优化搜索扩展邻域节点,和源节点一起构成一个k大小的邻域集合。
- 子图规范化:对邻域集合中的各节点标号排序,得到接受域。那么,对于节点的属性,k个节点属性值构成了一个输入通道,对于边的属性,个属性值也构成了一个输入通道。我们可以分别用一维的卷积层来处理这两种输入通道(对于节点属性卷积层长度为k,对于边属性卷积层长度为)。
a.按照什么条件去找中心vertex的neighbors,也就是如何确定receptive field?
b.确定receptive field,按照什么方式处理包含不同数目neighbors的特征?
根据a,b两个问题设计算法,就可以实现目标了。 详情请查看论文 vertex domain提取空间特征示意图如上。
这种方法主要的缺点如下:
c.每个顶点提取出来的neighbors不同,使得计算处理必须针对每个顶点
d.提取特征的效果可能没有卷积好。
(2) 基于频谱域(spectral domain)
spectral domain就是GCN的理论基础了。这种思路就是希望借助图谱的理论来实现拓扑图上的卷积操作。从整个研究的时间进程来看:首先研究GSP(graph signal processing)的学者定义了graph上的Fourier Transformation,进而定义了graph上的convolution,最后与深度学习结合提出了Graph Convolutional Network。
Spectral graph theory(谱图论)
Spectral graph theory:简单的概括就是借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质
利用Spectral graph theory:待续
三、拉普拉斯矩阵
Graph Fourier Transformation及Graph Convolution的定义都用到图的拉普拉斯矩阵,那么首先来介绍一下拉普拉斯矩阵。
对于图 ,其Laplacian 矩阵的定义为 ,其中 是Laplacian 矩阵, 是顶点的度矩阵(对角矩阵),对角线上元素依次为各个顶点的度, 是图的邻接矩阵。看图5的示例,就能很快知道Laplacian 矩阵的计算方法。
定义 的Laplacian 矩阵更专业的名称叫 Combinatorial Laplacian
定义的叫 Symmetric normalized Laplacian,很多GCN的论文中应用的是这种拉普拉斯矩阵 定义的叫 Random walk normalized Laplacian,有读者的留言说看到了Graph Convolution与Diffusion相似之处,当然从Random walk normalized Laplacian就能看出了两者确有相似之处(其实两者只差一个相似矩阵的变换,可以参考Diffusion-Convolutional Neural Networks)
Diffusion Graph Convolution与Spectral Graph Convolution相似性证明
维基百科对Laplacian matrix的定义: https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Laplacian_matrix
(1) 拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解),这就和GCN的spectral domain对应上了。
(2) 拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0。
(3) 通过拉普拉斯算子与拉普拉斯矩阵进行类比(详见第6节)。
当然严格意义上,拉普拉斯矩阵应用于GCN有严谨的数学推导与证明。
3.1 拉普拉斯矩阵的谱分解(特征分解)
GCN的核心基于拉普拉斯矩阵的谱分解:
矩阵的谱分解,特征分解,对角化都是同一个概念(特征分解_百度百科)。
不是所有的矩阵都可以特征分解,其充要条件为n阶方阵存在n个线性无关的特征向量。
但是拉普拉斯矩阵是半正定对称矩阵(半正定矩阵本身就是对称矩阵,半正定矩阵,此处这样写为了和下面的性质对应,避免混淆),
有如下三个性质:
- 对称矩阵一定n个线性无关的特征向量
- 半正定矩阵的特征值一定非负
- 对阵矩阵的特征向量相互正交,即所有特征向量构成的矩阵为正交矩阵。
由上可以知道拉普拉斯矩阵一定可以谱分解,且分解后有特殊的形式。
对于拉普拉斯矩阵其谱分解为:
其中 ,是列向量为单位特征向量的矩阵,也就说 是列向量。
而 是
由于 是正交矩阵,即 ,所以特征分解又可以写成:
3.2 傅里叶变换、卷积类比到Graph上的傅里叶变换及卷积
把传统的傅里叶变换以及卷积迁移到Graph上来,核心工作其实就是把拉普拉斯算子的特征函数
3.2.1 推广傅里叶变换
- 传统的傅里叶变换定义为:
信号 与基函数 的积分,那么为什么要找 作为基函数呢?从数学上看, 是拉普拉斯算子的特征函数(满足特征方程),
广义的特征方程定义为:
其中 是一种变换, 是特征向量或者特征函数(无穷维的向量), 是特征值。 满足:
当然 就是变换 的特征函数,
那么,处理Graph问题的时候,用到拉普拉斯矩阵(拉普拉斯矩阵就是离散拉普拉斯算子),自然就去找拉普拉斯矩阵的特征向量了。 - Graph上的傅里叶变换
是拉普拉斯矩阵, 是其特征向量,自然满足式:
离散积分就是一种内积形式,仿上定义Graph上的傅里叶变换:
是Graph上的 维向量,与Graph的顶点一一对应, 表示第 个特征向量的第 个分量。那么特征值(频率) 下的, 的Graph 傅里叶变换就是与 对应的特征向量 进行内积运算。
注:上述的内积运算是在复数空间中定义的,所以采用了,也就是特征向量 - 利用矩阵乘法将Graph上的傅里叶变换推广到矩阵形式:
即 在Graph上傅里叶变换的矩阵形式为:
式中: - Graph上的傅里叶逆变换
类似地,传统的傅里叶变换是对频率 求积分:
迁移到Graph上变为对特征值 求和:
利用矩阵乘法将Graph上的傅里叶逆变换推广到矩阵形式:
即 在Graph上傅里叶逆变换的矩阵形式为:
式中:
3.2.2 推广卷积
在上面的基础上,利用卷积定理类比来将卷积运算,推广到Graph上。
卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数 与 两者的卷积是其函数傅立叶变换乘积的逆变换:
类比到Graph上并把傅里叶变换的定义带入,与卷积核 在Graph上的卷积可按下列步骤求出:
的傅里叶变换为
卷积核 的傅里叶变换写成对角矩阵的形式即为:
是根据需要设计的卷积核 在Graph上的傅里叶变换。
两者的傅立叶变换乘积即为:
再乘以 求两者傅立叶变换乘积的逆变换,则求出卷积:
式中: 及
注:很多论文中的Graph卷积公式为:
表示hadamard product(哈德曼点积),对于两个向量,就是进行内积运算;对于维度相同的两个矩阵,就是对应元素的乘积运算。
其实式(2)与式(1)是完全相同的。
因为 与 都是
而根据矩阵乘法的运算规则:对角矩阵 与 的乘积 和 与 进行对应元素的乘积运算是完全相同的。
这里主要推(1)式是为了和后面的deep learning相结合。
3.3 关于拉普拉斯矩阵的特征向量可以作为傅里叶变换的基,特征值表示频率
(1)为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?
傅里叶变换一个本质理解就是:把任意一个函数表示成了若干个正交函数(由sin,cos 构成)的线性组合。
通过第六节中(b)式也能看出,graph傅里叶变换也把graph上定义的任意向量 ,表示成了拉普拉斯矩阵特征向量的线性组合,即:
那么:为什么graph上任意的向量 都可以表示成这样的线性组合?
原因在于 是graph上 维空间中的 个线性无关的正交向量(拉普拉斯矩阵的性质),由线性代数的知识可以知道: 维空间中 个线性无关的向量可以构成空间的一组基,而且拉普拉斯矩阵的特征向量还是一组正交基。
(2)怎么理解拉普拉斯矩阵的特征值表示频率?
在graph空间上无法可视化展示“频率”这个概念,那么从特征方程上来抽象理解。
将拉普拉斯矩阵 的 个非负实特征值,从小到大排列为 ,而且最小的特征值 ,因为 维的全1向量对应的特征值为0(由 的定义就可以得出):
从特征方程的数学理解来看:
在由Graph确定的 维空间中,越小的特征值 表明:拉普拉斯矩阵 其所对应的基
其实图像压缩就是这个原理,把像素矩阵特征分解后,把小的特征值(低频部分)全部变成0,PCA降维也是同样的,把协方差矩阵特征分解后,按从大到小取出前K个特征值对应的特征向量作为新的“坐标轴”。
四、Graph Convolution Network
Deep Learning中的Graph Convolution
Deep learning 中的Graph Convolution直接看上去会和第6节推导出的图卷积公式有很大的不同,但是万变不离其宗,(1)式是推导的本源。
Deep learning 中的Convolution就是要设计含有trainable共享参数的kernel,从(1)式看很直观:graph convolution中的卷积参数就是 。
第一代的GCN(Spectral Networks and Locally Connected Networks on Graphs),简单粗暴地把 变成了卷积核 , 也就是:
式(3)就是标准的第一代GCN中的layer了,其中 是激活函数, 就跟三层神经网络中的weight一样是任意的参数,通过初始化赋值然后利用误差反向传播进行调整, 。
(1)每一次前向传播,都要计算 及 三者的乘积,特别是对于大规模的graph,计算的代价较高,也就是论文中
(2)卷积核的spatial localization不好,这是相对第二代卷积核而言的,这里不多解释
(3)卷积核需要
第二代的GCN(Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering),把 巧妙地设计成了 ,也就是:
下面利用矩阵乘法进行变换:
进而可以导出:
上式成立是因为
(4)式就变成了:
其中 是任意的参数,通过初始化赋值然后利用误差反向传播进行调整。
(1)卷积核只有K个参数,一般 K远小于n
进行变换,计算复杂度变成了
更直观地看, K=1就是对每个顶点上一阶neighbor的feature进行加权求和,(同理,K=2)如下图所示:
注:上图只是以一个顶点作为实例,GCN每一次卷积对所有的顶点都完成了图示的操作。
附:拉普拉斯基以及一些物理学原理
使用OpenCV处理过图片的人会了解到,有时处理图片时会将空域转成频域,这样可以避免卷积带来的高运算和耗时,使用傅里叶变换来处理频域数据用来加快运算。
频谱:我们只需要知道它是将信号/音频/图像/图分解成简单元素(微波、图)的组合就够了。为了在分解过后得到一些好的性质,这些简单元素通常是正交的,就是与相互线性无关,因此就形成了一个基。
当我们讨论信号或者图像处理中的“频谱”时,指的是傅里叶变换,它为我们提供了不同频率的正弦波和余弦波的特定基 (DFT矩阵,例如Python中的scip.linalg.dft),这样我们就可以将信号或是图像表示为这些波的总和。但是当我们讨论图和神经网络图(GNN)时,“频谱”意味着拉普拉斯图L的特征分解,你可以认为拉普拉斯图L是一种特殊的相邻矩阵A,而特征分解就是为了找到构成我们的图基本正交分量的一种方法。
拉普拉斯图直观地显示了当我们在节点I中放置一些“潜在元素”时,“能量”在图上的传播方向和扩散程度。在数学和物理学中,拉普拉斯基的一个典型应用是解决信号(波)如何在动态系统中传播。如果相邻的值没有突然的变化,那扩散就是很平滑的,如下面的动图所示。
鸣谢:https://www.zhihu.com/question/54504471/answer/332657604