GCN原理篇(代码待修改,数学公式待整理)

新人想初步了解可以下载这个PPT(百度网盘):
链接:https://pan.baidu.com/s/1Ta4MYOMGkIEVoWEOJB2G0A
提取码:j8nu

一.基础知识重申:
1.邻接矩阵:
邻接矩阵表示顶点间关系,是n阶方阵(n为顶点数量)。
邻接矩阵分为有向图邻接矩阵和无向图邻接矩阵。无向图邻接矩阵是对称矩阵,而有向图的邻接矩阵不一定对称。


  注意,对于有向图,vivj是有方向的,即vi -> vj 。

2.特征矩阵:
设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是矩阵A的一个特征值(characteristic value)或本征值(eigenvalue)。
3.度矩阵:
度矩阵是对角阵,对角上的元素为各个顶点的度。顶点vi的度表示和该顶点相关联的边的数量。
无向图中顶点vi的度d(vi)=N(i)。
有向图中,顶点vi的度分为顶点vi的出度和入度,即从顶点vi出去的有向边的数量和进入顶点vi的有向边的数量。


4.拉普拉斯算子:
拉普拉斯算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度(▽f)的散度(▽·f)。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义为:

作为一个二阶微分算子,拉普拉斯算子把C函数映射到C函数,对于k≥2时成立。算子Δ :C(R) →C(R),或更一般地,定义了一个算子Δ :C(Ω) →C(Ω),对于任何开集Ω时成立。

函数的拉普拉斯算子也是该函数的黑塞矩阵的迹

另外,满足▽·▽f=0 的函数f, 称为调和函数。
拉普拉斯算子作用在向量函数上,其结果被定义为一个向量,这个向量的各个分量分别为向量值函数各个分量的拉普拉斯。

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

5.拉普拉斯矩阵:

给定一个有n个顶点的图G,它的拉普拉斯矩阵

定义为:L=D-A

其中D为图的度矩阵,A为图的邻接矩阵。度矩阵在有向图中,只需要考虑出度或者入度中的一个。经过计算可以得:
1、若i =j,则

为顶点vi的度。

2、若i≠ j,但顶点vi和顶点vj相邻,则

3、其它情况

也可以将这三种值通过除以

进行标准化。

举例子说明拉普拉斯矩阵:

关于使用拉普拉斯矩阵还是有极大重要的作用,在这里我就多介绍一下
使用拉普拉斯矩阵的原因:
(1)拉普拉斯矩阵是对称矩阵,可以进行特征分解
(2)由于卷积在傅里叶域的计算相对简单,为了在graph上做傅里叶变换,需要找到graph的连续的正交基对应于傅里叶变换的基,因此要使用拉普拉斯矩阵的特征向量。

拉普拉斯矩阵常见形式
(1)普通形式


(2)对称归一化的拉普拉斯矩阵

(3)随机游走归一化拉普拉斯矩阵

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

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

但是拉普拉斯矩阵是半正定矩阵(半正定矩阵本身就是对称矩阵),有如下三个性质:
(1)对称矩阵一定n个线性无关的特征向量
(2)半正定矩阵的特征值一定非负
(3)对阵矩阵的不同特征值对应的特征向量相互正交,这些正交的特征向量构成的矩阵为正交矩阵。
由上拉普拉斯矩阵对称知一定可以谱分解,且分解后有特殊的形式。
可知拉普拉斯矩阵的谱分解为:

注意,特征分解最右边的是特征矩阵的逆,只是拉普拉斯矩阵是对称矩阵才可以写成特征矩阵的转置。

傅里叶转换在这里我不详细解释了,高等数学上的基础知识我暂且不搬上去班门弄斧了
简要说一下接下来要用的部分内容:

任意周期函数可以以 e^(iwt)为基函数用傅里叶级数的指数形式表示。即,对于一个周期函数 f (x)以傅里叶级数的指数形式表示为:

对于非周期函数,并不能用傅里叶级数的形式表示。但是还是用某个周期函数
f T(x)当 T→∞来逼近,积分表示形式为

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

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

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

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

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

图上的傅里叶变换

