Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 3 讲 · 闭卷回忆卡

用法:遮住答案,在空白纸上写;写完再展开对照。写不出来就标 △,完全想不起标 ×。 评估标记:✓ 能完整写出 / △ 有关键词但缺条件 / × 完全想不起。标 △ 的卡要补全「条件」,标 × 的卡隔天必须重做。 每组末尾给出该组的评估标记栏,考完自己打钩即可。

A. 定义卡(先写定义,再写「它解决什么问题」)

D1. 写出「卷积的三种归纳偏置」,并说明哪一条带来平移等变、哪一条省参数。

解答

局部连接(每个输出只与 k×kk\times k 邻域相连)++ 权值共享(同一个核在全图滑动,所有位置共用 k2k^2 个权重)++ 平移等变(f(shiftΔx)=shiftΔf(x)f(\mathrm{shift}_\Delta x)=\mathrm{shift}_\Delta f(x),在边界处理允许的范围内)。

局变由两条共同推出:核在所有位置用同一套权重,所以图案出现在哪里都激活同一个检测器,输出只是把激活搬到对应位置(命题 3.1.1 给出必要性的要点:线性 ++ 平移可交换 ⇒\Rightarrow 必为某核的卷积)。省参数来自权值共享 + 局部连接:参数量只剩 k2CinCoutk^2C_{in}C_{out},与图像尺寸完全无关(定义 3.1.2、例 3.1.1)。

解决的问题:全连接处理图像的两宗罪——参数爆炸(2242×3→1000224^2\times3\to1000 约 1.5×1081.5\times10^8)与无视空间结构(展平后「谁挨着谁」只剩下标差,网络要为每个位置各学一遍同一图案)。

D2. 写出归纳偏置的定义,并说明它的收益与代价分别落在误差分解的哪一项上。

解答

定义:一个学习算法(或模型族)在假设空间之外额外携带的、用于在等价假设之间做选择的先验约束。

误差分解: R(f)−R(f⋆)≤min⁡f∈F(R(f)−R(f⋆))⏟近似误差+估计误差⏟样本不足导致的选错.\mathcal R(f)-\mathcal R(f^\star)\le\underbrace{\min_{f\in\mathcal F}\bigl(\mathcal R(f)-\mathcal R(f^\star)\bigr)}_{\text{近似误差}}+\underbrace{\text{估计误差}}_{\text{样本不足导致的选错}} . 收益:把与先验相符的解提前排除 ⇒ 降低估计误差(用先验换样本,样本需求可以降几个数量级)。 代价:若真实规律不满足这个先验 ⇒ 抬高近似误差(此时卷积会输给 MLP,例如像素被随机置换的数据、或位置本身带语义的任务)。所以归纳偏置是双向工具(定义 3.1.3)。

D3. 写出「感受野」与「跳距」的定义,并说明跳距在工程上回答什么问题。

解答

感受野 rlr_l:第 ll 层某个输出神经元能追溯到原始输入的区域大小(答「看多大」)。 跳距 jlj_l:第 ll 层相邻两个神经元在原始输入上的中心间距(也叫等效步幅,答「隔多远一个采样点」)。

工程含义:两者共同决定「第 ll 层的一张特征图相当于原图的什么分辨率」;jL=4j_L=4 意味着特征图上一个像素对应原图 4×44\times4 块,这就是像素级分割定位精度的上限(所以分割网络要保住高分辨率特征)。把原图上的某个核换算到第 ll 层时要乘 jlj_l,即用 k⋅jlk\cdot j_l 而不是 kk(定义 3.2.4)。

D4. 写出 BatchNorm 的定义(含统计范围与动量更新),并说清「批」到底跨哪些维度。

解答

设激活 x∈RB×C×H×Wx\in\mathbb R^{B\times C\times H\times W},对每个通道 cc 独立,在该批全部样本的 B⋅H⋅WB\cdot H\cdot W 个元素上算 μc=1BHW∑xb,c,h,w,σc2=1BHW∑(xb,c,h,w−μc)2,\mu_c=\frac{1}{BHW}\sum x_{b,c,h,w},\qquad \sigma_c^2=\frac{1}{BHW}\sum (x_{b,c,h,w}-\mu_c)^2, 再标准化并做可学习的仿射:x^=x−μcσc2+ϵ\hat x=\dfrac{x-\mu_c}{\sqrt{\sigma_c^2+\epsilon}},y=γcx^+βcy=\gamma_c\hat x+\beta_c。 训练用当前批统计;推理用训练期累积的运行统计量,按动量更新 μcrun←(1−m)μcrun+mμc\mu^{\text{run}}_c\leftarrow(1-m)\mu^{\text{run}}_c+m\mu_c。

「批」跨谁不跨谁:跨样本(BB)与空间(HWHW),但不跨通道。「跨样本」这一点解释了为什么它依赖 batch size、为什么必须用两套统计量、以及为什么小批量任务改用 GroupNorm(定义 3.3.3、定义 3.3.4)。

D5. 写出四种归一化层的统计范围差异,并各配一个典型场景。

