GCN这个模型我看了好多博客和各路大佬的讲解,主要是数学公式和推导太多了,各种拉普拉斯矩阵,拉普拉斯算子,傅里叶变换。计算机科学从理论和应用两个不同的角度来看有不同的目标,下面从应用的角度记录一下我粗浅的理解。
GCN,图卷积神经网络,用卷积的方式来进行非欧数据的预测。传统的CNN具有两个重要的特性:平移不变性和权值共享。平移不变性,也就是卷积核在原始图像上移动时,相同特征将会得到相同的结果,不会因为特征在原始图像上位置的不同而产生变化。权值共享,也就是同一个卷积核将在整个图像上进行扫描,这将会使神经网络需要训练的参数大大减少。
但是CNN的卷积核上述特性对于非欧数据,比如社交网络,化学分子这种不规则的数据来说,将会失效。因为一个结点的邻居是可以随意变化,而且邻居个数是不同的。因此GCN必须设计一种方式,能够解决这个问题。
一种最常见的思想是,考虑每个结点的性质会受到它邻接的其他结点的影响,而且影响的强度会根据邻居离该结点的距离而产生变化。
在图中,如何刻画一个结点的邻居呢? 显然可以通过邻接矩阵A来来描述某个顶点的邻居。在这里给出一个新的概念叫做图信号:给定图G=(V,E),V表示图中的结点集合,假设其长度为N,图信号是描述V->R的映射,表示成向量形式为,其中xi表示的是结点vi上的信号强度。
这样就能给出最基础的图卷积层的实现方式:
将下公式的L改成A既是这里的公式
这里A是邻接矩阵,Wl是第L个图卷积层的参数权重矩阵,σ是激活函数,Hl是第L层的输出。当L=0时,H0应该是X∈(N,D),其中N为结点的个数,D代表的是每个结点的维度。
这个形式的定义很明显没有考虑结点自身对自己的影响,所以引入度矩阵D,构造拉普拉斯矩阵:L=D-A,这样就考虑了自身结点的影响。所以实现方式可以优化为:
此时L没有经过正则化,也就是说邻居多的结点得到的结果将会更大,但是由于标准不一样,不一定是真正地更大。因此考虑使用重归一正则化拉普拉斯矩阵:
优化后的结果为:
对于该神经网络而言,我们需要训练的参数为权重矩阵W和对角矩阵。
即在一般的情况下,图卷积层的形式一般为:
Lsym使用稀疏矩阵来表示,pytorch构造图卷积层,代码如下:
以上为图卷积层的一个标准形式,下面考虑具体的公式推导。
拉普拉斯矩阵来自于拉普拉斯算子,设f(x,y)为R^n空间中的一个实函数,则拉普拉斯算子的定义为:
将n维空间变成二维空间同时离散化,则拉普拉斯算子为
看上去很复杂,实际上不难。它表示的意思就是说,在二维空间中某个点的值可以近似为它上下左右四个点值的平均值。这样,我们可以顺利的将这个定义推广到图上,由此定义拉普拉斯矩阵L=D-A。设G=(V,E)为简单无向图,f是对V的函数,根据拉普拉斯算子可得:,
其中。
到这里,我们在考虑图信号X与拉普拉斯矩阵L的关系,显然有:
这里的变换从矩阵乘法的列向量的角度来考虑就很好理解。注意X∈(N,D),这里实际上是将X考虑成D个列向量(D是维度,当D=1时,就是一个图信号,不是度矩阵),自己好好理解一下,很容易想通。由此可知,拉普拉斯矩阵是一个反映图信号局部平滑度的算子。更进一步来说,拉普拉斯矩阵可以让我们定义一个非常重要的二次型:
线性代数的具体理论,没啥好难的。令TV(x)等于上式,称TV(X)为图信号的总变差,是一个标量。
拉普拉斯矩阵的定义实际上是为了解决图傅里叶变换而做准备。对于无向图,拉普拉斯矩阵L LL是对称的,所以保证有 N 个特征向量,对 L 特征分解得:
再写明白点就是:
其中 U UU为单位正交阵,即:
即为拉普拉斯矩阵的 N 个单位特征(列)向量。
图傅里叶变换就是将原信号在正交基上展开:
其中
就是原始图信号x xx的图傅里叶变换,傅里叶系数对应各正交分量上的系数,即原信号在各个基向量上投影。这里看上去很复杂,实际上也不难,其实就相当于一个向量正交分解,通过图傅里叶变换,任何一个图信号都可以被转化为由一组正交基表示,而这组正交基正好是拉普拉斯矩阵对角化之后的特征矩阵的列向量构造。
有了图傅里叶变换的定义之后,我们可以对总变差进行改写:
图信号的总变差与图的特征值之间有着非常直接的线性对应关系,总变差是图的所有特征值的一个线性组合,权重是图信号相对应的傅里叶系数的平方。
那么,我们需要思考以下问题:在一个给定的图上,什么样的图信号具有最小的总变差?
由上式可知当图信号与最小的特征值λ1所对应的特征向量v1完全重合时,有最小总变差。宏观上看有:特征值越低,频率越低,对应的傅里叶基就变化得越缓慢,相近节点上的信号值趋于一致;特征值越高,频率越高,对应的傅里叶基就变化得越剧烈,相近节点上的信号值则非常不一致。
以上理论实际上从数学的角度对图信号和图的结构进行了一系列的定义和解释,但还不是图卷积层的最后结论。为了定义图卷积层,我们还需要一些定义概念。
图滤波器:在图信号处理中,我们将图滤波器定义为对给定图信号的频谱中各个频率分量的强度进行增强或衰减的操作。假设图滤波器为H∈RN×N,则H:RN→RN,令输出图信号为y,则:
上式是傅里叶变换的内容,前一部分看懂了,这里就不难理解。对上式进行变换:
于是得到:
相较于拉普拉斯矩阵,滤波器H仅仅改动了对角矩阵上的值。
而在图中,图卷积操作等价于图滤波操作,而图滤波器的形式又和拉普拉斯矩阵的形式相同。由此就有了:
其中σ(·)是激活函数,θ=[θ1,θ2,…,θN]是需要学习的参数,Θ是对应的需要学习的图滤波器,X是输入的图信号矩阵,X'是输出的图信号矩阵。
考虑拉普拉斯矩阵的多项式形式:
设置一个固定滤波器,并仿照拉普拉斯矩阵对其进行归一化,则有:
其中:
注意这里是图滤波器,而不是拉普拉斯矩阵,只不过他们具有相同的形式。
为了加强网络的拟合能力,设计一个参数化的权重矩阵W对输入的图信号矩阵进行仿射变换,于是得到:
即在第一节中得到的结论,这个公式也就是图卷积层的公式。
以上内容参考图书《深入浅出图神经网络》
学了一天,我现在只有一个想法, 数学公式都是纸老虎......