第十七讲 · 卷积运算、滤波器与卷积层

Views: --

MLP 把每个输入节点与下一层每个节点相连,但图像并不是一串互不相关的数字:相邻像素组成边缘、纹理和局部形状,同一种局部模式还可能出现在任意位置。

卷积层利用两个事实:只看局部区域;同一组权重在所有位置复用。这样既减少参数,又能在整张图上搜索同一种特征。

LeNet-5 已经采用“卷积相关层 + 全连接层”识别手写数字;后来的 AlexNet 用更深网络、更大数据与 GPU 训练展示了 CNN 在大规模视觉任务上的能力。架构会变,但卷积层的基本运算仍是本讲下面这些内容。

一、相关与卷积只差一次翻转

对一维离散信号 xx 和长度为 FF 的核 ww,互相关为

y[t]=k=0F1w[k]x[t+k].y[t]=\sum_{k=0}^{F-1}w[k]x[t+k].

数学卷积会先把核翻转:

(xw)t=k=+x[k]w[tk].\left(x*w\right)_t =\sum_{k=-\infty}^{+\infty}x[k]w[t-k].

二维互相关写成

Y[i,j]=uvX[i+u,j+v]K[u,v].Y[i,j] =\sum_u\sum_v X[i+u,j+v]K[u,v].

严格的二维卷积使用翻转 180180^\circ 的核。深度学习框架通常实际计算互相关,因为核权重本来就要从数据中学习,是否预先翻转不会限制表达能力;行业仍习惯把这层叫“卷积层”。

二、固定滤波器怎样改变图像

卷积核滑过图像,每到一个位置就把局部像素与核逐元素相乘再求和。不同固定核会产生不同效果:

  • 中心为 11、其余为 00:原样复制;
  • 非中心某位置为 11:把图像平移一个像素;
  • 3×33\times3 元素全为 1/91/9:局部平均,产生方框模糊;
  • 正负权重相消的核:平坦区域响应接近零,亮度突变处响应大,可检测边缘。

这解释了“滤波器就是特征检测器”:核与某块局部图案越相似,内积响应通常越大。

三、一个完整二维计算

输入与 2×22\times2 核为

X=[1201312201312210],K=[1001].X= \begin{bmatrix} 1&2&0&1\\ 3&1&2&2\\ 0&1&3&1\\ 2&2&1&0 \end{bmatrix}, \qquad K= \begin{bmatrix} 1&0\\ 0&-1 \end{bmatrix}.

步幅为 11、不填充,按互相关计算。左上角输出为

1×1+2×0+3×0+1×(1)=0.1\times1+2\times0+3\times0+1\times(-1)=0.

把核滑过所有位置,得到

Y=[002221203].Y= \begin{bmatrix} 0&0&-2\\ 2&-2&1\\ -2&0&3 \end{bmatrix}.

输入宽高从 44 变为 33,因为不填充时核不能越出边界。

四、步幅、填充与输出尺寸

设一维输入长度为 NN,核大小为 FF,两侧各填充 PP,步幅为 SS,输出长度为

Nout=N+2PFS+1.N_{out} =\left\lfloor\frac{N+2P-F}{S}\right\rfloor+1.

课件的 7×77\times7 输入、3×33\times3 核给出三个重要 sanity check:

  • S=1,P=0S=1,P=0(73)/1+1=5(7-3)/1+1=5,输出 5×55\times5
  • S=2,P=0S=2,P=0(73)/2+1=3(7-3)/2+1=3,输出 3×33\times3
  • S=1,P=1S=1,P=1(7+23)/1+1=7(7+2-3)/1+1=7,保持 7×77\times7

若分子不能整除步幅,公式中的向下取整意味着右侧或下侧可能有像素未被最后一个窗口覆盖。框架的 same 填充会根据尺寸和步幅自动决定不一定对称的填充值,不能总是假设 P=(F1)/2P=(F-1)/2

五、可学习滤波器与特征图

固定滤波器由人设计,CNN 的卷积核则是模型参数。前向传播算特征响应,反向传播根据任务损失更新每个核权重。一个核在所有空间位置共享,因此它能在整张图上检测同一种模式。

对输入

XRCin×H×W,X\in\mathbb R^{C_{in}\times H\times W},

普通卷积权重为

KRCout×Cin×Fh×Fw.K\in\mathbb R^{C_{out}\times C_{in}\times F_h\times F_w}.

每个输出通道都有一组跨越全部输入通道的三维卷积核,输出为

YRCout×Hout×Wout.Y\in\mathbb R^{C_{out}\times H_{out}\times W_{out}}.

普通卷积参数量为

CoutCinFhFw+Cout,C_{out}C_{in}F_hF_w+C_{out},

最后一项是每个输出通道的偏置。参数量与图像宽高无关,这正是权重共享的收益。

多通道完整算式

忽略批次维和边界时,第 oo 个输出通道为

Yo[i,j]=bo+c=1CinuvKo,c,u,vXc[i+u,j+v].Y_o[i,j] =b_o+ \sum_{c=1}^{C_{in}} \sum_u\sum_v K_{o,c,u,v}X_c[i+u,j+v].

所以一个普通卷积核并不是“只看 RGB 中某个颜色”,而是同时汇总所有输入通道,再产生一个输出特征图。

六、普通卷积与深度卷积

深度卷积(Depthwise Convolution)给每个输入通道分别使用一个空间核,不在卷积时混合通道。若 depth multiplier 为 11,其权重只有

CinFhFwC_{in}F_hF_w

个,输出通道数仍为 CinC_{in}

为了让不同通道交换信息,通常紧接一个 1×11\times1 点卷积。二者合称深度可分离卷积:

  1. 深度卷积负责每个通道的空间特征;
  2. 点卷积负责通道混合。

与普通卷积相比,它显著减少参数和乘加次数,但表达约束更强,不是任何场景都必然更好。

七、从“匹配 X 的一角”理解层次特征

课件用字符 X 与 O 演示:整幅图逐像素比较会因平移、旋转或局部变形失败;若先用小核分别匹配斜线片段,再汇总这些局部响应,模型会稳健得多。

一层使用多个核,就把一张输入图变成一叠特征图。浅层核可能检测不同方向的边缘;后续层再组合这些响应,逐渐形成角点、纹理、部件乃至完整物体。池化怎样压缩这叠特征图、感受野怎样逐层扩大,见下一讲:池化、感受野与 CNN 整体结构

八、常见误区与 sanity check

  • 深度学习中的 Conv2d 通常算互相关,不翻核;手算前要先确认定义。
  • 普通多通道卷积的每个输出通道会累加所有输入通道,不能漏掉 c\sum_c
  • 填充不会增加可学习信息,只是在边界补值并控制输出尺寸。
  • 步幅大于 11 同时完成卷积和下采样,可能跳过局部细节。
  • 方框模糊核若全为 11,会把整体亮度放大约 9 倍;要做平均应除以 9。
  • 输出尺寸、权重形状与参数量三者应能互相核对,尤其注意偏置只按输出通道计数。

评论