卷积神经网络快速傅里叶变换

数据挖掘 机器学习 神经网络 卷积神经网络
2021-09-23 02:34:36

我读过一些卷积实现使用 FFT 来计算输出特征/激活图,我想知道它们是如何相关的。我熟悉应用 CNN,并且(稍微)熟悉 FFT 在信号处理中的使用,但我不确定两者如何协同工作

当我想到卷积时,我想象取一个内核,翻转它,将内核的元素与重叠输入相乘(和相加),移动内核并重复该过程。FFT 如何适应这个过程?

1个回答

通过将信号和内核张量都转换为频率空间,卷积变成了单元素乘法,没有移位或重复。

因此,您可以使用 FFT 将数据和内核转换为频率,将它们相乘一次,然后使用逆 FFT 转换回来。有一些关于首先对齐数据并纠正转换引起的增益的细节。

如果你有一个好的 FFT 库,这可能非常有效,但运行傅里叶变换及其逆变换会产生开销,因此在值得研究 FFT 之前,你的卷积需要相对较大。

不久前,我在一个名为 convolver 的 Ruby gem中对此进行了探索。您可以在此处查看基于 FFT 的卷积的一些代码,该项目包括单元测试,证明直接卷积与基于 FFT 的卷积获得相同的数值结果。还有一些代码试图估计何时通过重复乘法直接计算卷积或使用基于 FFT 的解决方案更有效(尽管这是粗略且现成的猜测,并且取决于实现)。