【从会用模型到理解CV3】为什么卷积、ResNet、Attention 会有效?
学 CV 的过程中,几乎没人绕得开这三个词:
- 卷积(Convolution)
- ResNet
- Attention
它们太常见了。
常见到很多时候,我们会默认自己“已经懂了”。
比如:
- 卷积就是提特征的
- ResNet 就是加 shortcut 的
- Attention 就是让模型关注重点
这些说法当然不算错,但如果只停留在这里,其实还是太表面了。
因为真正值得想清楚的问题不是“它们是什么”,而是:
- 它们为什么会出现?
- 它们分别在解决什么问题?
- 为什么这些设计在视觉任务里会长期有效?
- 它们各自的优势和局限是什么?
如果这些问题没有想透,那后面看各种卷积变体、残差块、注意力模块时,就很容易变成“见一个记一个”,而不是建立一条真正清晰的理解路径。
所以这一篇,不想把它写成模块百科,而更想把它写成一篇问题驱动的解释:
卷积、ResNet、Attention,本质上分别在补哪一块短板?
一、先说结论:这三个东西,其实解决的是三类不同问题
如果把这篇文章先压缩成一句话,我会这样概括:
- 卷积 解决的是:如何高效地从图像中提取局部模式
- ResNet 解决的是:网络变深之后,信息和梯度怎么稳定传递
- Attention 解决的是:哪些信息更重要,以及远距离关系如何建模
这三者并不是互相替代的关系,而更像是在网络演化过程中,分别补上不同缺口。
所以理解它们最好的方式,不是逐个孤立记忆,而是把它们放进同一条链里看:
先有局部特征提取的问题,于是有了卷积;
再遇到深层网络难训练的问题,于是有了 ResNet;
后来发现局部建模还不够、信息权重也不能一视同仁,于是 attention 越来越重要。
这条逻辑链一旦顺了,很多后面的模型变化都会更容易理解。
二、为什么卷积会有用?
如果从今天往回看,卷积几乎像是视觉模型里的“基础设施”。
但它之所以会成为基础设施,并不是因为“它是传统”,而是因为它刚好特别适合图像这种数据。
1. 图像不是普通向量,而是有空间结构的数据
一张图像最重要的特点之一,是相邻像素之间通常不是独立的。
也就是说,图像不是一堆打乱顺序的数字,而是有明确空间邻接关系的二维信号。
例如:
- 边缘通常体现在局部区域的亮度突变
- 纹理体现在局部区域的重复模式
- 轮廓体现在一系列相邻区域的结构变化
所以如果模型想理解图像,它首先就得有能力处理“局部邻域里的模式”。
而卷积刚好就是这样一种操作:
它不是全局一把抓,而是在局部窗口里扫描模式。
这让它天然适合视觉任务。
2. 卷积的本质,是局部模式匹配
从更直观的角度讲,卷积核可以理解成一个小小的“模式探测器”。
比如一个 (3\times3) 的卷积核,并不是在理解整张图,而是在问:
- 这个小区域里有没有某种边缘?
- 有没有某种纹理?
- 有没有某种局部变化?
不同卷积核会学到不同类型的局部模式。
随着层数变深,这些局部模式又会被进一步组合成更复杂的结构。
所以卷积的核心价值可以概括成一句话:
它让模型能高效地从局部区域中提取可重复、可组合的视觉模式。
3. 为什么说卷积的归纳偏置特别适合视觉?
卷积之所以长期有效,还有一个关键原因:它带有非常强的视觉归纳偏置。
最重要的几个偏置包括:
(1)局部性
卷积默认认为:
图像中最重要的基础信息,首先存在于局部邻域里。
这和人类视觉的很多经验其实是一致的。
我们认边缘、认纹理、认局部形状,往往都从局部开始。
(2)参数共享
同一个卷积核会在整张图上滑动使用。
这意味着模型默认相信:
某种有意义的模式,不会只出现在一个固定位置,而可能在很多位置重复出现。
比如“边缘”不会只存在于左上角,纹理也不会只存在于中间。
参数共享正好对应了这一点。
(3)平移等变性
如果图像中的某个模式平移了,卷积响应也会跟着平移。
这让卷积天然适合捕捉“同一物体在不同位置出现”的情况。
所以你会发现,卷积强,不只是因为它能算特征,而是因为它对图像做了很合理的先验假设。
4. 卷积为什么高效?
除了适合图像,卷积还有一个很现实的优点:高效。
如果用全连接方式处理一张图像,参数量会大得惊人,而且会完全破坏图像的空间结构。
卷积则通过局部连接和参数共享,大大减少了参数量和计算量。
所以卷积同时满足了三件事:
- 结构上适合图像
- 表达上能提局部模式
- 工程上足够高效
这就是为什么它会成为 CV 时代的长期主角。
三、卷积解决了什么,又没解决什么?
理解一个经典模块,最重要的不只是知道它“强”,还要知道它的边界在哪里。
卷积解决了什么?
1. 它解决了局部特征提取问题
这一点是最核心的。
图像里最基础的视觉模式,比如边缘、角点、纹理,本来就更适合通过局部扫描来提取。
2. 它解决了参数规模和空间结构兼顾的问题
相比全连接,卷积让模型在不破坏图像结构的前提下,仍然保持较高计算效率。
3. 它解决了视觉任务中的一部分不变性问题
比如某些模式出现在图像不同位置时,卷积都能较自然地响应。
但卷积也有明显局限。
4. 它天然更偏局部,长距离关系建模不直接
如果两个区域相距很远,卷积要靠很多层叠加才能让它们间接建立联系。
这不是说做不到,而是路径比较长、效率比较低。
5. 它对“该关注什么”没有显式动态选择能力
标准卷积是固定权重、固定扫描方式。
它不会像 attention 那样动态决定“这里更重要,那里次要”。
所以卷积非常强,但它更擅长:
稳定地提局部结构,而不是灵活地做全局关系建模和动态信息分配。
也正因为如此,后面才会有越来越多补足这些短板的设计。
四、为什么网络变深之后,ResNet 会变得重要?
卷积网络一开始变强,很大程度上依赖“更深”。
因为更深意味着:
- 感受野更大
- 表达能力更强
- 可以逐层构造更复杂的特征
但问题很快就来了:
网络是不是越深越好?
理论上更深的网络可以表示更复杂的函数,听起来应该更强。
可实际训练时,事情没那么简单。
1. 深层网络最大的问题,不是“表达不够”,而是“优化困难”
很多人第一次学 ResNet,会以为它主要是在“增强表达能力”。
其实更准确地说,ResNet 首先是在解决优化问题。
因为网络一旦很深,就容易出现:
- 梯度消失
- 梯度爆炸
- 训练不稳定
- 前面层的信息越来越难保留
- 后面层即使参数更多,也不一定真学得更好
也就是说,深层网络不是不能强,而是经常训练不出来那个应有的强度。
这才是 ResNet 真正要解决的核心矛盾。
2. ResNet 的关键,不是“更复杂”,而是“让信息更好走”
ResNet 最经典的公式是:
$$
y = F(x) + x
$$
看起来很简单,就是在某个变换 (F(x)) 后面,把输入 (x) 直接加回来。
但这件事的意义非常大。
它意味着:
某一层不必强迫自己完全重写输入,而可以只学习一个“增量修正”。
换句话说,网络不用每一层都从头创造新表示,而是可以在原有信息基础上慢慢改。
这个想法非常重要,因为它让网络学起来容易得多。
五、ResNet 为什么有效?
ResNet 有效,至少可以从两个层面理解。
1. 它改善了前向信息流
在普通深层网络里,信息必须一层一层往前传。
中间如果有些细节被压掉了,后面很可能就回不来了。
而残差连接提供了一条“旁路”,让原始信息可以更顺畅地穿过很多层。
这意味着:
- 低层信息不容易完全被覆盖
- 深层表示可以更稳定地建立在已有表示之上
- 网络不至于层数一深就把早期信息弄丢得太厉害
2. 它改善了反向梯度流
训练时更关键的是梯度怎么传回来。
如果梯度在很深的网络里层层衰减,前面很多层就很难有效更新。
残差连接相当于给梯度也开了一条更顺畅的路径。
这大大降低了深层网络训练的难度。
所以从更本质的角度看,ResNet 之所以重要,不是因为它“花哨”,而是因为它让:
更深的表示学习真正变得可训练。
六、ResNet 到底解决了什么问题?
如果像前面那样总结:
- 卷积解决的是“局部模式怎么高效提”
- 那么 ResNet 解决的就是“深层网络里的信息和梯度怎么稳定传”
这也是为什么后来几乎所有深一点的网络,都会或多或少借鉴残差思想。
因为它触及的是一个非常底层的结构问题:
信息不能只被处理,还要能顺畅通过。
所以你以后看很多变体时,可以少纠结名字,多问一个问题:
- 这个结构有没有改善信息流?
- 它是不是在降低深层优化难度?
- 它是不是在避免重要表示被层层重写后丢失?
如果答案是“是”,那它大概率就在借 ResNet 的核心思想。
七、ResNet 的局限是什么?
虽然 ResNet 很重要,但它也不是终点。
1. 它改善了信息流,但不直接解决“看什么更重要”
残差连接主要解决的是“信息能不能顺畅过”,而不是“信息该怎么分配权重”。
2. 它还是以卷积式局部建模为基础
所以它并没有从根本上改变卷积更偏局部的特点。
远距离关系仍然要靠层层堆叠去间接建立。
3. 它不直接提供动态全局建模能力
换句话说,ResNet 让网络更容易训练、更深、更稳,但它并没有显式回答:
- 图里哪些区域更关键?
- 很远的两个区域之间如何快速建立关系?
- 不同位置/通道的重要性是否应该动态变化?
这些问题,就把我们自然引向 attention。
八、为什么 attention 会越来越重要?
在卷积和 ResNet 都已经很强之后,CV 研究还在不断往前走。
这时候一个越来越突出的现实是:
不是所有信息都同样重要,也不是所有依赖关系都只发生在局部。
这其实对应了两个新问题。
问题1:信息应该被一视同仁吗?
一张图里,显然不是所有区域都同等重要。
比如:
- 目标区域比大面积背景更关键
- 目标边界比纯背景区域更关键
- 某些通道可能承载更有效的语义
- 某些局部结构对分类/检测决策影响更大
如果模型对这些信息全部平均处理,往往不够高效,也不够准确。
问题2:远距离关系怎么建?
有时候,一个区域是否重要,不只取决于它自己,还取决于别的区域。
比如:
- 一个局部纹理是不是目标,要结合上下文判断
- 一个小区域是否属于前景,要看周围结构
- 某些模式需要和远处另一个区域共同解释才有意义
而这些关系,标准卷积做起来并不直接。
它不是做不到,而是路径长、耦合弱、效率不高。
于是 attention 的价值就越来越明显。
九、attention 的本质到底是什么?
很多人会说,attention 就是“让模型关注重点”。
这句话没错,但还可以再精确一点。
我更喜欢这样理解:
attention 的本质,是一种动态的信息加权与选择机制。
它做的核心事情不是“凭空创造新信息”,而是:
- 评估不同信息之间的相关性
- 根据相关性给不同部分分配不同权重
- 再把这些信息按权重聚合起来
写成非常抽象的形式,就是:
$$
\text{output}=\sum_i \alpha_i v_i
$$
这里的 $\alpha_i$ 表示权重,$v_i$ 表示被加权的信息。
重点在于:这个权重不是固定写死的,而是动态算出来的。
所以 attention 和普通卷积很大的不同在于:
- 卷积更像固定模板扫描
- attention 更像根据当前输入动态决定“该看谁、看多少”
十、attention 为什么会有效?
attention 有效,最核心的原因其实有两个。
1. 它能做动态权重分配
不是每张图、每个区域、每个通道的重要性都一样。
attention 允许模型根据当前输入自己决定:
- 哪个位置更值得看
- 哪个通道更关键
- 哪些特征应该被加强
- 哪些信息应该被抑制
这使得模型处理信息的方式更灵活。
2. 它能更直接地建立长距离依赖
特别是在 self-attention 里,一个位置和另一个位置之间的关系可以直接建模,而不一定非要靠很多层局部卷积间接传播。
这让模型更容易整合全局上下文。
在很多任务里,这一点非常重要。
所以可以说,attention 补上的,是卷积和残差网络长期存在的一块短板:
动态选择信息 + 更直接地建模全局关系。
十一、attention 解决了什么,又没解决什么?
理解 attention 也要讲边界。
它解决了什么?
(1)信息权重不均的问题
它让模型不必平均对待所有信息。
(2)远距离依赖建模的问题
它让全局关系更容易显式建立。
(3)上下文整合的问题
某个局部到底重要不重要,可以借助全局语境判断。
它没解决什么?
(1)它不天然比卷积更适合局部细节
卷积对边缘、纹理、局部结构依然非常强。
attention 并不天然替代这部分优势。
(2)它通常更贵
尤其标准 self-attention 在高分辨率视觉任务里,计算和显存代价很高。
(3)它也不是“加了就一定涨”
如果任务本身主要瓶颈不是全局关系,或者数据量、训练策略跟不上,attention 并不一定稳稳赢。
所以 attention 强,但不是万灵药。
它的优势最能体现在:
- 需要上下文建模
- 需要动态聚焦
- 需要跨区域整合信息
的场景里。
十二、把三者放在一起看,就更清楚了
到这里,你其实可以把它们三者摆成一个很清楚的分工图:
卷积
负责:高效提取局部模式
它最擅长:
- 边缘
- 纹理
- 局部结构
- 低层到中层视觉特征
ResNet
负责:让深层网络的信息和梯度更顺畅地流动
它最擅长:
- 稳定训练更深网络
- 保持表示连续性
- 改善前向与反向路径
Attention
负责:动态分配信息权重,并更直接建模长距离关系
它最擅长:
- 重点区域增强
- 全局上下文建模
- 通道/空间动态重加权
所以这三者不是谁彻底取代谁,而更像是现代视觉模型里的三种核心能力:
- 局部建模能力
- 稳定信息流能力
- 动态全局建模能力
真正强的模型,往往不是单押某一种,而是把这几种能力组合得比较好。
十三、为什么现代CV模型越来越喜欢“卷积 + 残差 + attention”?
你现在再看很多模型,会发现一个非常常见的现象:
backbone 里有卷积,
基本块里有残差,
某些位置再插入 attention 或类似加权模块。
这不是巧合,而是因为这三者确实分别对应了视觉建模中的三类长期需求:
- 图像一定需要局部模式提取
- 深层网络一定需要稳定训练和稳定信息流
- 复杂任务一定会受益于更智能的信息选择和上下文整合
所以现代模型经常不是“换掉卷积”,而是:
- 用卷积保局部
- 用残差保可训练性
- 用 attention 补动态关系和全局感知
这样组合起来更合理。
十四、从“问题”而不是“名词”去理解它们,才最有用
我越来越觉得,学这些经典模块时,最怕的是只记结论:
- 卷积好
- ResNet 强
- attention 火
这样很容易停留在名词层面。
真正有用的理解方式,是始终追问:
对卷积:
- 为什么图像适合局部扫描?
- 卷积的强归纳偏置到底带来了什么?
- 它的局部优势会不会变成全局建模短板?
对 ResNet:
- 深层网络难训练到底难在哪?
- shortcut 为什么能改善优化?
- 它是在增强表达,还是在让表达更容易学出来?
对 attention:
- 它是在补哪种信息处理短板?
- 为什么“动态权重分配”比固定卷积更灵活?
- 它什么时候真正有价值,什么时候只是增加开销?
当你这么问时,这些模块就不再只是“知识点”,而会变成你以后看论文、改模型时的分析工具。
十五、对CV学生来说,最应该真正记住的是什么?
如果让我把整篇文章最后压缩成三句话,我会这样写:
卷积让模型会看局部。
ResNet 让深层网络能学得动。
Attention 让模型知道该重点看什么,并能看得更远。
这三件事,恰好对应了视觉模型里最基础的三种能力。
所以以后你再看一个新模型时,不妨先问它:
- 它的局部建模是靠什么完成的?
- 它的信息流和梯度流是怎么保证的?
- 它有没有动态建模重点信息和全局关系的能力?
你一旦开始这样看,很多复杂结构都会变得没那么乱。
结语
卷积、ResNet、Attention 之所以会成为经典,不是因为它们只是“历史上很火的模块”,而是因为它们分别抓住了视觉建模里三个非常根本的问题:
- 如何提局部特征
- 如何让深层网络可训练
- 如何动态建模重要信息与全局关系
所以真正理解它们,不应该停留在“它们是什么”,而要继续问:
它们为什么会存在?又分别填补了什么结构空缺?
当你开始从这个角度去看模型时,后面遇到各种卷积变体、残差单元、通道注意力、空间注意力、自注意力、混合架构时,就会更容易抓住本质,而不是被名字牵着走。