卷积神经网络中的“卷积”
卷积神经网络(aka CNN)近年来可谓是出尽了风头。自2012年AlexNet诞生以来,CNN不仅在计算机视觉领域以摧枯拉朽之势横扫了传统方法,也在自然语言处理领域大放异彩[1]. 最近还有研究人员将CNN应用在非欧空间的数据(non-Euclidean data)上[2].
最初我是从template matching的角度理解CNN。把卷积核(aka kernel,filter)看做一个可训练的特征模板,然后在图像的各个位置上match这个模板。输出的feature map标识着图像的哪个位置上出现了这样的特征。
然而作为一只EE狗,我对卷积这个词还是很敏感的。本着温故而知新的原则,我复习了一下信号处理的知识,希望从信号处理的角度重新理解一下CNN。
话还要从傅里叶变换说起。
傅里叶变换
简单地讲,我们可以将任意一个信号(波)看作很多个不同频率的正弦波加权叠加的结果。每个频率会对应一个权值,这个频率到权值的映射就是这个信号在频域的representation。傅里叶变换就是将一个的信号的时域representation转换到它的频域representation的操作。
滤波器
在信号处理的过程中,有时我们希望消除或者保留信号中某一些频率的影响。比如在音频信号处理中,我们想把高频的噪音过滤掉。这种操作在频域很简单,我们只需要构造一个频域上的函数,这个函数在我们希望保留的频率上的值为1,其余的值都为0。我们将这个构造的函数与原来信号的频域函数相乘,得到的就是滤波之后的信号的频域函数。但是这样一个操作,如何在时域上做呢?
卷积与卷积定理
数学上,卷积是这样定义的:
自然语言描述起来就是先把函数
卷积定理告诉我们,两个信号在频域的乘积相当于他们在时域的卷积. 严格的数学证明就不讲了,但是我们可以简单的验证一下。我们把函数
其中
所以
类比CNN
我们知道了卷积就是把一个函数翻转平移再和另外一个函数求内积(
应用
通过卷积定理我们知道,定义一个filter,我们既可以在时域定义(or spatial),也可以在频域定义(or spectral)。对于图像、语音这种数据,时域上的filter是很好定义的;但是对于图(graph),流型(manifold)这种非欧式空间上的数据,我们很难定义一个spatial filter。这时我们可以直接定义一个spectral filter,通过傅里叶变化,实现卷积。从而,CNN也可以应用在这些非欧数据上了。[2]比较详尽地介绍了这方面的知识。
[1] Convolutional Sequence to Sequence Learning. Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, Yann N. Dauphin. arXiv, 2017
[2] Geometric deep learning: going beyond Euclidean data Michael M. Bronstein, Joan Bruna, Yann LeCun, Arthur Szlam, Pierre Vandergheynst