在大屏或电脑上体验更佳——动画和操作区域更宽敞。
输入

卷积神经网络

卷积神经网络(CNN)让一个小权重网格在图像上滑动,计算每个局部区域对模式的响应。这个网格称为滤波器。同一组权重在各位置复用,所以参数少,也能在不同位置检测相同特征。

可以把滤波器看作模板:每次移到一个窗口,问“这里是否符合这个模式?”不需要为每个位置制作新模板。

卷积、ReLU 与池化

将 3×3 图像块与滤波器逐元素相乘,再把九项相加,得到特征图的一个值。向右移一步,行末换行。这里不让滤波器越出图像,使用 valid 方式,因此 6×6 输入得到 4×4 特征图。16 个位置共享九个权重。深度学习通常把这种不翻转滤波器的互相关也称作卷积。

响应可以为负。例如检测亮到暗的滤波器,在暗到亮处产生负响应。ReLU 用 max(0, x) 将负值置零,留下当前极性的匹配,并引入非线性。

最大池化以 2×2 窗口、步幅 2 选取每个窗口的最大值,把 4×4 变成 2×2。它保留区域内是否有强响应,丢掉精确位置,提供有限的位置容忍度,不保证任意平移后输出不变。

本课只有一个手选滤波器和一次“卷积 → ReLU → 池化”。真实 CNN 会学习多个滤波器并叠加层,早层常响应边缘,后层组合形状;也可能采用不同的激活与下采样结构。

逐步演示

默认垂直边缘滤波器的三行均为 [1, 0, −1],测量“左侧亮度减右侧亮度”。6×6 图像在第 1–4 行、第 2–3 列有值为 9 的竖条,其余为零,索引从零开始。

  1. 位置 (0, 0):窗口为 [[0, 0, 0], [0, 0, 9], [0, 0, 9]]。左列乘 +1 得零,中列乘零,右列乘 −1 得两个 −9,总和 −18。这是与模板极性相反的暗到亮边缘。
  2. 剩余 15 个位置:特征图各行为 [−18, −18, 18, 18]、[−27, −27, 27, 27]、[−27, −27, 27, 27]、[−18, −18, 18, 18]。负值对应条的左边,正值对应右边;三行都覆盖条时幅度达到 27。
  3. ReLU:四行变为 [0, 0, 18, 18]、[0, 0, 27, 27]、[0, 0, 27, 27]、[0, 0, 18, 18],只保留相同对比方向的边缘。
  4. 池化:左侧两个窗口最大值为零,右侧两个为 27,输出 [[0, 27], [0, 27]],表示右侧有强垂直边缘响应。

画布中的琥珀色窗口跟随扫描,工作区显示当前图像块、九个乘积及总和。特征图随计算填入,正值为深色、负值为蓝色。ReLU 阶段蓝格清空,池化完成后结果框变绿。

参数与计算量

单个单通道 3×3 滤波器无论处理 6×6 图像还是 4K 图像,都只有九个权重。全连接层对 28×28 图像每个神经元需要 784 个输入权重,且不强制不同位置共享检测器。卷积用共享权重把同一个检测规则应用到各处。

这里的计算量是 O(out_h · out_w · k²):每个输出格做一次 k×k 点积。固定核大小时随图像面积线性增长。多输入/输出通道还需乘通道数。

“Random filter”是对照。流程相同,但没有边缘结构的九个权重生成分散响应,第一次点击时池化为 [[9, 9], [18, 9]](再点会轮换到其他固定的未训练滤波器),没有垂直滤波器 [[0, 27], [0, 27]] 那样清楚地定位右边缘。检测的用途来自权重值;真实网络通过梯度下降学习这些值。

输入面板的九个格子可点击循环切换 −1、0、1,修改后整条流程重算。可以做三项实验:

  • 全设为一:变成局部亮度和检测器,池化为 [[54, 54], [54, 54]]。它仍包含亮度信息,但在这个池化结果中不能定位边缘。
  • 水平边缘核的中列清零:输出从 [[0, 0], [27, 27]] 变为 [[0, 0], [18, 18]]。定位保留,峰值弱三分之一(27 → 18),外侧响应减半(18 → 9)。
  • 设计只点亮横条上边缘的核:先预测 2×2 输出,再运行核对符号和位置。

边界情况

  • valid 与填充:本课 6×6 → 4×4。核为 3、步幅为 1 时,四边各补一圈零可保持空间尺寸;不是任意填充都保持尺寸。
  • 平坦区域:对本课和为零的边缘核,等亮度块的左右差为零。默认角落的 ±18 是因为窗口仍跨过条的边缘。
  • 相反极性:暗到亮产生负响应,ReLU 丢弃它。负值本身仍是有效的有符号边缘信息,另一个极性的滤波器可以利用它。
  • 池化不能整除:4×4 可由 2×2、步幅 2 铺满。奇数尺寸的余边可按实现配置丢弃或填充。

常见错误

  • 认为各位置有独立滤波器。取消共享得到局部连接层;只有每个单元连接所有输入时才是全连接层。
  • 认为只叠线性卷积就增加非线性表达能力。纯线性层仍可合并为一个线性映射,但边界与参数结构可能不同;本课的 ReLU 和最大池化提供非线性。
  • 混淆窗口大小与步幅。前者决定读取范围,后者决定移动距离;二者相同才是这里的不重叠铺排。
  • 把特征图当缩略图。数值表示模板响应,不等同于原像素亮度。
  • 认为只能最大池化。平均池化求均值,卷积步幅也可下采样,选择由结构和任务决定。