⭐ 深度学习入门体系(第 16 篇): ViT:为什么 Transformer 能征服图像世界?
⭐ 深度学习入门体系(第 16 篇): ViT:为什么 Transformer 能征服图像世界?
——CNN 称霸多年,为什么会输给一个“处理文本的模型”?
如果你几年前问深度学习圈的人:
CNN 是不是处理图像的最终方案?
绝大多数人都会说:是的。
但 2020 年之后,这个答案改变了。
Transformer(本来是做 NLP 的)开始统治图像领域。
最典型的模型,就是 Vision Transformer(ViT)。
今天我们要回答:
CNN 为什么会败给 Transformer?
ViT 的核心思想到底是什么?
为什么切成小块就能改变图像处理的格局?
这一篇全部讲清楚。
文章目录
🎨 一、CNN 为什么会遇到“上限”?
CNN 在图像领域打了十几年,AlexNet、VGG、ResNet、ConvNeXt…
它们都依赖同一种核心结构:
局部卷积(local convolution)
只看邻域信息(3×3、5×5…)
这带来了三个“隐性问题”:
1)局部视野问题
卷积只能看局部,想看到全局要不断堆层。
这就像:
你看一幅画,只能通过一个小洞偷看
为了看全局,你得把洞连起来,挖得越来越大
这非常累。
2)不擅长建模长距离关系
如果图像两边有相关性,CNN 要穿越几十层才能让它们交流。
这导致 CNN 对“全局结构”不敏感。
3)卷积是一种“固定规则”
卷积核是固定移动的过滤器。
它不会“自适应地看重点”,不如注意力机制灵活。
总之:
在大规模数据、长距离结构、全局模式上,CNN 已经到天花板。
于是有人想:
既然 Transformer 在 NLP 中可以全局看上下文,
那把它用到图像上是不是更强?
答案就是:是的。
而且强得多。
🟥 二、ViT 的核心突破:把图片当“句子”处理
CNN 把图像作为二维网格处理;
ViT 则完全推翻这个思想:
把图像切成小 patch
把每个 patch 当成一个 token
用 Transformer 编码整幅图像
示意图:
图像 → 切成 16×16 小块 → 线性投影 → 位置编码 → Transformer 编码
这就像:
一幅画变成了由很多“词”组成的句子,
Transformer 就能像读文章一样理解它。
为什么这样做可行?
因为自然图像里的模式和语言一样:
- 存在结构
- 存在局部关系
- 存在全局依赖
- 存在需要注意的重点
ViT 让模型在图像上获得了语言模型那种“全局理解能力”。
📘 三、Attention 为什么比卷积强?
核心区别是:
卷积:固定规则
注意力:动态选择重点**
卷积每次都用同一组权重扫描整幅图。
像一个老师,不管学生(像素)表现如何,都用同一标准评分。
Attention 完全不同:
Attention 会根据内容,动态决定谁更重要。
类比一下:
CNN 像固定录播课程:
- 同样内容给所有学生看
- 不会因人而异
Transformer 像一对一辅导:
- 根据学生的反应即时调整
- 哪个地方看不懂重点讲哪个
这就是注意力能建立全局关系的原因:
- A 像素可以直接“注意”到 1000 个像素外的 B
- 不需要堆几十层卷积来传播
🔍 四、ViT 的结构其实非常简单
ViT 的整体流程:
1)Patch Embedding:
将 16×16 的 patch 展平 → 线性层 → 得到 token
2)添加位置编码(positional embedding)
因为 Transformer 不知道图像的“空间结构”
所以必须告诉模型 patch 的位置。
3)Transformer Encoder(核心)
多头注意力
前馈网络
LayerNorm
Residual 残差连接
4)Class Token
加一个 CLS token,让模型输出整图的语义。
5)MLP Head 输出类别
结构和文本 Transformer 几乎一模一样。
🚀 五、ViT 为什么能大杀四方?
1)大规模数据下表现极强
ViT 在 ImageNet-21k、JFT-300M 上训练后,性能远超 ResNet。
2)天然具备全局感受野
注意力机制可以一次看到整幅图,不需要卷积堆几十层。
3)模型更容易扩展(Scaling)
论文中非常明确:
ViT 越大越强。
而 CNN 越大越不稳定、越容易过拟合。
这也呼应了“大模型趋势”。
4)和预训练天然契合
自监督预训练(MAE、DINO)配合 ViT 效果爆炸。
5)结构更统一
Transformer 是“万能架构”,文本、图像、语音、视频皆可用。
🎯 六、生活化类比:CNN vs ViT
假设你让两个学生看一幅画并描述内容:
CNN 学生:
- 眼睛近视,只能看到小块区域
- 必须把画贴到脸上一点点扫
- 最终需要把扫过的内容拼起来
ViT 学生:
- 能直接看到整幅画
- 会自动关注关键区域(例如人物眼睛)
- 会在全画范围建立关联(例如人物与背景)
从能力上你就知道谁更强。
🛠 七、PyTorch 实际调用非常简单
HuggingFace 提供了官方实现:
from transformers import ViTForImageClassification, ViTImageProcessor
model = ViTForImageClassification.from_pretrained("google/vit-base-patch16-224")
processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224")
工程中几乎不用自己重写。
🔍 八、弱点:ViT 也并非完美
- 数据需求量极大(没有大数据效果一般)
- 对小目标不如 CNN 稳定
- 前期训练成本高
- Token 化会破坏局部结构(部分任务中需要改进)
因此后续出现了:
- Swin Transformer(层次结构)
- ConvNeXt(吸收 Transformer 思想改进 CNN)
- ViTDet、ViT-Lite 等各种变种
但 ViT 的基本思想已经奠定了未来方向。
🧠 九、最简总结:ViT 为什么能干掉 CNN?
一句话:
CNN 是“局部专家”,ViT 是“全局高手”。
更具体一点:
- ViT 能建立全局关系
- 可扩展性极强
- 动态注意力比固定卷积更灵活
- 更适合大模型和预训练时代
- 架构更统一,可跨模态使用
这就是 Transformer 能征服图像世界的原因。

🔜 下一篇
接下来我们将进入“模型训练工程”部分,从第 17 篇开始:
《学习率为什么能决定模型训练成败?》
更多推荐
所有评论(0)