以下内容多为个人理解,如有错误感谢批评指正。
参考链接:
如何理解GCN?知乎回答:从热传导模型到GCN
从CNN到GCN的联系与区别——GCN从入门到精(fang)通(qi)
GCN问题本质
图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。【神经网络基础|基于频谱的GCN 图卷积神经网络数学原理】GCN的实质
是在一张Graph Network中特征(Feature)和消息(Message)中的流动和传播!研究GCN的原因
- CNN无法处理非欧几里得结构数据,因为此种结构没有平移不变性,卷积核的大小无法固定不变。
- 拓扑图中包含许多重要的信息,可以通过图谱论进行挖掘。
- 拓扑连接是一种广义的数据结构,且一般来说任何数据在赋范空间内都可以建立拓扑关系。例如谱聚类(谱聚类原理总结)
GCN的目的
提取拓扑图的空间特征。核心理论: Sepectral graph theory 图谱论
图谱论简述
核心思想:
- 借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质。
- 借助于图谱的理论来实现拓扑图上的卷积操作。
(1)拉普拉斯是对称矩阵,可以进行特征分解(谱分解),这和GCN的Spectral domain对应。
(2)拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0.
(3)拉普拉斯算子和拉普拉斯矩阵之间的关系。
拉普拉斯矩阵的谱分解(特征分解)
- 矩阵的谱分解,特征分解,对角化都是同一概念。特征分解
- 不是所有矩阵都可以特征分解,充要条件为n阶方阵存在n个线性无关的特征向量。
线性无关与线性相关 - 拉普拉斯矩阵是半正定对称矩阵,有如下三个性质:
- 对称矩阵一定有n个线性无关的特征向量
- 半正定矩阵的特征值一定非负
- 对称矩阵的特征向量相互正交,及所有的特征向量构成的矩阵为正交矩阵。正交矩阵
文章图片
由上可知拉普拉斯矩阵一定可以谱分解,且分解后有特殊的形式。对于拉普拉斯矩阵其谱分解为:
L = U ( λ 1 . . . λ n ) U ? 1 L=U\begin{pmatrix} \lambda_1 & & \\ &...& \\ & &\lambda_n\\ \end{pmatrix}U^{-1} L=U???λ1??...?λn?????U?1
其中 U = ( u ? 1 , u ? 2 , . . . , u ? n ) U=(\vec u_1 , \vec u_2, ... ,\vec u_n) U=(u 1?,u 2?,...,u n?)是列向量为单位特征向量的矩阵,也就说 u ? 1 \vec u_1 u 1?是列向量。
( λ 1 . . . λ n ) \begin{pmatrix} \lambda_1 & & \\ &...& \\ & &\lambda_n\\ \end{pmatrix} ???λ1??...?λn?????是n个特征值构成的对角阵。
由于 U U U是正交矩阵,即 U U T = E UU^T=E UUT=E
所以特征分解又可以写成:
L = U ( λ 1 . . . λ n ) U T L=U\begin{pmatrix} \lambda_1 & & \\ &...& \\ & &\lambda_n\\ \end{pmatrix}U^T L=U???λ1??...?λn?????UT
特征分解最右边的是特征矩阵的逆,只是拉普拉斯矩阵的性质才可以写成特征矩阵的转置。
从传统的傅里叶变换、卷积类比到Graph上的傅里叶变换及卷积
把传统的傅里叶变换及卷积迁移到Graph上来,核心工作是把拉普拉斯算子的特征函数 e ? i w t e^{-iwt} e?iwt变为Graph对应的拉普拉斯矩阵的特征向量。
Graph上的傅里叶变换 传统的傅里叶变换定义为:
F ( ω ) = F [ f ( t ) ] = ∫ f ( t ) e ? i w t d t F(\omega)=\mathcal{F}[f(t)]=\int_{}^{}f(t)e^{-iwt}dt F(ω)=F[f(t)]=∫?f(t)e?iwtdt
信号 f ( t ) f(t) f(t)与基函数的积分,从数学上看,由于基函数
e ? i w t e^{-iwt} e?iwt是拉普拉斯算子的特征函数(满足特征方程),w就和特征值有关,所以使用此式作为基函数。
证明:
文章图片
同理,在Graph问题中,用到拉普拉斯矩阵(拉普拉斯矩阵就是离散的拉普拉斯算子)时就自然去找拉普拉斯矩阵的特征向量。
L是拉普拉斯矩阵,V是其特征向量,满足下式:
L V = λ V LV=\lambda V LV=λV
离散积分就是一种内积形式,仿上定义Graph上的傅里叶变换:
F ( λ l ) = f ? ( λ l ) = ∑ i = 1 N f ( i ) u l ? ( i ) F(\lambda_l)=\vec f(\lambda_l)=\sum_{i=1}^Nf(i)u_l^{*}(i) F(λl?)=f ?(λl?)=∑i=1N?f(i)ul??(i)
f f f是Graph上的N维向量, f ( i ) f(i) f(i)与Graph的顶点一一对应, u l ( i ) u_l(i) ul?(i)表示第l个特征向量的第i个分量。那么特征值(频率) λ l \lambda_l λl?下的 f f f的Graph傅里叶变换就是与 λ l \lambda_l λl?对应的特征向量 u l u_l ul?进行内积运算。
ps:
上述的内积运算是在复数空间中定义的,所以采用了 u l ? ( i ) u_l^*(i) ul??(i),也就是 u l u_l ul?的共轭。利用矩阵乘法将Graph上的傅里叶变换推广到矩阵形式:
文章图片
即f在Graph上傅里叶变换的矩阵形式为:
f ^ = U T f \hat{f}=U^Tf f^?=UTf
(b)Graph上的傅里叶逆变换 类似地,传统的傅里叶逆变换是对频率w求积分:
F ? 1 [ F ( ω ) ] = 1 2 ∏ ∫ F ( ω ) e i w t d ω ] \mathcal{F}^{-1}[F(\omega)]=\frac{1}{2\prod}\int F(\omega)e^{iwt}d\omega] F?1[F(ω)]=2∏1?∫F(ω)eiwtdω]
迁移到Graph上变为对特征值λl求和:
f ( i ) = ∑ l = 1 N f ^ ( λ l ) u l ( i ) f(i)=\sum_{l=1}^N\hat{f}(\lambda_l)u_l(i) f(i)=∑l=1N?f^?(λl?)ul?(i)
利用矩阵乘法将Graph上的傅里叶逆变换推广到矩阵形式:
文章图片
即f在Graph上傅里叶逆变换为
f ^ = U T f \hat{f}=U^Tf f^?=UTf
推广卷积 在上面的基础上,利用卷积定理类比将卷积运算推广到Graph上。
卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即对于f(t)与h(t)两者的卷积是其函数傅里叶变换乘积的逆变换:
f ? h = F ? 1 [ f ^ ( ω ) h ^ ( ω ) ] = 1 2 ∏ ∫ f ^ ( ω ) h ^ ( ω ) e i w t d ω ] f*h=\mathcal{F}^{-1}[\hat{f}(\omega)\hat{h}(\omega)]=\frac{1}{2\prod}\int \hat{f}(\omega)\hat{h}(\omega)e^{iwt}d\omega] f?h=F?1[f^?(ω)h^(ω)]=2∏1?∫f^?(ω)h^(ω)eiwtdω]
类比到Graph上并把傅里叶变换的定义带入,f与卷积核h在Graph上的卷积可按下列步骤求出:
f f f的傅里叶变换为 f ^ = U T f \hat{f}=U^Tf f^?=UTf
卷积核h的傅里叶变换写成对角矩阵的形式即为:
( h ^ ( λ 1 ) . . . h ^ ( λ n ) ) \begin{pmatrix} \hat{h}(\lambda_1) & & \\ &...& \\ & &\hat{h}(\lambda_n)\\ \end{pmatrix} ???h^(λ1?)?...?h^(λn?)????
h ^ ( λ l ) = ∑ i = 1 N h ( i ) u l ? ( i ) \hat{h}(\lambda_l)=\sum_{i=1}^{N}h(i)u_l^*(i) h^(λl?)=∑i=1N?h(i)ul??(i)是根据需要设计的卷积核 h h h在Graph上的傅里叶变换。
两者的傅里叶变换乘积即为:
( h ^ ( λ 1 ) . . . h ^ ( λ n ) ) U T f \begin{pmatrix} \hat{h}(\lambda_1) & & \\ &...& \\ & &\hat{h}(\lambda_n)\\ \end{pmatrix} U^Tf ???h^(λ1?)?...?h^(λn?)????UTf
再乘以U求两者傅里叶变换乘积的逆变换,则求出卷积:
( f ? h ) G = U ( h ^ ( λ 1 ) . . . h ^ ( λ n ) ) U T f (1) (f*h)_G=U \begin{pmatrix} \hat{h}(\lambda_1) & & \\ &...& \\ & &\hat{h}(\lambda_n)\\ \end{pmatrix} U^Tf \tag{1} (f?h)G?=U???h^(λ1?)?...?h^(λn?)????UTf(1)
式中: U U U及 U T U^T UT的定义与之前矩阵分解出的U相同。
很多论文中的Graph卷积公式为:
( f ? h ) G = U ( ( U T h ) ? ( U T f ) ) (f*h)_G=U((U^Th)\bigodot(U^Tf)) (f?h)G?=U((UTh)?(UTf))
⊙表示Hadamard product(哈达马积),对于两个维度相同的向量、矩阵、张量进行对应位置的逐元素乘积运算。其实此式和式(1)是完全相同的。
后续学习:
傅里叶变换
机器学习中的GCN
推荐阅读
- 学习资源推荐|B站好资源: 数据科学,机器学习,python
- pytorch|【NLP】用MLP、CNN、RNN解决文本情感分类问题
- 机器学习/深度学习/强化学习|PyTorch(数据加载,数学原理,猫鱼分类,CNN,预训练,迁移学习)
- 大数据|华为诺亚最新视觉Transformer综述
- 定点|定点 浮点 神经网络 量化_神经网络量化入门--后训练量化
- 神经网络|图神经网络从入门到入门
- pytorch|pytorch-模型压缩与剪枝
- 大数据|视觉的目的是什么(从监督学习到对比学习,回顾CV发展史)
- 目标检测|YoloV5 最强剪枝技术 模型压缩,3ms推理的YoloV5mAP60