Fourier Transform and CNN
傅里叶变换与坐标变换
二维坐标系下的一条曲线$f(t)$,可以用无穷个坐标$(t_i,y_i)$表示。若将无穷个纵坐标融合为一个无穷维的坐标对$(y_1,...,y_n)$,那么二维下的一条曲线,便可以表示为无穷维度下的一个点$(y_1,...,y_n)$。更进一步地,可以将这个点视为一个向量$\vec{f}$。
横坐标$t$为基向量。
向量各分量的值是与空间的基向量直接相关的,其在基向量$\vec{d} _n$上投影的值实际上就是其在相应基向量上的坐标值:
$$
u_n=|\vec{f}|\cos\theta_n
$$
不过,更为有用的是投影向量,因此,一般再将上式乘以基向量得到投影向量:
$$
\begin{align*}
\vec{u} _n
&=|\vec{f}|\vec{d}_n\cos\theta_n\\
&=|\vec{f}||\vec{d}_n|\cos\theta _n\frac{\vec{d}_n}{|\vec{d}_n|}\\
&=<\vec{f},\vec{d}_n>\cdot\vec{d}_n
\end{align*}
$$
$<\vec{f},\vec{d}_n>$是两向量的内积,向量间存在内积的无穷维空间称希尔伯特空间,它是欧几里得空间的拓展。
向量的内积可以表示为向量坐标的乘积和,于是,上式可变为:
$$
\vec{u}_n=\int _{-\infty} ^{+\infty}f(t)d_n(t)\text{d}t\cdot\vec{d}_n
$$
式中,$\int _{-\infty} ^{+\infty}f(t)d_n(t)\text{d}t$是投影长,即特征值;$\vec{d}_n$是一组基向量中的任意一个,代表一种模式或特征。
不同的$(d_1,...,d_n)$代表一组不同的基向量,而上述操作则是对原基向量下的$f(t)$进行了一次坐标变换。若取基向量为$e^{i\omega t}$,则上式的特征值便可转变为一次傅里叶变换:
$$
F(\omega)=\int _{-\infty} ^{+\infty}f(t)e ^{-i\omega t}\text{d}t=<\vec{f},\vec{d}_\omega>
$$
$e ^{i\omega t}$取共轭是因为它是复数。
将投影向量相加可重新得到原向量,也即傅里叶逆变换:
$$
\begin{align*}
\vec{f}
&=\sum F(w)\cdot\frac{\vec{d}_{\omega}}{|\vec{d} _{\omega}|}\\
&=\frac{1}{2\pi}\int _{-\infty} ^{+\infty}F(\omega)e ^{i\omega t}\text{d}\omega
\end{align*}
$$
$|\vec{d} _\omega|=|e ^{i\omega t}|=\frac{2\pi}{\Delta\omega}$
不难看出,傅里叶变换实际上是将希尔伯特空间上的向量$f$投影到了新的一组基向量$e ^{i\omega t}$上。其在原基向量上对应的二维曲线即为原曲线,如Fig 1所示。在新的基向量上也存在对应的二维曲线,如Fig 2所示。从Fig 1到Fig 2,相当于将原向量做了如Fig 3所示的旋转。
加窗傅里叶变换
傅里叶变换会考虑曲线全局的信息,但是对于卷积神经网络,只考虑局部信息反而能达到更好的效果。傅里叶变换的基向量$e ^{i\omega t}$是希尔伯特空间里的一个向量,因此它也有对应的二维曲线,这实际体现为一个正弦波形:
加窗傅里叶变换通过抹平某个区域以外的基向量曲线来达到只考虑局部特征的目的:
$$
F(\omega)=\int _{-\infty} ^{+\infty}f(t)g(t-s)e ^{-i\omega t}\text{d}t
$$
式中$g(t-s)$称窗函数,不同的窗函数可以得到不同的变换、提取不同的特征,$s$表当前窗口的位置,是个变量。
有了窗函数,变换域(频域)的曲线就必须以三维的方式表示。此时,重复的局部信息不会再影响频域轴的曲线,而是在窗口位置轴$s$中体现,如下图Fig 6和Fig 7所示。
CNN与加窗傅里叶
卷积神经网络的卷积实际上就是一种加窗傅里叶变换。原图片相当于$\vec{f}$,卷积过程中像素点的移动相当于窗口$s$的移动,而卷积核的大小、值则共同充当着窗函数和基向量。卷积(实际是加窗傅里叶变换)将像素点周边的局部特征通过像素值的线性组合标定为一种模式。后续的全连接神经网络为不同卷积核识别出的不同模式赋予不同的权重,最终组合出最有可能的模式。