解答
名称 统计范围(每样本) 与 batch size 的关系 典型场景
BatchNorm 跨 B,H,WB,H,W,每通道 强依赖 大 batch 的图像分类骨干
LayerNorm 跨该样本的全部通道与空间 无关 Transformer(ViT)的默认
InstanceNorm 跨 H,WH,W,每样本每通道 无关 风格迁移 / 图像生成
GroupNorm 把 CC 分成 gg 组,跨组内通道与 H,WH,W 无关 检测 / 分割 / 视频(batch 小)

退化关系:GroupNorm 在 g=Cg=C 时退化为 InstanceNorm,在 g=1g=1 时接近 LayerNorm(定义 3.3.4)。gg 的常见选择是 3232 或 1616(要求 CC 可整除)。

D6. 写出 InfoNCE 损失,并说明它在形式上等价于什么任务。

解答

给定一批 NN 个样本、每个样本生成两个视图,得到 2N2N 个表示;对锚点 ii 记正样本为 j(i)j(i),相似度 sik=cos⁡(zi,zk)/τs_{ik}=\cos(z_i,z_k)/\tau(τ\tau 为温度): L=−12N∑i=12Nlog⁡exp⁡(si,j(i))∑k≠iexp⁡(sik).\mathcal L=-\frac{1}{2N}\sum_{i=1}^{2N}\log\frac{\exp(s_{i,j(i)})}{\sum_{k\ne i}\exp(s_{ik})}. 等价任务:把每个视图的表示当作一个「类别」,则「找出 ii 的正样本」就是一个 2N−12N-1 类分类问题(2N−22N-2 个负样本 ++ 1 个正样本),与 softmax 交叉熵完全同形。

两个旋钮:负样本规模决定任务难度与表示质量(SimCLR 需大 batch、MoCo 用队列);温度 τ\tau 控制 softmax 分布锐度,进而控制梯度强度与判别性(定义 3.6.3、例 3.6.2)。

D7. 写出 IoU、NMS 的定义,并说明二者各自解决什么问题。

解答

IoU =∣A∩B∣∣A∪B∣=交面积面积(A)+面积(B)−交面积∈[0,1]=\dfrac{|A\cap B|}{|A\cup B|}=\dfrac{\text{交面积}}{\text{面积}(A)+\text{面积}(B)-\text{交面积}}\in[0,1]。它同时是匹配判据(是否算命中)、评估阈值(AP@0.5)与损失基础(GIoU / DIoU / CIoU 是它的可微化改造)。用「交并比」而不用「交面积占比」,是因为后者可以靠把框做得极大来作弊;IoU 则同时惩罚「漏」与「多」,是同时约束位置与尺度的度量。著名缺陷:两框不重叠时恒为 00、梯度消失。

NMS:候选框按置信度从高到低排序 → 取最高分的框保留 → 删除与它 IoU 大于阈值的剩余框 → 重复。它解决的是「训练目标没做去重时,同一目标附近出现多个高分框」的问题;代价是阈值敏感(过小 → 漏检,过大 → 重复框)、对遮挡不友好、且不可微 + 串行(DETR 用一对一匹配从训练层面消除对它的需要)。

D8. 写出「领域偏移」与「任务偏移」的定义,并给出各自的诊断信号。

解答

领域偏移:输入分布 P(X)P(X) 变化而 P(Y∣X)P(Y\mid X) 大致不变(例:白天街景 → 夜间街景;自然图像 → 内窥镜图像)。 任务偏移 / 标签偏移:输出分布或语义定义变化(例:源任务是「1000 类物体」,目标任务是「病灶良恶性」)。

诊断信号:领域偏移 → 模型的浅层特征统计明显漂移;在无标签目标域上,BN 的运行统计量与源域不匹配。任务偏移 → 只有最后几层的输出分布与源域差异大,浅层仍相似。

缓解手段(按代价从低到高):① 重估归一化统计量(冻结全部参数,用目标域无标签数据重跑前向、重新累积 running stats,几十到几百个 batch 即可);② 测试时自适应;③ 目标域自监督预训练(定义 3.6.2、3.6.2)。

A 组评估标记:D1 ☐ / D2 ☐ / D3 ☐ / D4 ☐ / D5 ☐ / D6 ☐ / D7 ☐ / D8 ☐(✓ / △ / ×)

B. 结论卡(给一个判断,说清「对不对、条件是什么」)

J1. 「卷积具有平移不变性。」——这句话对吗?正确的说法是什么?

解答

不对,应为平移等变。 ① 卷积给的是等变:输入平移 Δ\Delta,输出特征图跟着平移 Δ\Delta(命题 3.1.1)。② 分类需要的不变是由池化 / 全局平均池化 / 大感受野逐步换来的;而且局部 2×22\times2 池化提供的不变性很弱且不连续,实际网络的不变性只是局部的、有限的(例 3.3.1)。

J2. 「更深一定更好;如果变差了就是过拟合,加正则就行。」——错在哪?

解答

错在把退化当过拟合。 过拟合是训练误差低、测试误差高;退化(定义 3.4.2)是训练误差本身就更高——说明问题在优化而不是容量。加正则、加数据都无效;要靠结构改动(残差)与优化手段(归一化、预激活、合理初始化)。

另一处要纠正:残差的价值有两件——让恒等映射变便宜(优化视角)与提供梯度直通项 II;不能简单归因为「梯度变大了」(定理 3.4.1 后的两个补充观察)。

J3. 「池化提供平移不变性,所以分类精度靠池化。」——更准确的说法是什么?

