题目重点:卷积共享参数、局部感受野、patch注意力与尺度成本,用同一图像输入比较并界定适用条件。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 问CNN与全连接差异及适用数据; HM问CNN/vision transformer差异。同核视觉归纳偏置题合并为一篇,保留两个追问。
- 训练合同为固定224×224 RGB图像;卷积3×3、64输出通道、无groups,ViT patch16×16、d=768。实际数据规模/硬件/预训练权重题目未明确。
- 以标准全局attention的ViT比较,不把窗口式/混合视觉架构统统算成同一复杂度。
解题路线
- 全连接把图展平成长度HWC向量,每输出单元都连所有像素,参数为HWC·D+D;不自带空间邻近和共享约束。它仍可学习空间关系,但数据和参数成本与图像结构不匹配时容易浪费。
- 卷积用局部kernel在各位置共享参数,参数k²C_in C_out+C_out,不依输出位置数增加;MACs约H_out W_out k²C_in C_out。边界/padding/stride与pooling会影响平移等变性,卷积并不是无条件平移不变。
- CNN适合局部结构有意义的图像、音频时频图、时间序列;1D/2D/3D核按结构选。把任意打乱的表格列按邻接放进CNN会引入无根据局部关系。长距离关系可靠加深感受野、dilation或混合attention,不说CNN只能看局部。
- ViT把不重叠patch展平后投影成token,加位置表示,Transformer跨patch交互。缺位置表示时自注意力对输入排列具有相应对称性,不能自然恢复绝对图像坐标。patch越大token少但细节更粗,patch越小attention成本增。
- 比较可分为局部/共享归纳偏置、全局交互、预训练迁移和资源预算。训练数据少且从零开始时强归纳偏置常有利,但不能声称所有小数据CNN必胜:强预训练的ViT和适当增广可能改变结论。必须在相同数据/分辨率/延迟约束下实测。
- 标准ViT每层投影/FFN约O(Nd²),attention约O(N²d),attention权重显存传统实现O(hN²)。FlashAttention改变IO/中间显存,不把全局attention算术变成线性;窗口attention复杂度不同但跨窗口交互也不同。
- 位置插值、patch边缘、输入尺寸不可整除、padding mask和分类头都是迁移边界。检测/分割还要多尺度输出,不能以一项分类accuracy替代密集预测质量。ViT原论文作为架构参考:https://arxiv.org/abs/2010.11929。
手动走一遍
224²×3展平后接64个全连接单元,参数150528×64+64=9,633,856;3×3卷积3→64参数3²×3×64+64=1,792,但卷积输出有224²个空间位置,二者输出形状不同,参数省不等于公平吞吐比较。patch16得到14²=196 token,加CLS为197;分辨率增至448、patch不变有785 token,N²项变为616225/38809≈15.88倍,投影项约3.98倍。
规模与取舍
卷积成本随输出像素数与kernel通道乘积增长;标准ViT同时有N²d与Nd²项。只报attention平方会遗漏小N、大d时投影/FFN的主要开销。参数、激活、MAC与实际GPU延迟分别核算。
易错点与追问
容易失分的边界
- 共享参数当成共享激活。
- 把平移等变说成完全平移不变。
- 无位置的token顺序自动可辨。
- 用不同输出维度证明全连接慢若干倍。
- 所有Transformer都套全局N²成本。
继续深挖
- 输入分辨率提高时位置embedding如何迁移?
- CNN怎么扩大有效感受野?
- patch变小对细粒度任务与算力如何取舍?
- 为何预训练数据/增广会改变从零训练结论?
技术参考
- ViT 原论文:公开方法/语言合同参考,本文示例参数自拟,不代表题目数据或实际项目实现。
