参考清单如下:
B站视频
知乎Johnny Richards
知乎Taylor Wu
接上一篇blog:Graph Neural Network学习笔记-Day1
和Spatial-based convolution不同,Spectral-Based Convolution就是根据“时域卷积<==>频域乘积”的性质,通过傅里叶变换,把时域需要卷积的feature和卷积核,变换到频域,相乘之后再傅里叶反变换过去,从而完成卷积。
主要是理解graph如何变换到谱域,如何进行傅里叶变换
对于demo graph,给出上面的信号 f f f。根据graph的样子,可以得到D,A,L,以及L谱分解之后的 Λ \Lambda Λ, U U U。
λ = 0 \lambda=0 λ=0就是直流分量,特征向量 u 0 u_0 u0这四个节点上的信号强度相同, λ i \lambda_i λi越大,特征向量在节点上变化的就越快。
还是以上面的demo graph为例子,考察拉普拉斯算子究竟干了什么~~
如上图所示,L算子作用到graph的信号 f f f上面 L f = ( D − A ) f = D f − A f Lf = (D-A)f = Df - Af Lf=(D−A)f=Df−Af,只考察第一个节点 v 0 v_0 v0, 第一个节点变换后的值$a = D(1,:) f - A(1,:)f , 其 中 ,其中 ,其中D(1,:) , , ,A(1,:)$ 分别表示这两个矩阵的第一行。那么就是 v 0 v_0 v0上的signal f ( 1 ) f(1) f(1)乘以节点的度,然后减去与 v 0 v_0 v0相邻的节点的信号。如上图,整理成 v 0 v_0 v0上的信号和它的邻居节点的信号之差,再求和。所以这就是信号强度的变化。如果考虑功率的话,就用 f T L f f^TLf fTLf,如下图所示,整理成了相邻node之间信号功率的变化,或者是graph上信号平滑程度。平滑程度就是频率,频率越高,相邻信号之间能量差就越大,频率越低,相邻信号之间的能量差就越小。
把信号用特征向量替代,有
所以特征值就是特征向量的频率大小。
例如下图中的demo graph,是一个具有20个node的 line graph。根据这个graph的L进行谱分解,得到的 λ \lambda λ和对应的 u u u如下面六张图,其中 λ \lambda λ越大,节点之间信号变化就越快。
自己随便画了一下
参考知乎上一篇回答,感觉挺有趣。
顾名思义就是热量是怎么传播的咯。
牛顿冷却定律(Newton’s Law of Cooling)说,当物体表面与周围存在温度差时,单位时间从单位面积散失的热量与温度差成正比,比例系数称为热传递系数(摘自:百度百科)。假设这个比例系数为 k k k,在一维、离散假设下,位于 i i i处的一个点的温度为 ϕ i \phi_i ϕi,那么 ϕ i \phi_i ϕi变化快慢 d ϕ i d t \frac{d\phi_i}{dt} dtdϕi就是其周围相邻的两个点 i − 1 i-1 i−1和 i + 1 i+1 i+1的温度 ϕ i − 1 \phi_{i-1} ϕi−1和 ϕ i + 1 \phi_{i+1} ϕi+1分别与 ϕ i \phi_i ϕi的差乘以比例系数 k k k。即
d ϕ i d t = k ( ϕ i + 1 − ϕ i ) − k ( ϕ i − ϕ i − 1 ) \frac{d\phi_i}{dt} = k(\phi_{i+1} - \phi_i) - k(\phi_i - \phi_{i-1}) dtdϕi=k(ϕi+1−ϕi)−k(ϕi−ϕi−1)
这里假设点 i i i从 i + 1 i+1 i+1处接收热量,向 i − 1 i-1 i−1处传播热量。这么表示是为了后面写成二阶导数的形式。。。其他情况也可以转化成该形式。
不难看出,等式右边其实是温度对空间位置的二阶偏导数,即
d ϕ i d t = k [ ( ϕ i + 1 − ϕ i ) − ( ϕ i − ϕ i − 1 ) ] = k ∂ 2 ϕ i ∂ x 2 \frac{d\phi_i}{dt} = k [(\phi_{i+1} - \phi_i) - (\phi_i - \phi_{i-1})] = k \frac{\partial^2 \phi_i}{\partial x^2} dtdϕi=k[(ϕi+1−ϕi)−(ϕi−ϕi−1)]=k∂x2∂2ϕi
因此,一维连续空间的热传导方程就可以写为:
d ϕ d t − k ∂ 2 ϕ ∂ x 2 = 0. \frac{d\phi}{dt} - k \frac{\partial^2 \phi}{\partial x^2} = 0. dtdϕ−k∂x2∂2ϕ=0.
上面是一维的情况,对于高维情况下,等式右边的二阶偏导数就变成了拉普拉斯算子 ▽ 2 \bigtriangledown^2 ▽2。
d ϕ d t − k ▽ 2 ϕ = 0. \frac{d\phi}{dt} - k\bigtriangledown^2 \phi = 0. dtdϕ−k▽2ϕ=0.
拉普拉斯算子就是梯度的散度,是一个二阶微分算子,是笛卡尔坐标系 x i x_i xi中的所有非混合二阶偏导数: ∑ i = 1 n ∂ 2 ∂ x i 2 \sum_{i=1}^{n}\frac{\partial^2}{\partial x_i^2} ∑i=1n∂xi2∂2
一个Graph可以表示为节点V和边E的集合。用邻接矩阵A(Ajacency Matrix)来表示各个节点之间的连接关系。 a i j = 1 a_{ij} = 1 aij=1表示 v i v_i vi和 v j v_j vj之间是相连的; a i j = 0 a_{ij} = 0 aij=0则表示 v i v_i vi和 v j v_j vj之间没有边。假设热量在图的节点与节点之间传播,那么只有在相邻的节点之间才有传播,因此
d ϕ v i d t = k ∑ j = 1 N a i j ( ϕ v i − ϕ v j ) \frac{d \phi_{v_i}}{dt} = k \sum_{j=1}^N a_{ij} (\phi_{v_i} -\phi_{v_j}) dtdϕvi=k∑j=1Naij(ϕvi−ϕvj)
其中 N N N表示Graph中的节点总数。上式中,对于A中的第 i i i行,只把其中为1(与 v i v_i vi相连接)对应的节点与节点 v i v_i vi的温度差取出,乘以热传递的比例系数k。
把上面式子稍作整理:
d ϕ v i d t = k ( ϕ v i ∑ j = 1 N a i j − ∑ j = 1 N a i j ϕ v j ) = k ( ϕ v i d i − ∑ j = 1 N a i j ϕ v j ) \frac{d \phi_{v_i}}{dt} = k( \phi_{v_i} \sum_{j=1}^N a_{ij} - \sum_{j=1}^N a_{ij}\phi_{v_j}) = k (\phi_{v_i} d_i - \sum_{j=1}^N a_{ij}\phi_{v_j}) dtdϕvi=k(ϕvi∑j=1Naij−∑j=1Naijϕvj)=k(ϕvidi−∑j=1Naijϕvj)
其中 d i d_i di表示节点 v i v_i vi的度。
把所有节点都考虑进来表示成列矩阵 ϕ = [ d ϕ v 1 d t , … , d ϕ v N d t ] T \phi = [\frac{d\phi_{v_1}}{dt},\dots,\frac{d\phi_{v_N}}{dt}]^T ϕ=[dtdϕv1,…,dtdϕvN]T,令D为对角矩阵,对角线元素就是节点的度,则
d ϕ d t = k ( D ϕ − A ϕ ) = k ( D − A ) ϕ \frac{d\phi}{dt} = k(D\phi - A\phi) = k(D-A)\phi dtdϕ=k(Dϕ−Aϕ)=k(D−A)ϕ
其中 D − A D-A D−A就是拉普拉斯矩阵 L L L,所以有
d ϕ d t − k L ϕ = 0 \frac{d\phi}{dt} - k L \phi =0 dtdϕ−kLϕ=0
是不是和上面的红色公式一毛一样??—区别只是一个是欧式空间、一个是拓扑空间哟。
d ϕ d t = k L ϕ \frac{d\phi}{dt} = k L \phi dtdϕ=kLϕ 这个公式可以这样解释哦,对一个graph上用L算子作用到每个节点的温度上是有什么意义呢?忽略这个常数k的话,L作用到 ϕ \phi ϕ得到的就是节点的温度变换率。
欧式空间上,L的特征函数是 e − j ω t e^{-j\omega t} e−jωt,因为易知
L e − j ω t = − ω 2 e − j ω t L e^{-j\omega t} = -\omega^2 e^{-j\omega t} Le−jωt=−ω2e−jωt
欧式空间中,基函数(特征函数)有无穷多个
在graph里面,L是N维的,N是graph的节点数。所以特征空间是有限维的。
上面也很容易看出,特征向量对应的是和频率相关的。
一开始我们就说,spectral-based GNN是把graph和卷积核都进行傅里叶变换,在谱域相乘之后,反变换回来。那么为什么讲了半天L还没出现傅里叶变换呢?下面就是傅里叶变换了。
傅里叶变换就是信号在一组基函数上的展开,这组基函数就是拉普拉斯算子的特征函数。
相应的,推广到graph上,就是把graph的信号在一组基向量上展开,用的就graph的拉普拉斯算子的特征向量 U U U。
所以graph的傅里叶变换就是
F = U T f F = U^Tf F=UTf 这里积分变成了向量的内积。意义都是一样的,都是原来的信号f在基函数 e − j ω t e^{-j\omega t} e−jωt 或者基向量 u i u_i ui是上面的投影。
下图解释的就是上面的graph的傅里叶变换。其中,内积的值对应的就是不同频率 λ 0 \lambda_0 λ0, λ 1 \lambda_1 λ1, λ 2 \lambda_2 λ2, λ 3 \lambda_3 λ3上面的信号分量的大小。
这样我们就有了graph Fourier Transform的方法。
逆傅里叶变换更简单,就是
因为 U U T = I UU^T = I UUT=I 所以就变回了原来的 x x x。当然也可以对应传统的逆傅里叶变换,从物理意义上去解释。
卷积就相当于信号经过了一些线性系统,或者叫做滤波器。时域上是卷积,频域就是滤波器的频率响应和信号的频率相乘。把某一些频率的信号放大了,某一些频率的信号抑制了。如下图所示。
graph的滤波
如下图,也是graph的信号的spectral domain x ^ \hat{x} x^,和一个滤波器 g θ ( Λ ) g_\theta(\Lambda) gθ(Λ)相乘。滤波器的参数 θ \theta θ是待训练的参数,滤波器的自变量 Λ \Lambda Λ就是L的特征值,因为滤波器是在不同的特征值(频率)上的响应。比如 θ \theta θ可以定义为就是每个频率 λ i \lambda_i λi上面的滤波器响应值 θ i \theta_i θi。
这样就在频域完成了滤波。最后反变换回去就可以了。也就是下图所示。
整理一下,整个傅里叶变换,滤波,反变换过程,就是下图所示。其中把关于特征值的函数 g θ g_\theta gθ提到外面,就变成了 y = g θ ( L ) x y=g_\theta(L)x y=gθ(L)x
对一个graph进行卷积,就是定义一个 g θ ( L ) g_\theta(L) gθ(L)。
终于,卷积完成啦!!!
如果按照下面的定义来构造graph convolution,很显然卷积核大小和graph的大小有关,是个问题。
另外,L的几次方其实代表着对graph的卷积感受野的大小,L就是只考虑和node一步相邻的node, L k L^k Lk就表示k步相邻的node都考虑进去, L N L^N LN就是整个graph的全局特征了。对于某些数据集来讲,可能需要局部特征更好一些。
也就是这里面说的第一代卷积核以及存在的问题
选用的 g θ ( L ) g_\theta(L) gθ(L)是L的多项式加权和,权重是要学习的参数 θ \theta θ,只考虑L的前K次方。但是因为还是要计算U矩阵的乘法,所以时间复杂度依然很高。
为了解决上述问题,采用下面的Chebyshev多项式函数。可以递归计算~~
根据Chebyshev多项式函数,把本来定义的关于 Λ \Lambda Λ的多项式函数替换成了Chebyshev多项式函数
可以用递归的方式来把 x ˉ 0 . . . x ˉ K \bar{x}_0...\bar{x}_K xˉ0...xˉK求好,然后和待学习的参数 θ ′ \theta' θ′相乘就得到了卷积输出。从而解决了要求N阶矩阵乘法的问题。
详细的过程点这个知乎
对应其中的第二代GCN