⭐ 深度学习入门体系(第 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 篇开始:

《学习率为什么能决定模型训练成败?》

更多推荐