卷积神经网络中的“卷积”

时间:2022-11-16 16:05:45

卷积神经网络中的“卷积”

卷积神经网络(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。我们将这个构造的函数与原来信号的频域函数相乘,得到的就是滤波之后的信号的频域函数。但是这样一个操作,如何在时域上做呢?

卷积与卷积定理

数学上,卷积是这样定义的:

f(x)g(x)=f(τ)g(xτ)dτ

自然语言描述起来就是先把函数 g 沿y轴翻转再平移x距离,得到的新函数就是 g(xτ) . 把这个新函数与原来 f 相乘,求积分。因此每一个平移的距离x会对应一个积分值,那么得到一个关于平移距离x的函数。

卷积定理告诉我们,两个信号在频域的乘积相当于他们在时域的卷积. 严格的数学证明就不讲了,但是我们可以简单的验证一下。我们把函数 f 看作原始的时域信号,函数 g 看成滤波器。我们先假设这个滤波器只想保留一个 f ω 这个频率的分量。那么 g(x) 就是一个频率为 ω 的正弦函数。然后这个正弦函数与f分解出来的其他正弦函数相乘求积分。还记得积化和差公式吗?

sin(α)sin(β)=12[sin(α+β)+sin(αβ)]

其中 α=ω1x+r1,β=ω2x+r2 .
所以 sin(α+β)=sin((ω1+ω2)x+r1+r2) 的积分一定是0, sin(α+β)=sin((ω1ω2)x+r1r2) 仅当 ω1=ω2 的时候不为0。于是 f 中频率不为 ω 的分量,都在这个操作中消失了(被滤掉了)。

类比CNN

我们知道了卷积就是把一个函数翻转平移再和另外一个函数求内积( f(x)g(x)=f(x)g(x)dx )的操作。CNN是这样干的吗?是的。只不过CNN中没有将filter翻转,但是filter都是trainable的weight,翻转也没有意义。所以这个操作叫做“卷积”也是合理的喽。那么CNN训练出来的weight其实是一个个滤波器(所以叫filter).

应用

通过卷积定理我们知道,定义一个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