Locality
每层只处理邻域,减少参数并优先学习局部模式。
EECS498 · Deep Learning Revisited · 04
图片当然可以 flatten,但那会抹掉“相邻像素仍然相邻”这条最有价值的先验。你手写 convolution 的循环,其实是在把 locality 与 weight sharing 写进计算。
30-second recall
你实现了 naive convolution / pooling 的 forward+backward、ThreeLayerConvNet、DeepConvNet 与 ResNet blocks。
Flatten 后,左上角的像素与右下角的像素在矩阵里只是两个坐标;linear layer 必须分别学习每个位置的模式。CNN 假设局部结构可复用:检测边缘的权重不应只服务于一个绝对位置。
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。
卷积是一条带强先验的 representation builder:小窗口只读局部,同一组权重扫过全图,层层堆叠后局部证据变成更大 receptive field 的概念。
它们共同决定输出 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()
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()
每层只处理邻域,减少参数并优先学习局部模式。
同一 filter 扫全图,使同一模式在不同位置可被识别。
后层组合前层 feature maps,receptive field 逐步扩大。
降低空间分辨率,换取更大上下文与更少计算。
Common misconception:一个 3×3 kernel 的网络并非永远只能看 3×3。连续两层 stride-1 3×3 已让第二层单元依赖原图 5×5 区域。
你在 A4 构造了 ResidualBlock:主分支学习修正量,shortcut 保留较直接的信息/梯度路径。它没有消除 CNN 的空间 bias,而是让更深的 representation hierarchy 更容易优化。
Vision Transformer 减弱了卷积式硬编码,但 patch embedding 本身仍把图像分成空间 token;现代视觉系统依然必须回答 locality、position、resolution 与 compute 的权衡。
[8,16,32,32]。padding 保持空间尺寸,filter 数 16 成为输出 channel。
卷积读取位置由固定局部窗口决定;attention 的读取权重由当前内容动态计算。这个对比会在 Transformer II 重用。
MLP 理论上可学习空间规律,但必须用数据分别发现位置关系与复用规律;CNN 把这两点直接写入参数连接方式。
输入 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。
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 的约束。
三个 stride-1、无 dilation 的 3×3 conv 连续堆叠,理论 receptive field 从 3×3 → 5×5 → 7×7。后层一个 value 虽仍是局部计算,却已间接依赖更大原图区域。
FC 可以拟合图片,但每个位置用独立 weights;同一 edge 移动一格就没有结构上的复用保证,parameter 数量也快速增长。
Channel 不是“另一张图片”。Input RGB channels 是测量维度;hidden channels 是不同 learned detectors 的 response coordinates。
第 7 个 learned filter 在 spatial location (10,12) 的 activation,基于对应 receptive field。
不叫;它成为 locally connected layer,保留 locality 但失去 translation-oriented sharing。
把 kernel 从 3×3 改 1×1:它能混合什么,不能直接混合什么?
CNN 构造 spatial representations;下一课用 saliency、feature inversion 与 style statistics 追问这些 representations 实际编码了什么。
Based on your implementation