解答

更准确:池化提供的不变性很弱且不连续(只有当窗口内没有第二个同样强的激活时,「取最大」才等价于位置无关的检测;两个激活强度接近时输出会随平移跳变,不可导)。分类不变性主要来自大感受野 ++ 全局聚合(GAP)++ 数据增强。

池化长期存在的真实理由是 降分辨率、扩感受野(下采样让 rr 近似几何增长)、省算力;而决定分辨率与感受野的是步幅的累乘,不是「池化」这个名字(例 3.3.2)。另外最大池化与单调激活可交换(命题 3.3.1),但平均池化不能随便与 ReLU 换位。

J4. 「推理时 BatchNorm 也按当前批算统计量。」——为什么这是最危险的实现错误?

解答

因为推理必须确定:同一输入必须给同一输出,且与他人的输入无关。若按当前批算:① 单样本部署时批大小 1,方差为 00,归一化退化为「减自身均值再除以 ϵ\epsilon」,输出几乎恒定,模型完全失效;② 离线评测与线上服务的批组成不同会带来不可复现的精度漂移。

正确做法是用训练期累积的 running statistics(model.train() / model.eval() 的切换就是为它服务的)。附带事实:紧跟 BN 的卷积偏置是冗余的(可设 bias=False),但 BN 自己的 β\beta 是必需的(例 3.3.3)。

J5. 「ViT 参数量与 ResNet-50 相近,所以算力也相近。」——给出正确的量级对比。

解答

错。参数与 FLOPs 必须同时看。

ViT-B/16(2242224^2):总参数 86,482,408≈86.586{,}482{,}408\approx86.5M,其中每层 MLP 占 66.6%66.6\%(4.724.72M / 7.087.08M)、注意力相关(QKV ++ 输出投影)只有 28.328.3M;计算量约 17.617.6 GMACs(约 35.135.1 GFLOPs),其中 MLP 占每层 MACs 的 64%64\%、注意力矩阵只占 4.1%4.1\%。

ResNet-50(2242224^2):2.55×1072.55\times10^7 参数、约 4.14.1 GMACs。ViT-B/16 的算力是它的约 4.34.3 倍,参数约 3.43.4 倍(例 3.5.2)。

J6. 「ViT 已经取代 CNN 了。」——用控制变量实验的结论纠正它。

解答

没有。 三条事实:① ViT-Large 只用 ImageNet-1k 时比 ViT-Base 更差(弱先验需要更多数据才填满假设空间);② DeiT 证明差距很大程度来自训练配方(不蒸馏已达 81.8%81.8\%,蒸馏仅带来增益,不是前提);③ ConvNeXt 从 ResNet-50 出发一次只改一件事(配方、宏观设计、深度可分离、倒瓶颈、7×77\times7 大核、GELU/BN→LN),得到纯卷积的 ConvNeXt-T 82.1%82.1\%,与同规模 Swin-T 的 81.3%81.3\% 持平甚至略优。

准确表述:在对齐训练配方与微观设计之后,纯卷积可与同规模 Transformer 持平——这是控制变量实验,不是架构优劣的终审判决。选型依据是数据量、延迟、部署工具链与是否需要多尺度输出(3.5.5)。

J7. 「对比学习必须用大 batch。」——分别说出 SimCLR / MoCo / BYOL 的答案。

解答

不成立(作为普适结论)。 三者对照:

方法 负样本来源 关键机制 需大 batch?
SimCLR 当前 batch 内(2N−22N-2 个) 强增强 ++ 投影头(损失在投影空间算,下游用投影前的表示) 是
MoCo 队列(跨 batch 累积) 动量编码器保证队列内特征一致 否(与 batch 解耦)
BYOL / SimSiam 无负样本 预测器 ++ stop-gradient ++ 动量目标网络 否

注意是 2N−22N-2(不是 B−1B-1):同图的另一视图既是别人的锚点也可能是自己的正样本,计数要去掉自身与正样本(例 3.6.2)。

J8. 「BYOL 能工作,是因为它用了 X 来防止崩塌。」——这句话的问题在哪?

解答

问题在于把机制假说写成了已确立的定理。可确定的是现象:只用「拉近」的损失存在平凡崩塌解(输出常数向量使损失为 00),而 BYOL / SimSiam / DINO 一类结构在实践中能稳定训练且下游性能良好。

机制层面存在多种候选解释且无共识:预测器带来的不对称、stop-gradient 切断作弊路径、动量目标网络的慢变稳定信号、BatchNorm 的批统计约束。文献对哪一项起决定作用存在分歧。引用时必须区分「观测到的现象」与「机制解释」(定义 3.6.4、例 3.6.3)。

J9. 「NMS 是检测的必要步骤;检测看准确率就够了。」——逐句纠正。

解答

① NMS 不是必需:它是「训练目标没做去重」时的推理端补救。DETR 用一对一匈牙利匹配强制每个真值只被一个预测负责,重复预测被指派为「无目标」并受损失惩罚,于是 NMS 的作用被训练目标本身吸收(定义 3.7.7)。

② 准确率在极端类不平衡下几乎没有信息量:10610^6 个候选位置、1010 个真实目标时「全判背景」的准确率是 99.999%99.999\%,但 recall =0=0(例 3.7.1)。检测必须看 precision / recall / AP,并且分别报告漏检与误检。

