以下内容多为个人理解,如有错误感谢批评指正。
参考链接:
如何理解GCN?知乎回答:从热传导模型到GCN
从CNN到GCN的联系与区别——GCN从入门到精(fang)通(qi)
GCN问题本质
图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。
GCN的实质
是在一张Graph Network中特征(Feature)和消息(Message)中的流动和传播!
研究GCN的原因
进入到应用层面,具体来说。
GCN的目的
提取拓扑图的空间特征。
核心理论: Sepectral graph theory 图谱论
图谱论简述
核心思想:
为什么GCN要用拉普拉斯矩阵?
(1)拉普拉斯是对称矩阵,可以进行特征分解(谱分解),这和GCN的Spectral domain对应。
(2)拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0.
(3)拉普拉斯算子和拉普拉斯矩阵之间的关系。
拉普拉斯矩阵的谱分解(特征分解)
由上可知拉普拉斯矩阵一定可以谱分解,且分解后有特殊的形式。对于拉普拉斯矩阵其谱分解为:
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=(u1,u2,...,un)是列向量为单位特征向量的矩阵,也就说 u ⃗ 1 \vec u_1 u1是列向量。
( λ 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对应的拉普拉斯矩阵的特征向量。
传统的傅里叶变换定义为:
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=1Nf(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的共轭。
即f在Graph上傅里叶变换的矩阵形式为:
f ^ = U T f \hat{f}=U^Tf f^=UTf
类似地,传统的傅里叶逆变换是对频率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=1Nf^(λl)ul(i)
即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=1Nh(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