之前做可解释模型的时候,看了图卷积相关的资料及论文,对谱图理论及空域图理论有一些理解。这个博文包含了自己先前总结及思考的知识点,是一个 from scratch 的学习路线图。后续会逐步更新业界常见及最新的谱图及空域图相关论文。
谱图理论是研究图的性质与特征多项式,特征值和与图相关的矩阵特征向量的关系,例如图的 邻接矩阵 和 Laplacian矩阵。1
谱图理论应用:2
Laplacian矩阵
是图的矩阵表示,可以看作是 有限差分法 得到的逼近负连续拉普拉斯的图上负离散拉普拉斯运算符的矩阵形式。 基于图的信号处理是基于 图傅里叶变换 ,它扩展了传统的 离散傅里叶变换 ,将 复正弦曲线的标准基 替换为对应于信号的 图拉普拉斯矩阵 的特征向量。3
Laplacian矩阵
在 边加权图 的应用中更为常见,谱图理论 将图的属性与谱(spectrum)相关联,即与图相关的矩阵的特征值和特征向量,例如其邻接矩阵或Laplacian矩阵。不平衡的权重可能会对矩阵谱产生不利影响,导致需要归一化——矩阵条目(entries)的列/行缩放——导致归一化的邻接和Laplacian矩阵。
Laplacian矩阵分解(Laplacian Matrix Eigendecomposition)也称为谱分解(spectral decomposition)。
因为Laplacian矩阵是实对称矩阵,所以可以被正交对角化:
L = U Λ U T = U [ λ 1 λ 2 ⋱ λ n ] U T \begin{align} L=U\Lambda U^T=\ U \begin{bmatrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \\ \end{bmatrix} U^T \end{align} L=UΛUT= U⎣ ⎡λ1λ2⋱λn⎦ ⎤UT
U U U是列向量为单位特征向量的矩阵, λ l \lambda_l λl为特征值。
傅里叶级数知识参见:
\quad 矩形波的傅里叶级数及代码
FT参考链接:
\quad 傅里叶级数和傅里叶变换是什么关系? - 马同学的回答 - 知乎
\quad 傅里叶系列(二)傅里叶变换的推导 - 知乎
\quad 傅里叶变换 – 从 Hilbert Space 到傅里叶变换基
\quad 傅里叶变换基的疑问
傅里叶级数是针对周期函数的,为了可以处理非周期函数,需要傅里叶变换(FT)。FT有助于将傅里叶级数扩展到非周期函数,这允许将任何函数视为简单正弦曲线的总和。
传统的傅里叶变换公式为:
F ( ω ) = F [ f ( t ) ] = ∫ − ∞ + ∞ f ( t ) e − i ω t d t F(\omega)=\mathcal{F}[f(t)]=\int_{-\infin}^{+\infin}f(t)e^{-i\omega t}dt F(ω)=F[f(t)]=∫−∞+∞f(t)e−iωtdt
参考wiki百科-Discrete Fourier transform
F ( k ) = X k = ∑ n = 0 N − 1 x n ⋅ e − i 2 π N k n = ∑ n = 0 N − 1 x n ⋅ [ cos ( 2 π N k n ) − i ⋅ sin ( 2 π N k n ) ] , \begin{align} \mathcal{F}(k) = X_k &= \sum_{n=0}^{N-1} x_n \cdot e^{-\frac {i 2\pi}{N}kn}\\ &= \sum_{n=0}^{N-1} x_n \cdot \left[\cos\left(\frac{2 \pi}{N}kn\right) - i \cdot \sin\left(\frac{2 \pi}{N}kn\right)\right], \end{align} F(k)=Xk=n=0∑N−1xn⋅e−Ni2πkn=n=0∑N−1xn⋅[cos(N2πkn)−i⋅sin(N2πkn)],
本节的内容主要参考了Wiki百科-Graph Fourier Transform,并增加了一些便于理解的辅助知识。
这里的图傅里叶变换指的是"Graph Fourier Transform,GFT",不是图像傅里叶变换(Image Fourier Transform)。同样,图傅里叶变换也有相应的逆变换——图傅里叶逆变换(Inverse Graph Fourier Transform,IGFT)
在数学中,图傅里叶变换是一种数学变换,它将图的Laplacian矩阵分解成特征值和特征向量。类似于经典傅立叶变换, L L L的特征值代表频率,特征向量形成所谓的图傅里叶基(DFT的基为 e − i 2 π N k n e^{-\frac {i 2\pi}{N}kn} e−Ni2πkn)。
\quad | 连续傅里叶变换 | 离散傅立叶变换 | 图傅立叶变换 |
---|---|---|---|
变换基 | e − i 2 π f t e^{-i2\pi ft} e−i2πft | e − i 2 π N k n e^{-\frac {i 2\pi}{N}kn} e−Ni2πkn | U T U^T UT |
维度 | ∞ \infin ∞ | N N N(序列个数) | N N N(顶点个数) |
对于无向带权图 G = ( V , E ) G=(V,E) G=(V,E),V是图结点(node)的集合, ∣ V ∣ = N |V|=N ∣V∣=N是node的个数, E E E是边(edge)的集合。
图信号(graph signal) f : V → R f: V \rightarrow \mathbb{R} f:V→R 是定义在图G顶点上的函数, f f f 将每一个顶点(vertex5) { v i } i = 1 , … , N \{v_i\}_{i=1,\ldots,N} {vi}i=1,…,N 映射为一个实数 f ( i ) f(i) f(i) 。任何图信号都可以被映射在Laplacian矩阵 L L L 的特征向量上。设 λ l \lambda_l λl和 μ l ∈ R N × 1 \mu_l\in \mathbb{R}^{N\times 1} μl∈RN×1 为Laplacian矩阵 L L L 的第 l t h l_{th} lth 个特征值和特征向量(特征值已经排序, 0 = λ 0 ≤ λ 1 ≤ ⋯ ≤ λ N − 1 0= \lambda_0\leq\lambda_1\leq\cdots\leq\lambda_{N-1} 0=λ0≤λ1≤⋯≤λN−1),图信号 f f f 在 G G G 顶点上的图傅里叶变换 f ^ \hat{f} f^ 是 f f f在 L L L的 本征函数 (eigenfunctions)6 方面的扩展。定义为:
G F [ f ] ( λ l ) = f ^ ( λ l ) = ⟨ f , μ l ⟩ = ∑ i = 1 N f ( i ) μ l ∗ ( i ) , \begin{align} \mathcal{G F}[f](\lambda_{l})= \hat{f}\left(\lambda_{l}\right)= \langle f, \mu_{l}\rangle= \sum_{i=1}^{N} f(i) \mu_{l}^*(i), \end{align} GF[f](λl)=f^(λl)=⟨f,μl⟩=i=1∑Nf(i)μl∗(i),其中, μ l ∗ = μ l T \mu_l^* = \mu_l^\text{T} μl∗=μlT, μ l ( i ) \mu_l(i) μl(i)是 L L L的第 l l l个特征向量 μ l \mu_l μl的第 i i i个分量; f ( i ) f(i) f(i)图信号 f ∈ R N × 1 f\in \mathbb{R}^{N\times 1} f∈RN×1的第 i i i个分量,关于图信号 f f f的通俗解释,参见博文。
将上述式子展开成矩阵的形式如下:
( f ^ ( λ 1 ) f ^ ( λ 2 ) ⋮ f ^ ( λ n ) ) = [ u 1 ( 1 ) u 1 ( 2 ) ⋯ u 1 ( n ) u 2 ( 1 ) u 2 ( 2 ) ⋯ u 2 ( n ) ⋮ ⋮ ⋮ u n ( 1 ) u 2 ( 2 ) ⋯ u n ( n ) ] ⋅ [ f ( 1 ) f ( 2 ) ⋮ f ( n ) ] \begin{pmatrix} \hat{f}(\lambda_1) \\ \hat{f}(\lambda_2) \\ \vdots \\ \hat{f}(\lambda_n) \end{pmatrix}= \begin{bmatrix} u_1(1) & u_1(2) & \cdots & u_1(n) \\ u_2(1) & u_2(2) & \cdots & u_2(n) \\ \vdots & \vdots & & \vdots \\ u_n(1) & u_2(2) & \cdots & u_n(n) \\ \end{bmatrix} \centerdot \begin{bmatrix} f(1) \\ f(2) \\ \vdots \\ f(n) \end{bmatrix} ⎝ ⎛f^(λ1)f^(λ2)⋮f^(λn)⎠ ⎞=⎣ ⎡u1(1)u2(1)⋮un(1)u1(2)u2(2)⋮u2(2)⋯⋯⋯u1(n)u2(n)⋮un(n)⎦ ⎤⋅⎣ ⎡f(1)f(2)⋮f(n)⎦ ⎤所以GFT的向量形式为:
f ^ = U T f \begin{align} \hat{f}=U^Tf \end{align} f^=UTf 其中, U T U^T UT 的每一行是一个特征向量。
- 也有文献将其写作 f ^ = U − 1 f \hat{f}=U^{-1}f f^=U−1f,其实两者是等价的,因为拉普拉斯矩阵 L L L 是实对称矩阵,其特征向量矩阵是正交矩阵, U − 1 = U T U^{-1}=U^{T} U−1=UT,可参考如下博文《拉普拉斯矩阵特征向量的几个关键性质证明》。
GFT 是变换 U U U 在顶点函数 f f f 上执行基的变化,将其表示为Laplacian特征函数的线性组合。根据上面的讨论,这可以被视为傅里叶变换的离散模拟。
因为 L L L是实对称矩阵,它的特征向量 { μ l } l = 0 , ⋯ , N − 1 \{\mu_l\}_{l=0,\cdots, N-1} {μl}l=0,⋯,N−1形成正交基,因此存在图傅里叶逆变换:
I G F [ f ^ ] ( i ) = f ( i ) = ∑ l = 0 N − 1 f ^ ( λ l ) μ l ( i ) \begin{align} \mathcal{I} \mathcal{G} \mathcal{F}[\hat{f}](i)= f(i)= \sum_{l=0}^{N-1} \hat{f}(\lambda_l) \mu_l(i) \end{align} IGF[f^](i)=f(i)=l=0∑N−1f^(λl)μl(i) 所以IGFT的向量形式为:
[ f ( 1 ) f ( 2 ) ⋮ f ( n ) ] = [ u 1 ( 1 ) u 2 ( 1 ) ⋯ u n ( 1 ) u 1 ( 2 ) u 2 ( 2 ) ⋯ u n ( 2 ) ⋮ ⋮ ⋮ u 1 ( n ) u 2 ( n ) ⋯ u n ( n ) ] ⋅ ( f ^ ( λ 1 ) f ^ ( λ 2 ) ⋮ f ^ ( λ n ) ) \begin{bmatrix} f(1) \\ f(2) \\ \vdots \\ f(n) \end{bmatrix}= \begin{bmatrix} u_1(1) & u_2(1) & \cdots & u_n(1) \\ u_1(2) & u_2(2) & \cdots & u_n(2) \\ \vdots & \vdots & & \vdots \\ u_1(n) & u_2(n) & \cdots & u_n(n) \\ \end{bmatrix} \centerdot \begin{pmatrix} \hat{f}(\lambda_1) \\ \hat{f}(\lambda_2) \\ \vdots \\ \hat{f}(\lambda_n) \end{pmatrix} ⎣ ⎡f(1)f(2)⋮f(n)⎦ ⎤=⎣ ⎡u1(1)u1(2)⋮u1(n)u2(1)u2(2)⋮u2(n)⋯⋯⋯un(1)un(2)⋮un(n)⎦ ⎤⋅⎝ ⎛f^(λ1)f^(λ2)⋮f^(λn)⎠ ⎞ 其中, U U U 的每一列是一个特征向量。
IGFT的向量形式为:
f = U f ^ \begin{align} f=U\hat{f} \end{align} f=Uf^
前两小节可以看到,图的傅里叶变换及其逆变换可以总结为:
对于 L = U Λ U T L=U \Lambda U^T L=UΛUT,图的傅立叶变换及逆变换为 { G F T : f ^ = U T f I G F T : f = U f ^ \begin{cases} GFT:\hat{f}=U^Tf \\ IGFT:f=U\hat{f} \end{cases} {GFT:f^=UTfIGFT:f=Uf^
类似于经典的傅里叶变换,图傅里叶变换提供了一种在两个不同的域中表示信号的方法:顶点域(vertex domain)和谱域(spectral domain)。请注意,图傅里叶变换及其逆的定义取决于拉普拉斯特征向量的选择,它们不一定是唯一的。 归一化拉普拉斯矩阵的特征向量也是定义正向和反向图傅里叶变换的可能基础。
有文献将GFT和IGFT中 U U U 的写法对调,即其写作 { f ^ = U f f = U T f ^ \begin{cases} \hat{f}=Uf \\ f=U^T\hat{f} \end{cases} {f^=Uff=UTf^,比如哈佛大学图书馆学术委员为办公室发布的讲义《Graph Convolutions and Machine Learning》,因为该文献的拉普拉斯矩阵相似对角化定义为 L = U T Λ U L=U^T \Lambda U L=UTΛU。
此外,推荐使用 L = U Λ U T L=U \Lambda U^T L=UΛUT表示,kipf-GCN就是使用这种表示方法。
本小结已移入另一篇博客中,参见《图傅立叶变换的理解及例子》。
在图神经网络,存在两种卷积,一个是谱图卷积(Spectral Graph Convolution),一个是空域图卷积。谱图卷积在早期就进入深入研究,直到kipf发表GCN引起Deep learning 界的广泛关注。空域卷积在GraphSage之后进入人们的视线。本节着重讲解谱图卷积。
卷积定理表明,两个函数(或信号)的卷积的傅里叶变换是它们傅里叶变换的逐点乘积。类似于离散时域/频域卷积定理,图的傅立叶变换也满足卷积定理。
本节请参阅我的两个博文,可以跟好地理解卷积:
卷积定义:《连续卷积和离散卷积定义及积分计算》
卷积定理:《时域卷积定理及频域卷积定理》
定义:设两个定义在图上的函数 f , h : V → R f,h:V\to \mathbb{R} f,h:V→R ,谱图卷积定义为:
f ∗ h = U ( U T f ⊙ U T h ) = U [ h ^ ( λ 1 ) h ^ ( λ 2 ) ⋱ h ^ ( λ n ) ] U T f \begin{align} f*h=U(U^Tf\odot U^Th)= U\begin{bmatrix} \hat{h}(\lambda_1) \\ & \hat{h}(\lambda_2) & \\ & & \ddots\\ & & &\hat{h}(\lambda_n) \\ \end{bmatrix}U^Tf \end{align} f∗h=U(UTf⊙UTh)=U⎣ ⎡h^(λ1)h^(λ2)⋱h^(λn)⎦ ⎤UTf 其中, ⊙ \odot ⊙ 表示点积: ( u ⊙ v ) i = u i ⋅ v i (u\odot v)_i=u_i \cdot v_i (u⊙v)i=ui⋅vi, h h h是卷积核。
(8)式等号后面的两种定义是等价的,证明请参考《GCN中的等式证明》。
本节只简单介绍谱图卷积在深度学习中的使用,后续会有相关博文对第一代GCN、第二代GCN及kipf-GCN进行解读。
论文通常会将谱图卷积写成如下形式:
g θ ⋆ x = U g θ U T x \begin{align} g_\theta\star x = Ug_\theta U^Tx \end{align} gθ⋆x=UgθUTx 其中, x ∈ R N x\in\mathbb{R}^N x∈RN 是输入(每个顶点都是一个常数,一共 N N N 个顶点)。 g θ = d i a g ( θ ) g_\theta=diag(\theta) gθ=diag(θ) 是卷积核( θ ∈ R N \theta\in\mathbb{R}^N θ∈RN) ,且为 L L L 特征值的函数,所以可以写为 g θ ( Λ ) g_\theta(\Lambda) gθ(Λ)。式(9)与式(8)是等价的。
最简单的情况,输入层为 x x x,则输出层为 U g θ U T x Ug_\theta U^Tx UgθUTx, θ \theta θ 是可训练参数。按照这种形式就可以一层一层堆叠。可以参考kipf的论文:《Semi-Supervised Classification With Graph Convolutional Networks》,ICLR,2017。
参考文献:
维基百科-Spectral graph theory ↩︎
图拉普拉斯、拉普拉斯嵌入和谱聚类的简短教程 ↩︎
维基百科-Laplacian matrix ↩︎
穆尔彭罗斯伪逆 ↩︎
注意,vertex与node,关系紧密但略有不同,每一个vertex都将以node的形式在计算机中被表示和实现。参见链接 ↩︎
维基百科-Eigenfunction ↩︎