深度学习

卷积(convolution)

/ kon-vuh-LOO-shun /

「卷积」这个词听着唬人,做的事却很简单:把一块小模板在一幅大图上滑动,每停一处,就看看底下那一小块与模板上的图案有多吻合。想象一张透明的小卡片,上面画着一道斜线。你让它在照片上滑过;凡是照片里也有斜线的地方,卡片就亮起来;其余地方则暗淡无光。把这件事滑遍整张图,你就得到一幅新图,显示出那一种图案出现在哪些位置。

说得更准一点,这块小模板叫作滤镜(或称卷积核),其实就是一个小小的数字方格,常见的是 3×3 或 5×5。在每个位置上,你把滤镜里的数字与它下面的像素值相乘,再把结果加成一个数。往旁边滑一步,重复一遍。所有这些输出数字组成的方格,就是卷积的结果,它把某一种特征——一道边缘、一团模糊、某种纹理——出现的每一处都标了出来。在深度网络里,滤镜里的数字不是由人挑的,而是在训练中学出来的,于是网络自己琢磨出哪些图案值得去检测。

有两点让卷积在处理图像时特别强大。第一,同一块滤镜在每个位置上都重复使用,于是一种图案无论出现在哪里都能被认出——这一性质叫作「平移等变性」,它意味着要学的数字比「把每个像素都连到所有东西」少得多。第二,每块滤镜只看一小片邻域,这正合「相邻的像素才构成边缘和形状」这个事实。要老实说出它的局限:卷积内置了一个假设——局部的、与位置无关的图案最要紧。这个假设对照片和声音是金科玉律,但对那些没有这种网格状邻域结构的数据,就并不合身了。

一个 3×3 的竖直边缘滤镜,左列全是 +1,中列全是 0,右列全是 −1。把它滑过一张照片,凡是左暗右亮的地方,它都会给出一个很大的数——从而标出每一条竖直边缘。

一个小小的数字方格,滑遍全图,搜寻同一种图案。

把一块小滤镜在各处重复使用,正是让卷积既省又能不分位置地认出图案的诀窍——比起普通全连接网络那样「把每个像素都接到每个神经元」,要划算得多。

又称
卷积运算卷積運算convolution operationfiltering