③ 附带的第三个纠正:AP 必须说清口径——VOC 11 点插值与 COCO(101 点 recall ++ 十个 IoU 阈值)在同一组预测上会差约 44 个百分点(0.5890.589 对 0.5480.548)。

J10. 「SAM 是一个能分割一切类别的模型。」——正确的表述与两条主要局限是什么?

解答

正确表述:SAM 把分割从「针对某一类目标训练一个模型」改成「给定一个提示,返回对应的掩码」——提示可以是点、框、粗略掩码。它输出的是掩码(哪块像素属于同一个物体),不是语义标签——它不回答「这是什么」(定义 3.7.8)。

两条主要局限:① 掩码质量依赖提示质量(一个落在物体边缘的点可能给出完全不同的结果);② 不输出语义标签,实际系统通常把它当作「分割后端」,前面接检测器或分类器。另两条值得记住的代价:模型规模大(ViT-H 图像编码器约 66 亿参数量级)推理成本不低;训练数据的标注偏差会被继承。此外它的能力建立在 1111M 图像上的 11B 个掩码这海量标注之上,而不是「不需要标注」。

J11. 「CLIP 是生成模型,能描述图像;而且它能理解『红色立方体在蓝球左边』。」——两处错误各是什么?

解答

错误一:CLIP 是双塔检索 / 对齐模型——它只能给「图像与文本的匹配程度」,不能生成描述(那是 captioning / VLM 的事),也不输出坐标或掩码。 错误二:双塔结构中图像与文本各自独立编码、没有交互层,因此只能表达「图像整体与句子整体的相似度」,难以表达组合关系(「红色立方体在蓝色球左边」这类需要 token 级对齐的结构)——组合性是 CLIP 一类模型的已知短板。

顺带记两条:零样本分类靠文本编码器把新类名即时编码(这是「用语言作为类别的接口」),因此对类别名的表述高度敏感(模板工程存在的原因)、对细粒度分类弱;双塔的工程价值在于把编码次数从 N×MN\times M 降到 N+MN+M(例 3.8.2)。

J12. 「只保存特征模板就不存在隐私风险。」——两个漏洞分别是什么?

解答

漏洞一:模板可以被反演。 人脸识别模型的嵌入是连续的、可优化的——固定特征提取器,把「与目标模板距离最小」当成损失去优化一张合成图像,就能得到在该模型看来「是这个人」的近似人脸(公开研究方向;具体方法与成功率需核实具体论文)。含义:共享嵌入向量不等于共享安全数据。

漏洞二:模板不可撤销。 密码泄露可以改密码;特征模板一旦泄露,你不能更换自己的脸。所以对模板的保护级别应至少等同于原始生物特征:加密存储、访问审计、用途绑定。

工程结论:把「只存模板」当隐私方案,是把存储位置的问题误当成信息含量的问题。正确的问法是:这份数据能重建出什么?(3.9.4)

J13. 「对抗样本是过拟合造成的,加个检测器就能解决。」——两处都要纠正。

解答

① 不是过拟合:对抗样本在训练集上也存在,而且能跨模型迁移。把它归因为过拟合会导向「多训一会儿就好」的错误结论。

② 加检测器不带来安全性:在开放对抗环境下攻击是自适应的——攻击者知道你在用检测器,就会把「骗过检测器」纳入优化目标。此时防御与攻击变成迭代博弈,而攻击只需要找到一个漏洞,防御要堵住所有漏洞,成本对攻击方更有利。这就是鲁棒性研究普遍只接受「相对某个攻击预算」表述的原因。

更稳的方向:把防线建在不容易被单点绕过的地方——来源签名与溯源基础设施、多源交叉核实、允许「不确定 / 拒答」的系统设计;在对抗训练上则如实承认两条代价:训练成本上升与干净精度下降(3.9.3、3.9.5 的 think 框)。

B 组评估标记:J1 ☐ / J2 ☐ / J3 ☐ / J4 ☐ / J5 ☐ / J6 ☐ / J7 ☐ / J8 ☐ / J9 ☐ / J10 ☐ / J11 ☐ / J12 ☐ / J13 ☐(✓ / △ / ×)

C. 公式卡(默写公式 + 一句适用条件)

F1. 输出尺寸公式(含空洞)。

解答

Wout=⌊Win+2p−keffs⌋+1,keff=k+(k−1)(d−1).W_{\text{out}}=\left\lfloor\frac{W_{\text{in}}+2p-k_{\text{eff}}}{s}\right\rfloor+1,\qquad k_{\text{eff}}=k+(k-1)(d-1). 条件 / 注意:二维逐轴独立应用;窗口必须完整落在填充后的范围内,框架不补齐不完整位置(Win+2p−k<0W_{\text{in}}+2p-k&lt;0 直接报错)。两个特例随手可得:k=3,s=1,p=1k=3,s=1,p=1 → 尺寸不变;k=4,s=2,p=1k=4,s=2,p=1 → 精确减半(命题 3.2.2)。

F2. 参数量与计算量公式。

解答