在处理Graph时,用到的是傅里叶变换的离散形式。由于拉普拉斯矩阵进行谱分解以后,可以得到n个线性无关的特征向量,构成空间中的一组正交基,因此归一化拉普拉斯矩阵算子的特征向量构成了图傅里叶变换的基。图傅里叶变换将输入图的信号投影到了正交空间,相当于把图上定义的任意向量,表示成了拉普拉斯矩阵特征向量的线性组合。

离散积分就是一种内积形式,由此可以定义Graph上的傅里叶变换(实数域):
补充:
在数学里面,内积空间就是增添了一个额外的结构的向量空间。这个额外的结构叫做内积,或标量积,或点积。

图的傅立叶变换的矩阵形式:
利用矩阵乘法将Graph上的傅里叶变换推广到矩阵形式:
可得如图形式:

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

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

传统的傅里叶变换是对频率 ω 求积分:

迁移到Graph上变为对特征值 λ i求和:

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

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

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

卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数f与g两者的卷积是其函数傅立叶变换乘积的逆变换

故而,对图上f和卷积核g的卷积可以表示为:

故而,Graph卷积公式也可以写为:

⊙ 表示(哈达马积),对于两个向量,就是进行内积运算;对于维度相同的两个矩阵,就是对应元素的乘积运算。

在这个公式上做个小标记,后面介绍的图上频域卷积的工作,都是在 g θ 的基础上做文章。

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

通过即 f 在Graph上傅里叶逆变换的矩阵形式,能看出,graph傅里叶变换把graph上定义的任意向量f,表示成了拉普拉斯矩阵特征向量的线性组合,即:

graph上任意的向量f都可以表示成这样的线性组合是由于 ( u 1 ⃗ , u 2 ⃗ , ⋯   , u n ⃗ )是graph上 n维空间中的 n 个线性无关的正交向量(拉普拉斯矩阵是对称矩阵,必定可以进行特征分解,有n个线性无关的特征向量),由线性代数的知识可以知道:n 维空间中n 个线性无关的向量可以构成空间的一组基,而且拉普拉斯矩阵的特征向量还是一组正交基。

拉普拉斯矩阵的特征值表示频率

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

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

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

在由Graph确定的 n 维空间中,越小的特征值 λ l表明:拉普拉斯矩阵 L 其所对应的基 u l上的分量、“信息”越少,那么就可以忽略的低频部分了。
其实图像压缩就是这个原理,把像素矩阵特征分解后,把小的特征值(低频部分)全部变成0,PCA降维也是同样的,把协方差矩阵特征分解后,按从大到小取出前K个特征值对应的特征向量作为新的“坐标轴”。

Defferrard等人提出ChebNet,定义特征向量对角矩阵的切比雪夫多项式为滤波器,也就是:

切比雪夫多项式:对每个非负整数n, Tn(x) 和 Un(x) 都为 n次多项式。 并且当n为偶(奇)数时,它们是关于x 的偶(奇)函数, 在写成关于x的多项式时只有偶(奇)次项。n>=1时,Tn的最高次项系数为2^(n-1) ,n=0时系数为1。

本质上就是利用Chebyshev多项式拟合卷积核的方法,来降低计算复杂度。

推导过程如下:

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

CayleyNet进一步应用了参数有理复合函数的Cayley多项式来捕获窄的频带。CayleyNet的谱图卷积定义为:

举例理解上述矩阵中部分概念,通过转换例子加深理解:

(1)图

(2)度矩阵

(3)邻接矩阵

(4)拉普拉斯矩阵

二.简要推导时涉及的(部分内容及前提):
1.图
G=(V, E) 表示图结构 (有向图或无向图),V 表示节点的集合,E 表示边的集
合,n 表示节点的个数,m 表示边的个数。

用 N(v) 表示节点 v 所有邻居的集合:

图结构也可以用邻接矩阵进行表示,邻接矩阵 A 为 n×n 矩阵,
其中 n 为图中节点数,Aij=1 表示节点 i 和节点 j 之间有边相连。
图的度矩阵 D,D 是对角矩阵,即除了对角线其他元素都为 0,对角
值如下计算,Dii 表示与节点 i 相连的节点数:

