读《如何理解 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是图的邻接矩阵。

2、三种拉普拉斯矩阵

Combinatorial Laplacian:L=D-A

Symmetric normalized Laplacian:L^{sys}=D^{-1/2}LD^{-1/2} ,在GCN中使用较多

Random walk normalized Laplacian:L^{rw}=D^{-1}L 

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

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

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

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

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

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

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

L= U\left(\begin{matrix}\lambda_1 & \\&\ddots \\ &&\lambda_n \end{matrix}\right) U^{-1}

其中 U=(\vec{u_1},\vec{u_2},\cdots,\vec{u_n}) ,是列向量为单位特征向量的矩阵,也就说 \vec{u_l} 是列向量\left(\begin{matrix}\lambda_1 & \\&\ddots \\ &&\lambda_n \end{matrix}\right) 是n个特征值构成的对角阵。

由于 U 是正交矩阵,即 UU^{T}=E,转置=逆,所以特征分解又可以写成:

L= U\left(\begin{matrix}\lambda_1 & \\&\ddots \\ &&\lambda_n \end{matrix}\right) U^{T}

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

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

1、传统的傅里叶变换定义为:F(\omega)=\mathcal{F}[f(t)]=\int_{}^{}f(t)e^{-i\omega t} dt,信号 f(t) 与基函数 e^{-i\omega t} 的积分,基函数 e^{-i\omega t}是拉普拉斯算子的特征函数(满足特征方程), \omega 就和特征值有关。

广义的特征方程定义为:A V=\lambda V,其中 A 是一种变换, V 是特征向量或者特征函数(无穷维的向量), \lambda 是特征值。 e^{-i\omega t}满足:\Delta e^{-i\omega t}=\frac{\partial^{2}}{\partial t^{2}} e^{-i\omega t}=-\omega^{2} e^{-i\omega t}\ e^{-i\omega t} 就是变换 \Delta 的特征函数, \omega 和特征值密切相关。

L 是拉普拉斯矩阵, V 是其特征向量,满足LV=\lambda V

Graph上的傅里叶变换:F(\lambda_l)=\hat{f}(\lambda_l)=\sum_{i=1}^{N}{f(i) u_l^*(i)}f是Graph上的 N 维向量f(i) 与Graph的顶点一一对应, u_l(i)表示第 l 个特征向量的第 i 个分量

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

u_l^*(i) 是复数空间中,也就是特征向量 u_l 的共轭

将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)

f 在Graph上傅里叶变换的矩阵形式为\hat{f}=U^Tf \qquad(a)

2、传统的傅里叶逆变换是对频率 \omega 求积分:\mathcal{F}^{-1}[F(\omega)]=\frac{1}{2\Pi}\int_{}^{}F(\omega)e^{i\omega t} d\omega

迁移到Graph上变为对特征值 \lambda_l 求和:f(i)=\sum_{l=1}^{N}{\hat{f}(\lambda_l) u_l(i)}

将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)

f 在Graph上傅里叶逆变换的矩阵形式为: f=U\hat{f} \qquad(b)

3、卷积。函数卷积的傅里叶变换 函数傅里叶变换的乘积,例如函数 f(t)h(t)两者的卷积是二者傅立叶变换的乘积的逆变换:f*h=\mathcal{F}^{-1}\left[ \hat{f}(\omega)\hat{h}(\omega) \right]=\frac{1}{2\Pi}\int_{}^{} \hat{f}(\omega)\hat{h}(\omega)e^{i\omega t} d\omega

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

f 的傅里叶变换为 \hat{f}=U^Tf

卷积核 h 的傅里叶变换写成对角矩阵的形式即为: \left(\begin{matrix}\hat h(\lambda_1) & \\&\ddots \\ &&\hat h(\lambda_n) \end{matrix}\right)卷积核 h 在Graph上的傅里叶变换:\hat{h}(\lambda_l)=\sum_{i=1}^{N}{h(i) u_l^*(i)}

两者的傅立叶变换乘积即为: \left(\begin{matrix}\hat h(\lambda_1) & \\&\ddots \\ &&\hat h(\lambda_n) \end{matrix}\right)U^Tf

再乘以 U 求两者傅立叶变换乘积的逆变换,则求出卷积:(f*h)_G= U\left(\begin{matrix}\hat h(\lambda_1) & \\&\ddots \\ &&\hat h(\lambda_n) \end{matrix}\right) U^Tf \qquad(1)

另一种写法:(f*h)_G=U((U^Th)\odot(U^Tf)) \qquad(2)\odot 表示hadamard product(哈达马积),向量内积或者同维度矩阵的对应元素的乘积运算。

七、Deep Learning中的GCN

Deep learning 中的Convolution就是要设计含有trainable共享参数的kernel,在Graph中,卷积参数是diag(\hat h(\lambda_l) )

第一代GCN:y_{output}=\sigma \left(U\left(\begin{matrix}\theta_1 &\\&\ddots \\ &&\theta_n \end{matrix}\right) U^T x \right) \qquad(3)\sigma(\cdot)是激活函数,\Theta=({\theta_1},{\theta_2},\cdots,{\theta_n})是权重参数,

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

第二代GCN:\hat h(\lambda_l)换成了\sum_{j=0}^K \alpha_j \lambda^j_l ,卷积为y_{output}=\sigma \left(U\left(\begin{matrix}\sum_{j=0}^K \alpha_j \lambda^j_1 &\\&\ddots \\ && \sum_{j=0}^K \alpha_j \lambda^j_n \end{matrix}\right) U^T x \right) \qquad(4)

推导公式U \sum_{j=0}^K \alpha_j \Lambda^j U^T =\sum_{j=0}^K \alpha_j U\Lambda^j U^T = \sum_{j=0}^K \alpha_j L^j,得到y_{output}=\sigma \left( \sum_{j=0}^K \alpha_j L^j x \right) \qquad(5)

α是参数,待更新。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值