傅立叶变换能干啥

借用维基百科的说法,傅里叶变换(Fourier Transform, FT)会将一个在空域(或时域)上定义的函数分解成频域上的若干频率成分。换句话说,傅里叶变换可以将一个函数从空域变到频域。先抛开傅里叶变换的数学公式不谈,用 𝐹F 来表示傅里叶变换的话,我们先讲一个很重要的恒等式:

 

 

(𝑓𝑔)(𝑡)=𝐹1[𝐹[𝑓(𝑡)]𝐹[𝑔(𝑡)]](f∗g)(t)=F−1[F[f(t)]⊙F[g(t)]]

 

这里的𝐹1F−1指的是傅里叶逆变换,⊙是哈达玛乘积,指的是两个矩阵(或向量)的逐点乘积(Element-wise Multiplication)。仔细观察上面这个公式,它的直观含义可以用一句话来概括:空(时)域卷积等于频域乘积。简单来说就是,如果要算 𝑓f 与 𝑔g 的卷积,可以先将它们通过傅里叶变换变换到频域中,将两个函数在频域中相乘,然后再通过傅里叶逆变换转换出来,就可以得到 𝑓f 与 𝑔g 的卷积结果。下面的动图形象地展示了傅里叶变换的过程,这里我们把函数 𝑓f 傅里叶变换后的结果写作 𝑓̂f^.

 

 

那傅里叶变换能干啥呢,有一个简单的应用是给图像去除一些规律噪点。比如说下面这个例子,原图来自知乎 [13]。

在傅里叶变换前,图像上有一些规律的条纹,直接在原图上去掉条纹有点困难,但我们可以将图片通过傅里叶变换变到频谱图中,频谱图中那些规律的点就是原图中的背景条纹。

傅里叶变换的示例

只要在频谱图中擦除这些点,就可以将背景条纹去掉,得到下图右侧的结果。

傅里叶变换的示例

除了可以用来分离噪声点与正常点,傅里叶变换还凭借上面的恒等式,在加速卷积运算方面有很大的潜力,快速傅里叶变换(Fast Fourier Transform)也是由此而生。实际上呢,现在大家最常用的卷积神经网络,完全可以搭配傅里叶变换。下面这张图就表示了一个普通的卷积神经网络如何与傅里叶变换搭配,其中的 IFFT 即 快速傅里叶变换的逆变换(Inverse Fast Fourier Transform:

傅里叶变换的示例

其实笔者在初识傅里叶变换时很好奇,既然FFT可以加速卷积神经网络,为什么现在的卷积神经网络不用呢? 在经过一些搜索与思考后,笔者将自己得到的结论抛砖引玉供读者参考:我们现在的卷积神经网络的核都很小,常见的都如1,3,5之类,卷积操作的时间开销本来就不大。如果要搭配FFT,还需要做傅里叶变换与逆变换,时间开销并不一定会减小。

 参考:https://github.com/SivilTaram/Graph-Neural-Network-Note

posted @ 2021-08-25 17:28  小筱痕  阅读(752)  评论(0)    收藏  举报