Params=CoutCink2+Cout,MACs=HoutWoutCoutCink2,FLOPs≈2×MACs.\text{Params}=C_{\text{out}}C_{\text{in}}k^2+C_{\text{out}},\qquad \text{MACs}=H_{\text{out}}W_{\text{out}}C_{\text{out}}C_{\text{in}}k^2,\qquad \text{FLOPs}\approx2\times\text{MACs}. 三个直接推论:① 参数与 H×WH\times W 无关(图像放大一倍:参数不变、计算量涨 44 倍);② 参数按 k2k^2 涨(kk 从 3 到 7 涨 5.45.4 倍);③ 计算量按 CinCoutC_{\text{in}}C_{\text{out}} 涨(64→6464\to64 换成 256→256256\to256 涨 1616 倍)。偏置 CoutC_{\text{out}} 在大通道时可忽略(6464 对 36,86436{,}864 约 0.17%0.17\%),但核对模型总参数时必须加回来(命题 3.2.3)。

F3. 感受野与跳距递推。

解答

rl+1=rl+(k−1)jl,jl+1=jl⋅s,r_{l+1}=r_l+(k-1)j_l,\qquad j_{l+1}=j_l\cdot s, 初始条件:第一层直接作用于输入时 r1=kr_1=k、j1=sj_1=s。自检:k=1k=1 时 rr 不变。

三条工程结论:① 想要大感受野,下采样比堆层划算得多(纯堆 3×33\times3 到 101×101101\times101 需 50 层,每两层后接一次 2×22\times2 池化的方式 10 层就到 158158);② 感受野不是越大越好(分类偏好大感受野,分割检测的定位分支需要小跳距);③ 理论感受野 ≠ 有效感受野,后者通常只是前者的一小部分、且呈中心加权分布(命题 3.2.4、例 3.2.3)。

F4. 深度可分离卷积的省算比。

解答

设 Cin=Cout=CC_{\text{in}}=C_{\text{out}}=C、忽略偏置: ρ=Ck2+C2C2k2=1C+1k2(k=3, C=64⇒ρ≈0.127).\rho=\frac{Ck^2+C^2}{C^2k^2}=\frac{1}{C}+\frac{1}{k^2}\qquad\bigl(k=3,\ C=64\Rightarrow\rho\approx0.127\bigr). 条件:参数量与 MACs 的比值完全相同——因为输出面积在分子分母中约掉了。C≫k2C\gg k^2 时第一项可忽略,比值趋近 1/k21/k^2(因为大头是逐点卷积的 C2C^2)。含偏置时实测比值略大于该式(命题 3.2.6、例 3.2.4)。

F5. 转置卷积的输出尺寸。

解答

Wout=(Win−1)s−2p+k.W_{\text{out}}=(W_{\text{in}}-1)s-2p+k . 条件与注意:s=1s=1 时退化为对称式;s>1s&gt;1 时具体输出尺寸还依赖 output_padding,可落在长度为 ss 的一个区间内。它是「与卷积梯度同形」的线性映射 ATA^{\mathrm T},不是逆运算(卷积矩阵几乎总是奇异的);零插值 ++ 大步幅会带来棋盘格伪影(定义 3.2.6)。

F6. 残差网络的梯度结构。

解答

y=F(x)+x,∂y∂x=I+∂F∂x,y=F(x)+x,\qquad \frac{\partial y}{\partial x}=I+\frac{\partial F}{\partial x}, ∂L∂xl=∂L∂xL∏i=lL−1(I+∂Fi∂xi)=∂L∂xL[I+∑iJi+∑i<jJiJj+⋯ ],Ji:=∂Fi∂xi.\frac{\partial\mathcal L}{\partial x_l}=\frac{\partial\mathcal L}{\partial x_L}\prod_{i=l}^{L-1}\Bigl(I+\frac{\partial F_i}{\partial x_i}\Bigr)=\frac{\partial\mathcal L}{\partial x_L}\Bigl[I+\sum_i J_i+\sum_{i&lt;j}J_iJ_j+\cdots\Bigr],\quad J_i:=\frac{\partial F_i}{\partial x_i}. 读法:展开式里唯一不含 JJ 的项是 II,它就是不依赖任何权重的直通项,因此不可能被梯度下降「学掉」。但它是矩阵意义下的直通,一个具体参数收到的梯度大小仍取决于后续层的组合与总深度——「残差缓解梯度消失」不等于「梯度不会消失」(定理 3.4.1)。

F7. 自注意力的计算量与内存复杂度。

解答

一层多头自注意力(忽略头数,按总量计): 3Nd2⏟QKV 投影+2N2d⏟QKT 与加权+Nd2⏟输出投影=4Nd2+2N2d.\underbrace{3Nd^2}_{\text{QKV 投影}}+\underbrace{2N^2d}_{QK^{\mathrm T}\ \text{与加权}}+\underbrace{Nd^2}_{\text{输出投影}}=4Nd^2+2N^2d . 临界点:令含 MLP 的线性项 12Nd212Nd^2 与二次项 2N2d2N^2d 相等,得 N⋆=6dN^\star=6d(d=768d=768 时 46084608)。

两条读法:① 常规分辨率下注意力矩阵不是计算瓶颈(N=197N=197 时二次项只占 4.1%4.1\%,MLP 占 64%64\%);② 但二次项的显存是 N2N^2,它在内存上比在算力上更早成为限制(命题 3.5.1、例 3.5.1)。

F8. 窗口注意力为什么是线性的。

解答

