在谱域GNN中,傅里叶变换是一种将图信号从空域转换到频域的方法,利用图的拉普拉斯矩阵的特征向量和特征值作为基函数和频率。具体来说,对于一个定义在图上的信号
f
:
V
→
R
f: V \rightarrow \mathbb{R}
f:V→R,它可以被表示为一个向量
f
∈
R
N
f \in \mathbb{R}^N
f∈RN ,其中 N 是图的节点数。图傅里叶变换的定义如下:
F
(
f
)
=
U
⊤
f
\mathcal{F}(f) = U^\top f
F(f)=U⊤f
其中 U 是图的拉普拉斯矩阵 L 的特征向量矩阵,即
L
=
U
Λ
U
⊤
L = U\Lambda U^\top
L=UΛU⊤
,
Λ
\Lambda
Λ是对角矩阵,其对角元素是 L 的特征值。图傅里叶变换的结果是一个向量
f
^
∈
R
N
\hat{f} \in \mathbb{R}^N
f^∈RN
,其第 i 个元素表示 f 在第 i 个频率上的系数,即
f
^
i
=
u
i
⊤
f
\hat{f}_i = u_i^\top f
f^i=ui⊤f
,其中
u
i
u_i
ui 是 U 的第 i 列。
图傅里叶变换的逆变换定义如下:
F
−
1
(
f
^
)
=
U
f
^
\mathcal{F}^{-1}(\hat{f}) = U\hat{f}
F−1(f^)=Uf^
这样就可以将频域信号转换回空域信号。
在谱域GNN中,傅里叶变换可以用来实现图卷积操作,即将空域信号和卷积核转换到频域,然后在频域中相乘,再通过逆傅里叶变换转换回空域。例如,GCN 中的图卷积可以表示为:
x
∗
g
θ
=
U
g
θ
U
⊤
x
x * g_\theta = U g_\theta U^\top x
x∗gθ=UgθU⊤x
其中 x 是输入信号,$ g_\theta $是卷积核参数,U 是拉普拉斯矩阵的特征向量矩阵
带数据的具体例子
好的,我来给您举一个具体的例子,说明在谱域GNN中是如何实现傅里叶变换的。
假设我们有一个简单的无向图,其中,V = {a, b, c, d} 是图的节点集合,E = {(a, b), (b, c), (c, d), (d, a)} 是图的边集合。我们可以用一个邻接矩阵 A 来表示图的结构,如下所示:
A
=
[
0
1
0
1
1
0
1
0
0
1
0
1
1
0
1
0
]
A = \begin{bmatrix} 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \\ 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \end{bmatrix}
A=
0101101001011010
我们还可以定义一个度矩阵 D,其对角元素是每个节点的度数,即与之相连的边的个数,如下所示:
D
=
[
2
0
0
0
0
2
0
0
0
0
2
0
0
0
0
2
]
D = \begin{bmatrix} 2 & 0 & 0 & 0 \\ 0 & 2 & 0 & 0 \\ 0 & 0 & 2 & 0 \\ 0 & 0 & 0 & 2 \end{bmatrix}
D=
2000020000200002
那么,图的拉普拉斯矩阵 L 可以定义为 L = D - A,(这里没有进行归一化,如果要进行归一化可以写成
L
=
D
−
1
2
(
D
−
A
)
D
−
1
2
L = D^{-\frac{1}{2}}(D - A)D^{-\frac{1}{2}}
L=D−21(D−A)D−21)即:
L
=
[
2
−
1
0
−
1
−
1
2
−
1
0
0
−
1
2
−
1
−
1
0
−
1
2
]
L = \begin{bmatrix} 2 & -1 & 0 & -1 \\ -1 & 2 & -1 & 0 \\ 0 & -1 & 2 & -1 \\ -1 & 0 & -1 & 2 \end{bmatrix}
L=
2−10−1−12−100−12−1−10−12
我们可以计算 L 的特征值和特征向量,得到:
Λ
=
[
−
2.2204
e
−
16
−
4.0000
−
4.0000
−
4.0000
]
\Lambda = \begin{bmatrix} -2.2204e-16 &&&& \\ &&& -4.0000 && \\ &&&& -4.0000 \\ &&& && -4.0000 \end{bmatrix}
Λ=
−2.2204e−16−4.0000−4.0000−4.0000
U = [ − 5.0000 e − 01 − 7.0711 e − 01 − 5.0000 e − 01 − 5.0000 e − 01 − 5.0000 e − 01 − 7.0711 e − 01 + 5.0000 e − 01 + 5.0000 e − 01 − 5.0000 e − 01 + 7.0711 e − 01 + 5.0000 e − 01 − 5.0000 e − 01 − 5.0000 e − 01 + 7.0711 e − 01 − 5.0000 e − 01 + 5.0000 e − 01 ] U = \begin{bmatrix} -5.0000e-01 &&& -7.0711e-01 &&& -5.0000e-01 &&& -5.0000e-01 \\ -5.0000e-01 &&& -7.0711e-01 &&& +5.0000e-01 &&& +5.0000e-01 \\ -5.0000e-01 &&& +7.0711e-01 &&& +5.0000e-01 &&& -5.0000e-01 \\ -5.0000e-01 &&& +7.0711e-01 &&& -5.0000e-01 &&& +5.0000e-01 \end{bmatrix} U= −5.0000e−01−5.0000e−01−5.0000e−01−5.0000e−01−7.0711e−01−7.0711e−01+7.0711e−01+7.0711e−01−5.0000e−01+5.0000e−01+5.0000e−01−5.0000e−01−5.0000e−01+5.0000e−01−5.0000e−01+5.0000e−01
其中, Λ \Lambda Λ的对角元素是 L L L 的特征值, U U U的每一列是对应特征值的特征向量。注意,这里我们假设 L L L 是对称矩阵,因此它有实数特征值和正交特征向量。
现在,假设我们有一个定义在图上的信号
f
:
V
→
R
f: V \rightarrow \mathbb{R}
f:V→R,它可以被表示为一个向量
f
∈
R
N
f \in \mathbb{R}^N
f∈RN,其中
N
N
N是图的节点数。例如,我们可以定义
f
f
f 如下:
f
=
[
f
(
a
)
f
(
b
)
f
(
c
)
f
(
d
)
]
=
[
+
3
+
2
+
4
+
6
]
f = \begin{bmatrix} f(a) \\ f(b) \\ f(c) \\ f(d) \end{bmatrix} = \begin{bmatrix} +3 \\ +2 \\ +4 \\ +6 \end{bmatrix}
f=
f(a)f(b)f(c)f(d)
=
+3+2+4+6
这意味着节点 a 的信号值是 +3,节点 b 的信号值是 +2,以此类推。
要计算 f 的图傅里叶变换,我们只需要将 $ f
和
和
和 U $的转置相乘,即:
F
(
f
)
=
U
⊤
f
=
[
−
5.0000
e
−
01
−
5.0000
e
−
01
−
5.0000
e
−
01
−
5.0000
e
−
01
−
7.0711
e
−
01
−
7.0711
e
−
01
+
7.0711
e
−
01
+
7.0711
e
−
01
−
5.0000
e
−
01
+
5.0000
e
−
01
+
5.0000
e
−
01
−
5.0000
e
−
01
−
5.0000
e
−
01
+
5.0000
e
−
01
−
5.0000
e
−
01
+
5.0000
e
−
01
]
[
+
3
+
2
+
4
+
6
]
=
[
+
3.7500
−
2.8284
−
1.5000
−
1.5000
]
\mathcal{F}(f) = U^\top f = \begin{bmatrix} -5.0000e-01 &&& -5.0000e-01 &&& -5.0000e-01 &&& -5.0000e-01 \\ -7.0711e-01 &&& -7.0711e-01 &&& +7.0711e-01 &&& +7.0711e-01 \\ -5.0000e-01 &&& +5.0000e-01 &&& +5.0000e-01 &&& -5.0000e-01 \\ -5.0000e-01 &&& +5.0000e-01 &&& -5.0000e-01 &&& +5.0000e-01 \end{bmatrix} \begin{bmatrix} +3 \\ +2 \\ +4 \\ +6 \end{bmatrix} = \begin{bmatrix} +3.7500 \\ -2.8284 \\ -1.5000 \\ -1.5000 \end{bmatrix}
F(f)=U⊤f=
−5.0000e−01−7.0711e−01−5.0000e−01−5.0000e−01−5.0000e−01−7.0711e−01+5.0000e−01+5.0000e−01−5.0000e−01+7.0711e−01+5.0000e−01−5.0000e−01−5.0000e−01+7.0711e−01−5.0000e−01+5.0000e−01
+3+2+4+6
=
+3.7500−2.8284−1.5000−1.5000
这样,我们就得到了
f
f
f在频域的表示
f
^
\hat{f}
f^,其第
i
i
i个元素表示
f
f
f在第
i
i
i个频率上的系数,即
f
^
i
=
u
i
⊤
f
\hat{f}_i = u_i^\top f
f^i=ui⊤f,其中
u
i
u_i
ui是
U
U
U的第
i
i
i列。例如,
f
^
1
=
u
1
⊤
f
=
(
−
5.0000
e
−
01
)
(
+
3
)
+
(
−
5.0000
e
−
01
)
(
+
2
)
+
(
−
5.0000
e
−
01
)
(
+
4
)
+
(
−
5.0000
e
−
01
)
(
+
6
)
=
+
3.7500
\hat{f}_1 = u_1^\top f = (-5.0000e-01)(+3) + (-5.0000e-01)(+2) + (-5.0000e-01)(+4) + (-5.0000e-01)(+6) = +3.7500
f^1=u1⊤f=(−5.0000e−01)(+3)+(−5.0000e−01)(+2)+(−5.0000e−01)(+4)+(−5.0000e−01)(+6)=+3.7500
表示
f
f
f在最低频率(特征值为 -2.2204e-16)上的系数是 +3.7500。
要计算
f
f
f的图傅里叶逆变换,我们只需要将
f
^
\hat{f}
f^和 U 相乘,即:
F
−
1
(
f
^
)
=
U
f
^
=
[
−
5.0000
e
−
01
−
7.0711
e
−
01
−
5.0000
e
−
01
−
5.0000
e
−
01
−
5.0000
e
−
01
−
7.0711
e
−
01
+
5.0000
e
−
01
+
5.0000
e
−
01
−
5.0000
e
−
01
+
7.0711
e
−
01
+
5.0000
e
−
01
−
5.0000
e
−
01
−
5.0000
e
−
01
+
7.0711
e
−
01
−
5.0000
e
−
01
+
5.0000
e
−
01
]
[
+
3.7500
−
2.8284
−
1.5000
−
1.5000
]
=
[
+
3
+
2
+
4
+
6
]
\mathcal{F}^{-1}(\hat{f}) = U\hat{f} = \begin{bmatrix} -5.0000e-01 &&& -7.0711e-01 &&& -5.0000e-01 &&& -5.0000e-01 \\ -5.0000e-01 &&& -7.0711e-01 &&& +5.0000e-01 &&& +5.0000e-01 \\ -5.0000e-01 &&& +7.0711e-01 &&& +5.0000e-01 &&& -5.0000e-01 \\ -5.0000e-01 &&& +7.0711e-01 &&& -5.0000e-01 &&& +5.0000e-01 \end{bmatrix} \begin{bmatrix} +3.7500 \\ -2.8284 \\ -1.5000 \\ -1.5000 \end{bmatrix} = \begin{bmatrix} +3 \\ +2 \\ +4 \\ +6 \end{bmatrix}
F−1(f^)=Uf^=
−5.0000e−01−5.0000e−01−5.0000e−01−5.0000e−01−7.0711e−01−7.0711e−01+7.0711e−01+7.0711e−01−5.0000e−01+5.0000e−01+5.0000e−01−5.0000e−01−5.0000e−01+5.0000e−01−5.0000e−01+5.0000e−01
+3.7500−2.8284−1.5000−1.5000
=
+3+2+4+6
这样,我们就得到了
f
f
f的空域表示
f
f
f,它和原始信号完全一致