图中的节点 v 带有特征向量,用矩阵 X 保存图节点的特征向量,特征向量维度是 d:

三.GCN介绍:
1.使用功能介绍:
GCN 主要是将卷积操作应用到图结构上,如下图所示,
GCN 输入的 chanel 为 C (即节点 Xi 特征向量的维度),GCN 输出的 chanel 为 F,即每个节点 (Zi) 的特征向量维度为 F,最后用节点的特征对节点进行分类预测等(总之就是):

对于图 (graph) 结构,也可以采取类似的方法进行卷积。例如对下图中红色的节点卷积就等于取其邻居节点进行加权平均。

2.图卷积的计算公式:
GCN 中给出了图卷积的计算公式,如下所示,其中 H(l) 表示节点在第 l 层的特征向量,H(l+1) 表示经过卷积后节点在第 l+1 层的特征向量,W(l) 表示第 l 层卷积的参数,σ 表示激活函数。而由矩阵 A、D 组成的部分是一种拉普拉斯矩阵 ,A+I 中的 I 为单位矩阵,即对角线为 1,其他为 0 的矩阵:

3.理解图卷积公式:
对图像 (image) 中某一个像素进行卷积实际上是对该像素及相邻像素进行加权求和,那么在图 (graph) 结构中对某一个节点卷积就应该是对该节点和其邻节点进行加权求和。
从最简单的图卷积操作开始介绍,如图所示:

上面的公式中 W 为卷积变换的参数,可以训练优化。A 矩阵为邻接矩阵,Aij不为 0 则表示节点 i,j 为邻居。H 为所有节点的特征向量矩阵,每一行是一个节点的特征向量,H(0) 就是 X 矩阵。
A 和 H 的乘积其实就是把所有的邻居节点向量进行相加

介绍邻接矩阵和特征向量矩阵的乘积
举例:

上式的邻接矩阵中,节点 1 和节点 2、3 为邻居,则 A 乘上 H 后节点 1 的特征向量就用节点 2、3 特征向量加和得到,即 [2,2,2,2,2]+[3,3,3,3,3]=[5,5,5,5,5]。得到 AH 之后再和 W 相乘,最后经过激活函数 σ 就得到下一层节点的特征向量了。

总结分析:
上式中两个缺点:
(1)忽略了节点本身的信息
(2)矩阵 A 没有归一化,AH 会把节点所有邻居的向量都相加,这样经过多层卷积后向量的值会很大。
解决方法:
第一个问题:
矩阵对A中1角线全部为1,使其指向自身,如图为新公式:

归一化要用到图的度矩阵 D,可以直接使用矩阵 D 的逆和 A 相乘,
如下图所示:

上面的归一化公式得到的 A 不是对称矩阵,通常使用对称归一化的方法:

解决完全部问题的最终新公式便是GCN公式:

四.GCN预测(相关公式)
GCN 可以用最后一层卷积层得到的节点特征向量进行预测,假设 GCN 只有两层,则预测的公式如下:

分类的损失函数如下:

五.注意事项:
1.没有节点的特征也可以用GCN
2.GCN一般2到3层效果就已经不错了

六:GCN运行机制补充:
图卷积网络是一个在图上进行操作的神经网络。给定一个图 G=(E,V) ,一个 GCN 的输入
包括:
1.一个输入特征矩阵 X,其维度是 N×F 0 ,其中 N 是节点的数目, F 0 是每个节点输
入特征的数目
2.一个 N×N 的对于图结构的表示的矩阵,例如 G 的邻接矩阵 A

GCN 的一个隐藏层可以写成 H i =f(H i-1 ,A) ,其中 H 0 =X 并且 f 是一个 propagation。每
层 H i 对应一个 N×F i 的特征矩阵,矩阵的每行是一个节点的特征表示。在每层,这些特征
通过 propagation rule f 聚合起来形成下一层的特征。通过这种方式,特征变得越来越抽
象在每一层。在这个框架中,GCN 的各种变体仅仅是在 propagation rule f 的选择上有
不同。

