谱域GNN傅里叶变换计算

在谱域GNN中,傅里叶变换是一种将图信号从空域转换到频域的方法,利用图的拉普拉斯矩阵的特征向量特征值作为基函数频率。具体来说,对于一个定义在图上的信号 f : V → R f: V \rightarrow \mathbb{R} f:VR,它可以被表示为一个向量 f ∈ R N f \in \mathbb{R}^N fRN ,其中 N 是图的节点数。图傅里叶变换的定义如下:
F ( f ) = U ⊤ f \mathcal{F}(f) = U^\top f F(f)=Uf
其中 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=uif
,其中 u i u_i ui 是 U 的第 i 列。

图傅里叶变换的逆变换定义如下:
F − 1 ( f ^ ) = U f ^ \mathcal{F}^{-1}(\hat{f}) = U\hat{f} F1(f^)=Uf^
这样就可以将频域信号转换回空域信号。

在谱域GNN中,傅里叶变换可以用来实现图卷积操作,即将空域信号和卷积核转换到频域,然后在频域中相乘,再通过逆傅里叶变换转换回空域。例如,GCN 中的图卷积可以表示为:
x ∗ g θ = U g θ U ⊤ x x * g_\theta = U g_\theta U^\top x xgθ=UgθUx
其中 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=D21(DA)D21)即:
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= 2101121001211012
我们可以计算 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.2204e164.00004.00004.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.0000e015.0000e015.0000e015.0000e017.0711e017.0711e01+7.0711e01+7.0711e015.0000e01+5.0000e01+5.0000e015.0000e015.0000e01+5.0000e015.0000e01+5.0000e01

其中, Λ \Lambda Λ的对角元素是 L L L 的特征值, U U U的每一列是对应特征值的特征向量。注意,这里我们假设 L L L 是对称矩阵,因此它有实数特征值和正交特征向量。

现在,假设我们有一个定义在图上的信号 f : V → R f: V \rightarrow \mathbb{R} f:VR,它可以被表示为一个向量 f ∈ R N f \in \mathbb{R}^N fRN,其中 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)=Uf= 5.0000e017.0711e015.0000e015.0000e015.0000e017.0711e01+5.0000e01+5.0000e015.0000e01+7.0711e01+5.0000e015.0000e015.0000e01+7.0711e015.0000e01+5.0000e01 +3+2+4+6 = +3.75002.82841.50001.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=uif,其中 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=u1f=(5.0000e01)(+3)+(5.0000e01)(+2)+(5.0000e01)(+4)+(5.0000e01)(+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} F1(f^)=Uf^= 5.0000e015.0000e015.0000e015.0000e017.0711e017.0711e01+7.0711e01+7.0711e015.0000e01+5.0000e01+5.0000e015.0000e015.0000e01+5.0000e015.0000e01+5.0000e01 +3.75002.82841.50001.5000 = +3+2+4+6
这样,我们就得到了 f f f的空域表示 f f f,它和原始信号完全一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值