EECS498 · Deep Learning Revisited · 04

CNN: Injecting Spatial Structure

图片当然可以 flatten,但那会抹掉“相邻像素仍然相邻”这条最有价值的先验。你手写 convolution 的循环,其实是在把 locality 与 weight sharing 写进计算。

55–70 分钟 A3–A4 Spatial bias

30-second recall

30 秒回忆

你实现了 naive convolution / pooling 的 forward+backward、ThreeLayerConvNet、DeepConvNet 与 ResNet blocks。

  1. 卷积输出的每个位置看见哪里?
  2. 同一个 filter 为何能到处使用?
  3. channel 与空间轴分别代表什么?

Why Did We Need This?

Flatten 后,左上角的像素与右下角的像素在矩阵里只是两个坐标;linear layer 必须分别学习每个位置的模式。CNN 假设局部结构可复用:检测边缘的权重不应只服务于一个绝对位置。

image batch [N,C,H,W]
filters [F,C,HH,WW]
feature maps [N,F,H′,W′]
pooled maps [N,F,H″,W″]

What You Actually Implemented

A3/convolutional_networks.py 中的 Conv.forward/backward 与 MaxPool.forward/backward 相对 zip skeleton 有实质填充;Notebook 保存的 best CNN 达到 validation 73.09%、test 72.76%。A4 又用 PyTorch modules 构造三层 CNN 和 residual blocks。

Mental model

卷积是一条带强先验的 representation builder:小窗口只读局部,同一组权重扫过全图,层层堆叠后局部证据变成更大 receptive field 的概念。

Mechanism · kernel / stride / padding 不是孤立参数

它们共同决定输出 shape 与信息覆盖:

H′ = 1 + floor((H + 2P − HH) / S)
W′ = 1 + floor((W + 2P − WW) / S)

out[n,f,i,j] = Σc,u,v x_pad[n,c,iS+u,jS+v] · w[f,c,u,v] + b[f]

f 是新 representation 的 channel。一个输出位置不是“一个像素”,而是该 filter 对局部 patch 的响应。

Your code · 2022

A3/convolutional_networks.py · Conv.forward()

View source →
cur_in = x_pad[i, c,
    j * stride:j * stride + HH,
    k * stride:k * stride + WW]
cur_conv += cur_in * w[f, c]
out[i, f, j, k] = cur_conv.sum()

Why This Design?

Locality

每层只处理邻域,减少参数并优先学习局部模式。

Weight sharing

同一 filter 扫全图,使同一模式在不同位置可被识别。

Hierarchy

后层组合前层 feature maps,receptive field 逐步扩大。

Pooling / stride

降低空间分辨率,换取更大上下文与更少计算。

Common misconception:一个 3×3 kernel 的网络并非永远只能看 3×3。连续两层 stride-1 3×3 已让第二层单元依赖原图 5×5 区域。

Residual connection changed trainability

你在 A4 构造了 ResidualBlock:主分支学习修正量,shortcut 保留较直接的信息/梯度路径。它没有消除 CNN 的空间 bias,而是让更深的 representation hierarchy 更容易优化。

Then vs Now

Vision Transformer 减弱了卷积式硬编码,但 patch embedding 本身仍把图像分成空间 token;现代视觉系统依然必须回答 locality、position、resolution 与 compute 的权衡。

Concept Checks

X=[8,3,32,32],W=[16,3,3,3],stride=1,pad=1,输出 shape?

[8,16,32,32]。padding 保持空间尺寸,filter 数 16 成为输出 channel。

Attention 和 convolution 在“从别处读取信息”上最关键的不同?

卷积读取位置由固定局部窗口决定;attention 的读取权重由当前内容动态计算。这个对比会在 Transformer II 重用。

为什么 flatten+MLP 不是“不能”处理图片,而是 inductive bias 更弱?

MLP 理论上可学习空间规律,但必须用数据分别发现位置关系与复用规律;CNN 把这两点直接写入参数连接方式。

Depth Lab · 一个 feature-map value 是怎样算出来的?

输入 image [C=3,H=32,W=32]。一个 3×3 filter 不看完整图片,而是读取某个位置周围的 [3,3,3] patch,做 27 项 dot product 加 bias,产生一个 scalar activation;同一 filter 滑过所有 spatial positions。

input patch       [3,3,3]
one kernel        [3,3,3]
elementwise × + sum + bias
→ one value at output[channel_out, y, x]

16 kernels, stride=1, padding=1:
[3,32,32] → [16,32,32]

Output channel 7 的 feature map 是第 7 个 learned kernel 在所有位置的响应图。模型学的是 kernel weights;feature map 是 kernel 与当前 image 共同产生的 activation。

Parameter sharing 具体省了多少?

16 个 3×3 RGB kernels 只有 16×3×3×3+16=448 parameters,与 image 宽高无关。若每个 32×32 output location 都有独立的 27-weight detector,则需 32×32×16×27+16=442,384,还失去跨位置复用同一种 pattern 的约束。

  1. Local connectivity:每个 output 只读取附近 patch。
  2. Weight sharing:同一 kernel 在所有 y/x 复用。
  3. Multiple channels:每个 kernel 跨所有 input channels 汇总。
  4. Multiple layers:后层把 edges/textures 组合成更大范围 features。
  5. Nonlinearity:避免多层 convolution 折叠为单一线性 filter。

Receptive field 怎样增长?

三个 stride-1、无 dilation 的 3×3 conv 连续堆叠,理论 receptive field 从 3×3 → 5×5 → 7×7。后层一个 value 虽仍是局部计算,却已间接依赖更大原图区域。

如果 flatten 后接 FC?

FC 可以拟合图片,但每个位置用独立 weights;同一 edge 移动一格就没有结构上的复用保证,parameter 数量也快速增长。

Misconception diagnosis

Channel 不是“另一张图片”。Input RGB channels 是测量维度;hidden channels 是不同 learned detectors 的 response coordinates。

一个 [16,32,32] feature map 中 [7,10,12] 表示什么?

第 7 个 learned filter 在 spatial location (10,12) 的 activation,基于对应 receptive field。

若所有位置使用不同 kernel,还叫 convolution weight sharing 吗?

不叫;它成为 locally connected layer,保留 locality 但失去 translation-oriented sharing。

Transfer Question

把 kernel 从 3×3 改 1×1:它能混合什么,不能直接混合什么?

闭卷解释

  1. 从 patch dot product 推出 feature map。
  2. 算出 16 个 RGB 3×3 filters 的参数量。
  3. 区分 kernel、feature map、channel、receptive field。

Connection

CNN 构造 spatial representations;下一课用 saliency、feature inversion 与 style statistics 追问这些 representations 实际编码了什么。

Based on your implementation