第 3 讲 · 勘误与补注
本页记录三类内容:与母本讲义的差异(母本讲到什么程度、本教程补齐了什么)、术语与译法的统一、录播年代之后发生的默认实践变化,最后是本教程自身的更正记录。 使用方式:读到某节觉得「母本没这么讲」或「书里和论文对不上」时,先查本页;查不到再标「需核实」并记入本页第四节。
一、对照母本讲义的补注
母本 MIT 6.S191 · Lecture 3(Deep Computer Vision) 在一节课里从「为什么需要卷积」讲到检测与分割,定位是建立视觉任务的全局直觉,配套 Lab 做滑动窗口人脸检测。推导、复杂度拆解、评估口径与治理议题大多留给学生自己补。本教程沿用它的骨架与术语,逐节补齐被省略的中间步骤。
读母本时容易出现三种落差,先在这里说清:
- 「课堂上说显然」的步骤,考试与面试会要求写出来——输出尺寸公式的取整来源、感受野递推、残差梯度的展开、InfoNCE 的梯度,本教程都写进
proof折叠框,第一遍可跳,第二遍必须能复现。 - 「课堂上没提」的工程默认,真实项目里天天遇到——
model.eval()与 BN 统计量、忽略区、坐标 round-trip 断言、骨干学习率小一个量级,本教程把它们归位到相应小节并标明是「工程惯例」还是「本教程的推理」。 - 「录播年代之后成为主流」的内容——ViT / Swin / ConvNeXt / MAE、SAM、CLIP 之后的 VLM 与扩散定制、自监督的落地清单,3.5–3.8 已按《教材写作规范》标注为「教材外拓展」并给出论文标题与编号。
下表逐条给出「母本省略了什么 / 本教程补在哪里」。
| 节 | 母本的处理 | 本教程的补齐(位置) |
|---|---|---|
| 3.1 | 用「滑窗 + 参数共享」讲清卷积的直觉 | 两宗罪的定量对照(例 3.1.1)、等变的充分必要性论证(命题 3.1.1)、归纳偏置的双向代价(定义 3.1.3) |
| 3.2 | 给输出尺寸的常用结论与池化用途 | 取整来源的完整推导(命题 3.2.2 的 proof)、互相关与卷积的翻转关系与合并定理(命题 3.2.1、定理 3.2.1)、感受野/跳距递推(命题 3.2.4)、分组与可分离卷积的省算比(命题 3.2.6)、im2col 实现视角(算法 3.2.1) |
| 3.3 | 提到池化、BN、Dropout 三个零件 | 池化不变性的边界(例 3.3.1)、最大池化与单调激活的交换律(命题 3.3.1)、BN 的三条代数性质(例 3.3.3)、BN/GN 的统计范围对照(定义 3.3.4、例 3.3.4)、SpatialDropout 的必要性(定义 3.3.5) |
| 3.4 | 依次介绍 AlexNet / VGG / ResNet 的贡献 | AlexNet 的逐层形状与参数分布表(例 3.4.1)、小核堆叠的等价性与收益(命题 3.4.1)、退化的定量感受与两个互补假说(例 3.4.3)、残差梯度的展开式与两个补充观察(定理 3.4.1) |
| 3.5–3.8 | 母本录播年代尚未覆盖 ViT 之后的主流工作 | 全部为教材外拓展:ViT 逐项参数量与计算量(例 3.5.2)、Swin 的线性复杂度推导(命题 3.5.2)、ConvNeXt 的控制变量清单、迁移与小数据的决策顺序(3.6.5)、AP 手算(例 3.7.1)、CLIP 对称损失与双塔算力(例 3.8.1、例 3.8.2) |
| 3.9 | 伦理议题以讨论形式出现 | 放大效应的四个进入点(定义 3.9.1)、 的分群反例(例 3.9.1)、FGSM 手算与 的差别(例 3.9.2)、模板反演的两个漏洞、出口判据清单(3.9.5) |
| 3.10 | Lab 以代码为主 | 把 Lab 每一步对回原理(3.10 的对照表)、窗口数与耗时的量级估算(例 3.10.1)、正负样本匹配手算(例 3.10.2)、故障排查表与三个可执行伦理实验 |
一句话总结差异:母本给「是什么」与「为什么重要」,本教程补「怎么算出来」与「算错时长什么样」。凡属后者,正文都配了可执行的判据(形状断言、数值阈值、口径声明)。
补注的边界(避免把本教程读成「母本的升级版」):
- 本教程不改变母本的结论方向,只补中间步骤与判据;凡与本教程不一致处,一律以可复现实验与原文文献为准。
- 本教程新增的条目多为社区惯例而非定理(GAP 代替大分类头、GroupNorm 用于小批量、分层学习率、MAE 的 ),收益幅度需在你自己的配置上验证。
- 母本配套 Lab 仍是最好的动手材料;本教程的 Lab 2 与之对应,但把「原理 → 实现 → 失败模式」的对应关系显式写了出来。
二、术语与常见译误
这一节的用法:当你在「同一个词指向两件事」上卡住时来查。以下九条都是本讲内部就构成实际困惑的对比。
| 术语 | 常见误用/误译 | 正确理解 |
|---|---|---|
| padding(填充)vs zero padding(零填充) | 把两者当同一件事,于是「填充会引入边界偏差」这类话说不清是机制问题还是取值问题 | 填充指在四周补 圈元素、控制输出尺寸的操作(定义 3.2.2);零填充只是其中最常用的一种取值约定(补 )。框架里的 padding=1 是前者,补什么由实现决定——换取值(如镜像填充)会改变边缘像素的统计,但尺寸公式 (3.2) 不变 |
| stride(步幅)vs step(步长) | 把「步幅」与优化器的「步长 / 学习率」混用,于是「 相当于下采样」被误读成「学习率减半」 | 步幅是核每次移动的距离,只影响几何(输出尺寸、跳距)与算力(定义 3.2.2、命题 3.2.4);「步长」在本教程中专指优化器的更新幅度 ,与卷积无关。写作时用「步幅 / stride」避免歧义 |
| pooling(池化)vs subsampling(下采样 / 子采样) | 把池化等同于「降分辨率」,认为降分辨率就一定要用池化 | 池化是三种降采样方式之一,另两种是步幅卷积(可学、有参数)与重排 / 稀疏采样(无参数、信息无损)(定义 3.3.2)。决定分辨率与感受野的是步幅的累乘,不是「池化」这个名字(例 3.3.2)。历史上还有 subsampling 一词指 LeNet 时代的无参数下采样,与今天的池化不完全同义 |
| BN 的「批」到底指什么 | 以为「批」是「一批图片」或「一个 batch 的样本」,于是算不清统计范围 | BN 的统计量是每个通道独立、在该批全部样本的 个元素上算的(定义 3.3.3)——「批」既不跨通道也不跨位置,但跨样本。这一个「跨谁不跨谁」就解释了为什么它依赖 batch size、为什么推理要用运行统计量、以及为什么小批量场景改用 GroupNorm(定义 3.3.4) |
| 等价(equivariance)vs 不变(invariance) | 说「卷积具有平移不变性」,或在讲数据增强时把两者混着用 | 等变:输入平移 ,输出特征图跟着平移 ——卷积自带的性质(命题 3.1.1)。不变:物体在哪都给出同一个标签——分类要的性质,靠池化 / 全局池化 / 大感受野逐步换来(3.3.1),且实际网络的不变性只是局部的 |
| 感受野(receptive field)vs 跳距(jump) | 只记感受野,于是说不清「这一层相当于原图上的多大核」 | 感受野答「看多大」,跳距答「隔多远一个采样点」,两者共同决定特征图相当于原图的什么分辨率(定义 3.2.4)。把某层的核换算到第 层要乘 (即用 ),分割的定位精度上限就是 |
| 转置卷积(transposed conv)vs 反卷积(deconvolution) | 当成卷积的逆运算,或以为它能「恢复下采样丢掉的信息」 | 它是与卷积梯度同形的线性映射 ,不是逆(卷积矩阵几乎总是奇异的,定义 3.2.6)。零插值 大步幅还会留下棋盘格伪影;要保边界精度靠跳连 / 高分辨率特征,不靠上采样算子(3.7.4) |
| AP vs mAP(以及 COCO 的「AP」) | 把三个不同的平均混成一个词,导致数字不可比 | 三件事要分清:单类别单阈值(AP)、跨类别平均(常写作 mAP)、跨 IoU 阈值平均(COCO 口径下官方写作 “AP”,已是 十个阈值的均值)(方法 3.7.1)。报告时必须写清是哪几件(3.7.2) |
| GAP(全局平均池化)vs 展平(flatten) | 以为 GAP 只是「另一种池化层」,或以为二者可互换 | GAP 把每个通道的整张图聚成一个数,直接得到长度 的向量:参数量骤降、可按通道可视化类激活、可接受任意输入尺寸——代价是彻底丢掉空间信息,因此只适合分类;展平则保留全部位置信息但把一个巨大矩阵塞给分类头(3.3.1、例 3.4.1) |
三、时效补注
母本录播年代与当前工程默认之间存在若干处「已经换了默认答案」的差异。以下按「主题 / 母本年代的做法 / 截至 2025 年的工程默认 / 本教程的处理」列出;涉及具体版本与比例的条目均标注为社区惯例,采用前应结合你自己的配置验证。
| 主题 | 母本年代(约 2018–2020 录播口径) | 当前工程默认(截至 2025) | 本教程的写法 |
|---|---|---|---|
| Dropout 在 CNN 中的位置 | 讲「Dropout 防过拟合」,常配在全连接层或按元素丢弃 | ResNet / ConvNeXt 等主要靠数据增强 + 权重衰减 + BN,骨干内不用 Dropout;要用也是通道级(Dropout2d),出现在分类头之前或小数据任务里 | 定义 3.3.5 与算法 3.3.1 明确「掩码必须作用在语义上有意义的单位上」,并给出 的典型区间 |
| 分类头 | AlexNet / VGG 用「展平 + 三层大全连接」 | GAP + 一个小线性层(甚至只留一层);参数效率提升的主要来源就是把大 FC 换掉 | 3.3.1 给 GAP 的三重收益与一条代价;例 3.4.1、例 3.4.2 用参数分布把「为什么必须换」算给读者看 |
| 骨干选型 | ResNet 系列为绝对默认 | 按数据量 / 延迟 / 工具链 / 是否需要多尺度四分法选型:ViT 系(数据足)、Swin(多尺度)、ConvNeXt(纯卷积但现代化)、深度可分离系(移动端) | 3.5.5 的三层区分(架构 / 实现 / 工程)与 3.6.5 的决策顺序 |
| 预训练来源 | ImageNet-1k 监督预训练 | 自监督优先(DINOv2 / MAE 系)> CLIP 系(涉及图文)> ImageNet 监督;领域接近的目标域更重要 | 3.6.5 第 2 步给出这个优先顺序,并要求记录来源与版本 |
| 归一化层 | BatchNorm 为图像任务默认 | 大 batch 分类仍用 BN;检测 / 分割 / 视频 / 小批量一律改用 GroupNorm;Transformer 用 LN | 定义 3.3.4 用「统计范围」统一视角把四者排在一张表里,并在 3.6 指出领域偏移时 BN 的运行统计量本身是误差源 |
| 「先训分类再迁移」 | 迁移主要等于「载入 ImageNet 权重再微调」 | 两阶段(先冻结只训头、再小学习率解冻)+ 分层学习率;小数据下冻结骨干的 BN 也要切 eval() | 定义 3.6.1、方法 3.6.1 与 例 3.6.1 的成本对比 |
| 检测范式 | 锚框 NMS 是标配 | DETR 系集合预测(无锚框、无 NMS)在增长,但经典锚框路线仍是主流生产方案;SAM 一类提示式模型把分割变成可复用后端 | 3.7.3–3.7.6 把两条路线与代价讲清,并写明 DETR 的两条代价(收敛慢、小目标弱) |
| 生成与定制 | 生成模型与视觉识别基本分开讲 | 扩散主干 ControlNet(空间条件)/ LoRA(主体与风格) 成为定制接口的标准组合 | 3.8.3:ControlNet 管「怎么摆」、LoRA 管「长什么样」,两者正交可叠加 |
| 「ViT 是否取代 CNN」 | 尚无此讨论 | 结论是条件性的:ConvNeXt 的控制变量实验说明配方与微观设计贡献很大 | 3.5.5 与本节第一部分的三条落差提醒 |
| 隐私与合规 | 主要作为讨论题 | 分群评估、拒答机制、人在回路、可追溯日志、数据最小化成为交付物的一部分 | 3.9.5 的「最小合规包」与 3.10.6 的三个可执行实验 |
一条通用提醒:本讲涉及的具体数字(如 MAE 的 掩码、DeiT 的 、队列长度 、CONV 系模型的参数量)都来自特定配置与特定实现口径。正文对不确定处已标注「需核实」;引用到自己的项目前,请以所使用框架版本与模型公开配置为准。
为什么这些默认会变:它们大多不是数学结论,而是「在当时的硬件、数据规模与框架能力下性价比最高的选择」。硬件(BF16 / 量化)、数据规模(十亿级图文对、十亿级掩码)与框架(FlashAttention 类 IO 感知算子、分布式归一化)任一项变化,默认答案就可能改写。因此本页的价值在于记录「变化发生过」,而不是把 2025 年的默认当成永久正确。
四、本教程更正记录
| 位置 | 原表述 | 更正 | 说明 |
|---|---|---|---|
sec310.md(第 3 讲 · 3.10 节) | 曾被报告有 1 个 ::: 语义盒未闭合,若成立会让后续整段内容被渲染进折叠块(表现为「展开某个盒子后出现整节内容」) | 已由作者复验修复:按「先关内层、再关外层」的顺序把嵌套的 ex → proof → ex 三层平铺闭合,节末的 method / errata / note 回到顶层;复验后自查命令输出「全部配平」 | 该报告未能复现原始报错行号,故此处只记录「已复验并配平」这一事实,不写入未经确认的行号,避免形成错误记录。讲末六页的自查命令见 《讲末六页规范》 第七节 |
sec33.md(第 3 讲 · 3.3.4 节) | 算法 3.3.1 第 3 条正文出现一个外文词(应为「通常」),并在表下注明了「为录入笔误,正式排版时应改正」 | 保留原文并在此登记:该处属已知笔误,正式排版时替换为「通常」;教学使用时按「通常」理解 | 正文选择保留笔误并加注,是为了让学生练习校对;但勘误页必须留档,否则读者会以为是术语。这类「原文标注 + 勘误留档」的双记录是本教程的固定做法 |
旧 lec03.md(单文件版第 3 讲) | 节号沿用 3.x 的单文件编号,且与「附录 C」「先修工具箱」的编号空间混在同一序列,交叉引用无法判断指的是讲次还是全局章节 | 已统一为「讲号.节号」体系:第 3 讲的节一律写作 3.1–3.10,节页文件名为 sec31.md–sec310.md;盒子编号同步为「3.节.序号」(如 定理 3.4.1) | 重构后每个盒子的编号在全书内唯一,锚点形如「类型-讲.节.序」;旧文件的扁平编号在新的多文件结构下不再使用。重定向与旧链接的迁移由 SUMMARY.md 统一承担,本页只记录口径变化 |
待核实的开放条目(发现新差异时追加到本表,不要就地改动正文):
| 位置 | 现象 | 待核实的问题 |
|---|---|---|
| 3.5.3 | DeiT-B 的 top-1 数字在不同来源间不一致(官方仓库 README 记 ,论文摘要记 ;另有 的不蒸馏结果与 下的 ),正文已标注「两者差异需核实来源」 | 需按官方仓库与论文原文逐项对齐「是否含蒸馏、分辨率、评测协议」三个条件后再统一表述 |
| 3.5.2 | ViT 三种规模在 ImageNet-1k / 21k / JFT-300M 上的 top-1 有若干标注为「需核实」(来自二手汇总) | 需以 ViT 原论文的对照表为准逐格核对,尤其是 ViT-Large 在 ImageNet-1k 上的数值 |
| 3.6.3 | MoCo 队列长度 、动量系数与 SimCLR 的批大小取值 | 需核对原论文(MoCo arXiv:1911.05722、SimCLR arXiv:2002.05709)的具体配置,避免把某一版本的实现当作通用结论 |
| 3.7.2 | VOC 11 点插值的官方出处 | COCO 口径可直接对照 pycocotools;VOC 的插值表述需回到 VOC 官方评测说明确认措辞(正文已标注「该处官方出处需核实」) |
| 3.9.1 | 「放大效应」的实证幅度 | 正文已注明「具体幅度与任务强相关,引用数字须核实具体论文与数据集」;引用前需给出论文、数据集与评价口径三件信息 |