JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

卷积网络:用滤波器去看

网络如何通过在图像上滑动微小的模式检测器来学会「看」——以及为什么「权重共享」这一个架构想法,让深度视觉成为可能。

把图像当成一串扁平数字的麻烦

你已经认识了 多层感知机:把一层层神经元 隐藏层 叠起来,每个神经元都连到所有输入。对付几个特征时这很漂亮。但一张普通照片是 224x224 像素、3 个颜色通道——超过 15 万个输入。把它接到哪怕一层几千个神经元上,单是第一层就有上亿个 参数

更糟的是,那个全连接层把每个像素都当成与邻居毫无关系。它得分别在左上角、中间、右下角各学一遍「猫耳朵」长什么样——仿佛每个位置都是一个不同的世界。照片不是一串互相独立的数字,而是一张网格:邻近像素本就属于一起,而一个图案无论出现在哪里都是同一回事。我们想要一个事先就懂得这一点的架构。

卷积:让一个小滤波器在网格上滑动

核心想法是这样的。不要用一个巨大的层,而是取一小块权重网格——比如 3x3——称为滤波器(kernel,卷积核)。把它盖在图像左上角的 3x3 小块上,让每个滤波器权重乘以它下方的像素,再全部加成一个数。然后把滤波器向右滑动一步,重复。这种「滑动并求和」的操作就是 卷积

关键的诀窍是权重共享:同一个 3x3 滤波器在每个位置被重复使用。于是一个学会了对竖直边缘起反应的滤波器,无论边缘出现在图像何处都能检测到,仅靠九个权重就在所有地方干完了活。这正是架构如何把上一节的假设内建进来——也是它如何把参数量从上百万削减到每个滤波器区区几十个。

image patch        filter (learned)
[10 10 80]         [-1  0  1]
[10 10 80]    *    [-1  0  1]   -> one output number
[10 10 80]         [-1  0  1]

(-1*10 +0*10 +1*80) x3 rows = 210   <- big response: an edge is here
一个 3x3 滤波器相乘、求和,报出一个数;数值大就表示它要找的图案出现了。

特征图:滤波器画出它在哪里起了反应

把一个滤波器滑过整张图像,再把它所有的输出收回成一张网格。这张网格就是 特征图——它画出了这个特定滤波器在哪里、以多强的程度起了反应。一个检测边缘的滤波器产出的特征图会沿着边缘亮起来。一层不会只用一个滤波器;它会并行地用许多个(比如 64 个),于是单单一层就把一张图像变成 64 张特征图的一摞,每一张突出一种不同的图案。

每次卷积之后我们都加一个非线性,几乎总是 ReLU,它只是把负的反应清零。接着才是真正的魔法:把这些层叠起来。第一层的滤波器学到边缘和色块;第二层看着第一层的特征图,学到拐角和纹理;更深的层把这些组合成眼睛、车轮、人脸。没有人手工编写这些阶段——网络是通过 反向传播 自己发现它们的。这种层层堆叠,正是本阶段所讲的 分层表示学习,如今在图像上得以实现。

步幅、填充与池化:控制尺寸、逐步拉远

有两个旋钮控制滤波器如何扫过网格,合称 步幅与填充步幅是滤波器每步跳多远:步幅 1 走遍每个位置;步幅 2 隔一个跳一个,把输出的宽和高都减半。填充在图像四周补一圈零,好让滤波器能够触及最边缘——若没有它,每次卷积都会让特征图缩小一点,而角落的像素也会被算得不够。

要有意识地拉远,我们用 池化。最常见的最大池化,滑动一个小窗口(常是 2x2),只保留每个窗口里最大的那个值,其余的统统丢掉。这把特征图缩小一半,并带来一点有用的容忍度:如果被检测的图案挪动了一两个像素,池化后的输出几乎不变。一层接一层,空间网格变得越来越粗,而特征图的数量却增长——网络用「具体在哪里」换取了「大致是什么」。

  1. 开始:一张 224x224、带 3 个颜色通道的图像。
  2. 用 64 个滤波器卷积 + ReLU -> 64 张特征图,每张 224x224,全都共享微小的权重。
  3. 2x2 池化 -> 仍是 64 张图,但变成 112x112:分辨率减半,略能容忍位移。
  4. 重复,更深的层在更粗的网格上用更多滤波器,直到最后一个分类器读出答案。

为什么它契合图像——以及炒作在哪里跑过了头

现在各块拼合到了一起。网格形状的输入,配上网格形状的处理,恰到好处。权重共享,对应着「猫的胡须不管长在哪里看起来都一样」这个事实。局部滤波器,尊重了「含义寄居于像素邻域之中」。池化,赋予了对小位移的一点容忍。这些礼物合在一起,让一个 卷积神经网络 能以比全连接网络少几个数量级的参数,达到强大的 图像分类——这正是为什么 CNN 在 2012 年前后点燃了视觉上的深度学习时代。

对它的局限要诚实。「用滤波器去看」是个比喻:CNN 匹配的是统计图案,它并不理解一个场景。它可能被你肉眼看不见、却经精心设计的微小像素扰动骗到,而且它常常抓住的是背景纹理,而非你真正在意的物体。它对位移的容忍是温和而局部的——把物体大幅旋转或缩放,它就可能失败,除非你用这类变化训练过它。卷积这种归纳偏置是个有用的默认设定,而非定律:用注意力替代固定局部滤波器的视觉 Transformer,如今在数据充足时已能与 CNN 打平甚至胜出。