Ω(W-MSA)=4hwC2+2M2hwC(关于 hw 线性),\Omega(\text{W-MSA})=4hwC^2+2M^2hwC\quad(\text{关于 } hw\ \text{线性}), 对全局注意力 4hwC2+2(hw)2C4hwC^2+2(hw)^2C(关于 hwhw 二次)。推导要点:每窗口 =4M2C2+2M4C=4M^2C^2+2M^4C,共 hw/M2hw/M^2 个窗口,相乘后 (hw)2(hw)^2 被常数 M2M^2 替换。代价:信息只能在窗口内流通——用移位窗口(下一层把窗口网格平移 ⌊M/2⌋\lfloor M/2\rfloor 个 token)在两层内完成跨窗口传递,且不增加参数与算子(命题 3.5.2、定义 3.5.3)。

F9. 分层学习率与 InfoNCE 的梯度。

解答

分层学习率:ηl=ηhead⋅α K−l\eta_l=\eta_{\text{head}}\cdot\alpha^{\,K-l},α∈[0.5,0.9]\alpha\in[0.5,0.9],ll 越小越浅。以 ηhead=10−3\eta_{\text{head}}=10^{-3}、四阶段、α=0.5\alpha=0.5 为例:10−3,5×10−4,2.5×10−4,1.25×10−410^{-3},5\times10^{-4},2.5\times10^{-4},1.25\times10^{-4}。

