读《如何理解 Graph Convolutional Network(GCN)?》

接触的第一篇GCN的内容,整理一些笔记。

原文链接: https://www.zhihu.com/question/54504471/answer/332657604

一、区别CNN

CNN仅针对Euclidean Structure,要求图像或者视频的像素点都排列成整齐的矩阵。

GCN可以扩充到Non Euclidean Structure(NES)中,社交、信息中的网络结构、拓扑结构。

二、Why GCN?

1、CNN在NES中无法保持平移不变性。拓扑结构中,节点并非整齐矩阵,邻居数可能不同。

2、NES结构中有效提取空间特征进行机器学习。

3、任何数据在赋范空间内都可建立拓扑关联,拓扑连接是一种广义数据结构。

三、提取空间特征两种方式

spatial domain空间域,spectral domain 光谱域。

1、spatial domain:把顶点的邻居都找出来。

两个问题:按什么条件找中心点的邻居;找到了不同数目的邻居后,怎么表示这些邻居的特征。

解决办法:参考Learning Convolutional Neural Networks for Graphs

存在缺陷:每个顶点的情况不一样,计算必须针对每一个顶点;提取特征效果没有卷积好。

2、spectral domain:借助图谱理论实现拓扑图的卷积操作。

研究进程:GSP(Graph signal processing)→Graph Fourier Transformation→ Graph Convolution→GCN

Spectral Graph Theory:借助于拉普拉斯矩阵的特征值和特征向量研究图的性质

四、What is 拉普拉斯矩阵?why 拉普拉斯矩阵?

Graph Fourier Transformation和Graph Convolution的定义都用到了拉普拉斯矩阵。以前好像学过,,,忘了……

1、拉普拉斯矩阵

图G=(V,E),拉普拉斯矩阵定义为L=D-A,D是顶点的度矩阵(对角阵),对角线上元素依次为各个顶点的度, A是图的邻接矩阵。

读《如何理解 Graph Convolutional Network(GCN)?》_第1张图片

2、三种拉普拉斯矩阵

Combinatorial Laplacian:L=D-A

Symmetric normalized Laplacian: ,在GCN中使用较多

Random walk normalized Laplacian: 

3、why GCN用到拉普拉斯矩阵?

L是对称阵,可进行特征分解(谱分解)。

L只在中心顶点和一阶相连的顶点(1-hop neighbor)上有非0元素,其余均为o

L算子和L矩阵进行类比。

五、L的特征分解(谱分解)

GCN的核心基于拉普拉斯矩阵的谱分解,矩阵的谱分解=特征分解=对角化,不是所有的矩阵都可以特征分解(充要条件为n阶方阵存在n个线性无关的特征向量)。L矩阵是半正定对称矩阵。

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

其中 ,是列向量为单位特征向量的矩阵,也就说 是列向量。 是n个特征值构成的对角阵。

由于 是正交矩阵,即 ,转置=逆,所以特征分解又可以写成:

六、Graph上的傅里叶变换、卷积

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

1、传统的傅里叶变换定义为:,信号 与基函数 的积分,基函数 是拉普拉斯算子的特征函数(满足特征方程), 就和特征值有关。

广义的特征方程定义为:,其中 是一种变换, 是特征向量或者特征函数(无穷维的向量), 是特征值。 满足:, 就是变换 的特征函数, 和特征值密切相关。

是拉普拉斯矩阵, 是其特征向量,满足。

Graph上的傅里叶变换:,是Graph上的 维向量 与Graph的顶点一一对应, 表示第 个特征向量的第 个分量

特征值(频率) 下, 的Graph 傅里叶变换就是与 对应的特征向量 进行内积运算。

是复数空间中,也就是特征向量 的共轭

将Graph上的傅里叶变换改为矩阵乘法:\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)

在Graph上傅里叶变换的矩阵形式为

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

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

将Graph上的傅里叶逆变换推广到矩阵形式:\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_2(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)

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

3、卷积。函数卷积的傅里叶变换 函数傅里叶变换的乘积,例如函数两者的卷积是二者傅立叶变换的乘积的逆变换:

类比到Graph上, 与卷积核 在Graph上的卷积:f和h的傅里叶变换→相乘→逆变换。

的傅里叶变换为 ,

卷积核 的傅里叶变换写成对角矩阵的形式即为: ,卷积核 在Graph上的傅里叶变换:

两者的傅立叶变换乘积即为:

再乘以 求两者傅立叶变换乘积的逆变换,则求出卷积:

另一种写法:, 表示hadamard product(哈达马积),向量内积或者同维度矩阵的对应元素的乘积运算。

七、Deep Learning中的GCN

Deep learning 中的Convolution就是要设计含有trainable共享参数的kernel,在Graph中,卷积参数是。

第一代GCN:,是激活函数,是权重参数,

待优化。就是graph上对应于每个顶点的feature vector,从数据集中提取特征构成向量。

第二代GCN:换成了 ,卷积为,

推导公式,得到,

α是参数,待更新。

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(读《如何理解 Graph Convolutional Network(GCN)?》)