()介绍简单的propagation rule
一个可能最简单的传播规则是:
f(H i ,A)=σ(AH i W i )
其中 W i 是第 i 层的权重并且 σ 是一个非线性激活函数例如 ReLU 函数。权重矩阵的维度是
F i ×F i+1 ;也就是说权重矩阵的第二个维度决定了在下一层的特征的数目。这个操作类似于 filtering operation 因为这些权重被图上节点共享。
可以简单表示为:

条件:
1.i=1, s.t. f 是一个输入特征矩阵的函数
2.Σ 是恒等函数(Identity function),并且选择权重矩阵满足 AH 0 W 0 =AXW 0 =AX
即 f(X,A)=AX ,AX 现在等于一个多层感知机的输入层,接下来将对该简单公式进行补充

直接通过例题开始:
七.代码例题:
(1)题目:
Zachary's Karate Club
Zachary 空手道俱乐部是一个被广泛使用的社交网络,其中的节点代表空手道俱乐部的成员,边代表成员之间的相互关系。当年,Zachary 在研究空手道俱乐部的时候,管理员和教员发生了冲突,导致俱乐部一分为二。下图显示了该网络的图表征,其中的节点标注是根据节点属于俱乐部的哪个部分而得到的,「A」和「I」分别表示属于管理员和教员阵营的节点。

image.png

(2)解题构思:


image.png

(1) 简单的随机初始化,根据特征进行初始化

from networkx import to_numpy_matrix
zkc = karate_club_graph()
order = sorted(list(zkc.nodes()))
A = to_numpy_matrix(zkc, nodelist=order)
I = np.eye(zkc.number_of_nodes())
A_hat = A + I
D_hat = np.array(np.sum(A_hat, axis=0))[0]
D_hat = np.matrix(np.diag(D_hat))

(2)随机化权重

W_1 = np.random.normal(
        loc=0, scale=1, size=(zkc.number_of_nodes(), 4))
W_2 = np.random.normal(
        loc=0, size=(W_1.shape[1], 2))

(3)叠层GCN
(使用单位矩阵作为特征表征,即每个节点被表示为一个 one-hot 编码的类别变量)

def gcn_layer(A_hat, D_hat, X, W):
      return relu(D_hat**-1 * A_hat * X * W)
H_1 = gcn_layer(A_hat, D_hat, I, W_1)
H_2 = gcn_layer(A_hat, D_hat, H_1, W_2)
output = H_2

(4)进一步提取表征特征

feature_representations = {
      node: np.array(output)[node]
      for node in zkc.nodes()}

可以看出,还没开始训练模型,便已经分开了


示例中由于 ReLU 函数的作用,在 x 轴或 y 轴上随机初始化的权重很可能为 0,因此需要反复进行几次随机初始化才能生成上面的图。

补充关于GCN和有向图:
对无向图而言,邻接矩阵一定是对称的,而且主对角线一定为零(在此仅讨论无向简单图),副对角线不一定为0,有向图则不一定如此。
举例:
无向图的邻接矩阵一定是对称的.
因为如果一个点i到j有边,则aij=aji=1;所以都是对称的.
但是有向图就不一定了,点i 到 j 有边,aij=1,但j到i不一定有边,则aji不一定等于1、
GCN分为spectral domain 和 spatial domain两大块。
spatial domain完全可以处理有向图
spectral domain确实是建立在无向图的假设的下的,理论上对有向图无能为力。
也有一些大佬在改进,但是理论根基放在那,能做只有从有向图中构造出对称的权值矩阵。比如16年的这篇论文给出了一种使用模体(一些非常小的局部图范式,可以根据应用自定义)从有向图构造对称拉普拉斯矩阵的方法
https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1612.08447.pdf

17年就是使用模体的方法将spectral domain GCN扩展到有向图上
https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1802.01572

1.参考:https//blog.csdn.net/luzaijiaoxia0618/article/details/104718146/
2.参考https://www.zhihu.com/question/54504471/answer/332657604
3.参考百度百科
4.参考https://zhuanlan.zhihu.com/p/85287578
5.参考https://blog.csdn.net/yyl424525/article/details/100058264
6.参考:https://blog.csdn.net/qq_36793545/article/details/84844867
7.参考:https://www.zhihu.com/question/313214425

你可能感兴趣的:(GCN原理篇(代码待修改,数学公式待整理))