InfoNCE 的梯度(pikp_{ik} 为负样本上的 softmax 分布): ∂Li∂sik={−(1−pi,j(i)),k=j(i)+ pik,k≠i, j(i)⟹−∂Li∂zi 把 zi 往正样本拉、从负样本推开,\frac{\partial\mathcal L_i}{\partial s_{ik}}=\begin{cases}-(1-p_{i,j(i)}), &amp; k=j(i)\\ +\,p_{ik}, &amp; k\ne i,\ j(i)\end{cases}\qquad\Longrightarrow\qquad -\frac{\partial\mathcal L_i}{\partial z_i}\ \text{把}\ z_i\ \text{往正样本拉、从负样本推开}, 权重分别是 (1−ppos)(1-p_{\text{pos}}) 与 pikp_{ik}:难负样本主导学习;正样本已分对时吸引项权重 →0\to0;τ\tau 在分母上,τ\tau 越小梯度整体越大(方法 3.6.1、推导 3.6.1)。

F10. IoU、AP 与 mIoU。

解答

IoU=∣A∩B∣∣A∪B∣,mIoU=1C∑c∣Pc∩Gc∣∣Pc∪Gc∣,\mathrm{IoU}=\frac{|A\cap B|}{|A\cup B|},\qquad \mathrm{mIoU}=\frac{1}{C}\sum_c\frac{|P_c\cap G_c|}{|P_c\cup G_c|}, AP:把某类别的预测按置信度降序排列 → 逐 rank 判定 TP / FP → 维护累计值得到 precision =TP/(TP+FP)=\text{TP}/(\text{TP}+\text{FP}) 与 recall =TP/∣GT∣=\text{TP}/|\text{GT}| → 用插值法求 PR 曲线下面积。

两种口径:VOC 风格在 r=0,0.1,…,1.0r=0,0.1,\dots,1.0 上取「右侧最大 precision」再平均;COCO 风格用 101 点 recall ++ precision 单调包络,并对 IoU=0.50:0.05:0.95\mathrm{IoU}=0.50{:}0.05{:}0.95 共 1010 个阈值求平均。mAP == 各类别 AP 的平均(方法 3.7.1)。

F11. FGSM 的一步更新与 ℓ∞/ℓ2\ell_\infty/\ell_2 的差别。

解答

x′=x+ϵ sign(∇xL(f(x),y))(并在生成后 clamp(x′,0,1)).x&#x27;=x+\epsilon\,\mathrm{sign}\bigl(\nabla_x\mathcal L(f(x),y)\bigr)\qquad(\text{并在生成后 } \mathrm{clamp}(x&#x27;,0,1)). ℓ∞\ell_\infty:最优解在每个坐标上独立取边界(符号向量)——把扰动平摊到每个像素(更隐蔽)、实现只需梯度的符号;ℓ2\ell_2:最优方向沿梯度方向,max⁡∥δ∥2≤ϵwTδ=ϵ∥w∥\max_{\lVert\delta\rVert_2\le\epsilon}w^{\mathrm T}\delta=\epsilon\lVert w\rVert,取 δ=ϵw/∥w∥\delta=\epsilon w/\lVert w\rVert。常用 ϵ=8/255≈0.031\epsilon=8/255\approx0.031(像素范围 [0,1][0,1])(例 3.9.2、3.9.3)。

F12. CLIP 的对称对比损失与双塔的算力。

解答

L=12[−1N∑ilog⁡esii∑jesij−1N∑jlog⁡esjj∑iesij],sij=fI(xi)TfT(tj)∥fI(xi)∥ ∥fT(tj)∥/τ.\mathcal L=\frac{1}{2}\Bigl[-\frac1N\sum_{i}\log\frac{e^{s_{ii}}}{\sum_j e^{s_{ij}}}-\frac1N\sum_{j}\log\frac{e^{s_{jj}}}{\sum_i e^{s_{ij}}}\Bigr],\qquad s_{ij}=\frac{f_I(x_i)^{\mathrm T}f_T(t_j)}{\lVert f_I(x_i)\rVert\,\lVert f_T(t_j)\rVert}\Big/\tau . 负样本来源:同一 batch 内的其他 N−1N-1 个文本 / 图像(不需要额外增强)。

算力:双塔可离线预计算图像向量,NN 张图 +M+M 条查询的编码次数是 N+MN+M;交叉编码器要 N×MN\times M。代价是没有交互层 ⇒ 无法表达组合关系(定义 3.8.1、例 3.8.2)。

C 组评估标记:F1 ☐ / F2 ☐ / F3 ☐ / F4 ☐ / F5 ☐ / F6 ☐ / F7 ☐ / F8 ☐ / F9 ☐ / F10 ☐ / F11 ☐ / F12 ☐(✓ / △ / ×)

D. 陷阱卡(每题给一个错误说法,指出错在哪)

T1. 「核的形状是 (Cin,Cout,k,k)(C_{in},C_{out},k,k)。」

解答

反了。 核的形状是 (Cout,Cin,k,k)(C_{\text{out}},C_{\text{in}},k,k);nn.Conv2d(64, 32, 3) 表示输入 64 通道、输出 32 通道,不是反过来——这是形状报错十有八九的来源。另外两条常错:输出通道数由核的个数决定(完全自由的超参数),唯一硬约束是核的深度 =Cin=C_{\text{in}};1×11\times1 卷积也有偏置(瓶颈块核对时的 +64+64 / +256+256 就是它,漏掉会以为公式算错)(3.2、3.2 的误解框)。

T2. 「参数共享意味着所有位置的输出一样。」

解答

错。共享的是权重,不是输出。 不同位置的输入不同,输出自然不同;共享带来的是「检测器一致」,不是「响应一致」(3.1 的误解框)。附带纠正另一条常见的:全连接层能表示卷积(把大部分权重置零并令其余位置相等),但那是「表示能力」层面——卷积的价值在统计效率与优化难度层面,那个等效解在全连接参数化下极难被梯度法找到。

T3. 「理论上算的参数量就是真机上的推理速度。」

解答

错。MACs 只统计主要乘加项,忽略了激活函数、归一化、偏置加法与显存搬运;真实耗时还取决于算子效率与访存。两条具体例子:① BN 的额外计算量在 FLOPs 上相对卷积约 0.3%0.3\%(可忽略),但它需要两次全张量归约与读写,内存带宽上的代价比 FLOPs 大得多——这是「BN 拖慢小模型推理」的实际原因(例 3.3.3(c));② 小核堆叠省参数、增非线性,但中间激活更多、并行度更低、延迟更高,所以在延迟敏感场景「大核 ++ 深度可分离」反而更划算(3.4 的误解框)。

T4. 「转置卷积是把下采样丢掉的信息恢复回来。」

解答

不能。 正向卷积把多个不同输入映射到同一输出(多对一),信息此时不可逆地丢失;转置卷积只把维度放大回来,既不能恢复被平均掉的信息,也无法保证 ATAx=xA^{\mathrm T}Ax=x(卷积矩阵几乎总是奇异的)。分割的边界精度靠跳连 / 高分辨率特征保住,而不是靠上采样算子(定义 3.2.6、3.7.4)。

T5. 「Dropout 概率越大正则越强,卷积特征图上逐元素丢弃也一样有效。」

解答

两处错:① 过强的 Dropout 会欠拟合(不是越强越好);② 卷积特征图上必须按通道丢。逐元素 Dropout 的前提是「相邻单元独立携带信息」,这在全连接层大致成立,但在卷积特征图上明显不成立——相邻像素来自高度重叠的感受野,是同一模式的冗余副本,逐元素丢弃几乎总能被邻居「补上」,正则化被稀释。正确做法是 SpatialDropout(nn.Dropout2d):对每个 (B,C)(B,C) 采样一个掩码并广播到整张 H×WH\times W。更一般的原则是掩码要作用在语义上有意义的单位上(卷积里是通道,Transformer 里是 token)(定义 3.3.5)。

T6. 「BN 的偏置参数无关紧要,所以可以去掉。」

解答

注意方向。 是卷积层的偏置在接 BN 时冗余(BN 的归一化把它完全减掉,可设 bias=False);而 BN 自己的 β\beta 是必需的——它恢复了被减去均值的能力。两句都对的前提是别把两者搞混(例 3.3.3(b)、3.3 的误解框)。

T7. 「不做输入归一化也没关系,反正网络会学。」

解答

错,而且是小数据训练失败的高频原因。 输入尺度直接影响首批激活的方差与 BN 统计:把 00–255255 的原始值直接送进网络会让首批激活量级放大 255255 倍,BN 的方差估计与初始学习率都会失衡。正确做法:① 缩放(÷255\div255);② 按训练集统计量做 z-score(ImageNet 的 mean =[0.485,0.456,0.406]=[0.485,0.456,0.406]、std =[0.229,0.224,0.225]=[0.229,0.224,0.225],顺序 RGB);③ 统计量必须冻结(用测试集统计量 = 数据泄漏);④ 与预训练权重保持一致;⑤ 每步打印第一批数据的 min / max / mean / std 核对。三个常见错误:验证集忘了缩放、用 ImageNet 统计量但把图转成 BGR、增强放在归一化之后导致像素越界(3.3.5)。

T8. 「迁移学习一定能提升,先上全网络微调再说。」

解答

两处错:① 迁移是条件性结论——源域与目标域差异很大时(如把自然图像骨干直接用到点云 / 频谱图),浅层特征也不再通用,收益可能为负甚至不如从零训练;② 小数据下相反:随机初始化的头会产生大而嘈杂的梯度,直接全网络微调会破坏骨干已学好的通用特征。正确顺序是「冻结 → 观察 → 逐步解冻」,骨干学习率比头小约一个量级。另外两个高频坑:预处理与骨干不匹配(会导致初始 loss 异常高);冻结骨干时若它带 BN,train() 模式下运行统计量仍会被更新——正确做法通常是把 BN 也切到 eval() 或改用 GroupNorm 骨干(定义 3.6.1、例 3.6.1)。

T9. 「IoU 既能当损失也能当指标,所以可以直接拿来做梯度。」

解答

不行。 IoU 在框不重叠时恒为 00、梯度消失,无法指导「该往哪个方向靠近」。必须用有非零梯度的替代量:GIoU(引入最小闭包框,不重叠时仍有非零梯度)、DIoU(加入中心点距离)、CIoU(再加长宽比一致性)。另一处相关纠错:IoU 计算边界不应算入面积(用 x2−x1x_2-x_1 而不是 x2−x1+1x_2-x_1+1),否则会有几个百分点的偏差,在阈值附近改变正负样本划分(定义 3.7.2、3.10.5)。

T10. 「视觉幻觉是因为模型没看清图像。」

解答

更准确的说法是语言先验压过了视觉证据。 这类模型逐 token 生成输出,每一步都在最大化下一个词的概率;当视觉证据弱(小物体、遮挡、模糊)而某个物体在语言上非常常见(「桌子旁边通常有椅子」)时,模型就写出那个不存在的东西。这说明模型并不总是以图像为条件做判断——也在部分情况下以「这段话该怎么写下去」为条件。

评测后果:直接用「看图说话」打分难以区分「描述准确」与「语言流畅」,所以主流做法是把问题设计成可核对的封闭形式(如 POPE 的「图中是否有 X?」二分类),并报告 accuracy / precision / recall / F1(定义 3.8.4)。

T11. 「多尺度推理时,把每个尺度的框直接汇总起来就行。」

解答

忘了坐标还原。 每个尺度上模型看到的是缩放后的图像,得到的框坐标也是缩放图坐标,必须除以缩放因子才能回到原图,否则多尺度结果会完全错位——而且不报错,属于最隐蔽的一类 bug。同类不报错的 bug 还有三条:框坐标顺序错(把 (x1,y1,x2,y2)(x_1,y_1,x_2,y_2) 当 (x,y,w,h)(x,y,w,h),训练 loss 能降但框乱飞)、增强只改图不改框(检测特有)、NMS 条件方向写反(表现为「检测器只输出一个框」)。对策是把它们写成显式断言与可视化检查(3.10.2、3.10.5)。

T12. 「样本量不足的子群,先并进总体指标里报个平均值就可以了。」

解答

不可以——「样本不足」本身就是一个不能部署的结论。 两个理由:① 小样本子群上的指标方差很大,「看起来有差异」也可能只是噪声,所以要么给区间估计,要么明确说无法评估;② 总体平均会把占比小的子群的高错误率稀释掉——占比 90%90\% 的子群错误率 1%1\%、占比 10%10\% 的子群错误率 12%12\%,总体仍给出 97.9%97.9\%(例 3.9.1)。

对应到出口判据:「无法获得代表性的评估数据(目标人群样本量不足以做出可靠估计)」是应当停下重新设计系统的条件之一,而不是用总体指标掩盖它的理由(3.9.5)。

D 组评估标记:T1 ☐ / T2 ☐ / T3 ☐ / T4 ☐ / T5 ☐ / T6 ☐ / T7 ☐ / T8 ☐ / T9 ☐ / T10 ☐ / T11 ☐ / T12 ☐(✓ / △ / ×)

导出到 Anki / CSV

  1. 打开 Anki → 新建卡组「DL-第 3 讲」(建议再按 A/B/C/D 建四个子卡组,方便按组复习)。
  2. 用「问题 → 答案」逐条录入:最简单的方式是在纯文本里按 问题<Tab>答案 组织(答案里的公式保留 $...$ 原文,Anki 会原样显示;若装了 LaTeX 插件可正常渲染),然后用 Anki 的「文件 → 导入」选择 Tab 分隔,把第一列映射为「正面」、第二列映射为「背面」。
  3. 复习节点:当天 / 隔天 / 第 3 天 / 第 7 天(对应本教程的间隔复习安排)。当天只做 A 组与 C 组公式卡;隔天做 B 组;第 3 天做 D 组陷阱卡;第 7 天做全卡组混排(同时用 综合自测卷 做一次闭卷计时)。
  4. 每轮只重做标 △ 与 × 的卡;出现「能背出但说不出适用条件」的情况,一律按 △ 处理——本讲绝大多数错误都发生在条件上(卷积优于 MLP 的条件、ViT 需要数据的条件、迁移有效的条件、鲁棒性相对攻击预算的条件)。