1 前言
在之前的文章中(图上的傅里叶变换),已经顺利的从传统的傅里叶变换过渡到了图上的傅里叶变换,这样使得离散的图数据能够进行卷积操作。本节主要阐述如何如何从图的傅里叶变换到图卷积。
本文为自学的记录,其中多有借鉴他人的地方,一并在参考文献中给出链接。
2 卷积定理及卷积操作的意义
2.1 卷积的意义
卷积主要有三个含义(强烈推荐参考文献【1】的视频讲解):
- 对于一个系统,如果输入是不稳定的,输出是稳定的,那么卷积操作可以求出系统的存量。
- 在图像处理中,一个卷积核就是规定了周围像素点对当前像素点的产生的影响。
- 在卷积神经网络的图像预处理中,一个过滤器的卷积核就是规定了,一个像素点会如何对周围像素点的试探,如何筛选图像的特征。
2.2 卷积定理
卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数
f
f
f与
g
g
g两者的卷积是其函数傅立叶变换乘积的逆变换(中间的桥梁就是傅立叶变换与反傅立叶变换 证明点击这里):
f
∗
g
=
F
−
1
{
F
(
f
)
⋅
F
(
g
)
}
=
F
−
1
{
f
^
⋅
g
^
}
\mathrm{f} * \mathrm{~g}=\mathcal{F}^{-1}\{\mathcal{F}(\mathrm{f}) \cdot \mathcal{F}(\mathrm{g})\}=\mathcal{F}^{-1}\{\hat{\mathrm{f}} \cdot \hat{\mathrm{g}}\}
f∗ g=F−1{F(f)⋅F(g)}=F−1{f^⋅g^}
那么重点来了类比传统卷积的定义,我们将卷积定义到图上并且带入傅里叶变换,则 f f f 与卷积核 g g g 在图上的卷积可以做如下定义:
f f f 的图傅里叶变换为 f ^ = U T f \hat f = U^Tf f^=UTf
卷积核 g g g 的图傅里叶变换为 g ^ = U T g \hat g = U^Tg g^=UTg
注意:卷积核 g g g不是先天有的而是根据需要设计的,可以类比图像中的卷积核设计。也就是说 g g g在这是是假设的需要后期根据训练进行学习,这里 U T U^T UT的意思也是对定义的 g g g进行变换。
3 图(graph)卷积
有了上面的基础之后,我们来定义图卷积的公式:
x
⋆
G
g
=
F
−
1
(
F
(
f
)
⊙
F
(
g
)
)
=
U
(
U
T
f
⊙
U
T
g
)
\begin{aligned} x \star_{G} g &=\mathcal{F}^{-1}(\mathcal{F}(f) \odot \mathcal{F}(g)) \\ &=U\left(U^{T} f \odot U^{T} g\right) \end{aligned}
x⋆Gg=F−1(F(f)⊙F(g))=U(UTf⊙UTg)
⊙ \odot ⊙ 表示哈达玛积(对于两个维度相同的向量、矩阵、张量进行对应位置的逐元素乘积运算,这里是不是有点卷积核的感觉了)
将上面的公式重新整理推导为更一般的方式:
x
⋆
G
g
θ
=
U
(
(
U
T
f
)
⊙
(
U
T
g
)
)
=
U
(
f
^
(
λ
1
)
f
^
(
λ
2
)
⋮
f
^
(
λ
n
)
)
⊙
(
g
^
(
λ
1
)
g
^
(
λ
2
)
⋮
g
^
(
λ
n
)
)
=
U
(
g
^
(
λ
1
)
f
^
(
λ
1
)
g
^
(
λ
2
)
f
^
(
λ
2
)
⋮
g
^
(
λ
n
)
f
^
(
λ
n
)
)
=
U
(
g
^
(
λ
1
)
⋱
g
^
(
λ
n
)
)
(
f
^
(
λ
1
)
f
^
(
λ
2
)
⋮
f
^
(
λ
n
)
)
=
U
(
g
^
(
λ
1
)
⋱
g
^
(
λ
n
)
)
U
T
f
\begin{array}{l} \mathrm{x} \star_{\mathrm{G}} \mathrm{g}_{\theta}=\mathrm{U}\left(\left(\mathrm{U}^{\mathrm{T}} \mathrm{f}\right) \odot\left(\mathrm{U}^{\mathrm{T}} \mathrm{g}\right)\right)\\[5mm] =\mathrm{U}\left(\begin{array}{c} \hat{\mathrm{f}}\left(\lambda_{1}\right) \\ \hat{\mathrm{f}}\left(\lambda_{2}\right) \\ \vdots \\ \hat{\mathrm{f}}\left(\lambda_{\mathrm{n}}\right) \end{array}\right) \odot\left(\begin{array}{c} \hat{\mathrm{g}}\left(\lambda_{1}\right) \\ \hat{\mathrm{g}}\left(\lambda_{2}\right) \\ \vdots \\ \hat{\mathrm{g}}\left(\lambda_{n}\right) \end{array}\right)\\[12mm] =U\left(\begin{array}{c} \hat{\mathrm{g}}\left(\lambda_{1}\right) \hat{\mathrm{f}}\left(\lambda_{1}\right) \\ \hat{\mathrm{g}}\left(\lambda_{2}\right) \hat{\mathrm{f}}\left(\lambda_{2}\right) \\ \vdots \\ \hat{\mathrm{g}}\left(\lambda_{\mathrm{n}}\right) \hat{\mathrm{f}}\left(\lambda_{\mathrm{n}}\right) \end{array}\right)\\[10mm] =\mathrm{U}\left(\begin{array}{ccc} \hat{\mathrm{g}}\left(\lambda_{1}\right) & & \\ & \ddots & \\ & & \hat{\mathrm{g}}\left(\lambda_{\mathrm{n}}\right) \end{array}\right)\left(\begin{array}{c} \hat{\mathrm{f}}\left(\lambda_{1}\right) \\ \hat{\mathrm{f}}\left(\lambda_{2}\right) \\ \vdots \\ \hat{\mathrm{f}}\left(\lambda_{\mathrm{n}}\right) \end{array}\right)\\[10mm] =\mathrm{U}\left(\begin{array}{ccc} \hat{\mathrm{g}}\left(\lambda_{1}\right) & & \\ & \ddots & \\ & & \hat{\mathrm{g}}\left(\lambda_{\mathrm{n}}\right) \end{array}\right) \mathrm{U}^{\mathrm{T}} \mathrm{f} \end{array}
x⋆Ggθ=U((UTf)⊙(UTg))=U
f^(λ1)f^(λ2)⋮f^(λn)
⊙
g^(λ1)g^(λ2)⋮g^(λn)
=U
g^(λ1)f^(λ1)g^(λ2)f^(λ2)⋮g^(λn)f^(λn)
=U
g^(λ1)⋱g^(λn)
f^(λ1)f^(λ2)⋮f^(λn)
=U
g^(λ1)⋱g^(λn)
UTf
上述推导的更详细见参考文献【4】
上面就是谱域图卷积最终的公式,所有的谱域图卷积的原理就是这个公式,只是对滤波器 g ^ \hat{g} g^做了不同的处理。这个公式的意义是:卷积核信号(或者说滤波器信号 g ^ \hat{g} g^是一个n维的向量,它的作用是将原信号的不同的分量进行一个放大或者缩小,这取决于卷积核信号在谱域上不同元素的值。
4 总结
5 参考文献
[1]【王木头学科学|深度学习】1. 什么是卷积?卷积的3个意义。卷积、图像卷积操作、卷积神经网络
[2]【图机器学习】图神经网络入门(二)图上的傅里叶变换
[3]图卷积神经网络1-谱域图卷积:拉普拉斯变换到谱域图卷积
[4]GCN中的等式证明
[5]图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导