← 返回拾句全部内容

Vision Transformer 为什么能火:把图片切成小块后,Transformer 真的学会看图了

YouTube2026-06-15

摘要

ViT 把图片切成 patch,再用 Transformer 学关系;数据越大,它越能追上甚至反超 CNN。

**“Scaling the training data outweighs the inductive bias.”**

深度解读

Vision Transformer 为什么能火:把图片切成小块后,Transformer 真的学会看图了

一句话总结:ViT 把图片切成 patch,再用 Transformer 学关系;数据越大,它越能追上甚至反超 CNN。


内容概览

  • 主题:Vision Transformer、计算机视觉、卷积网络、预训练、迁移学习
  • 适合人群:想理解 ViT 的工程师、AI 学习者、做视觉模型的产品/研究人员

核心观点

  1. ViT 的核心很简单:先切图,再用 Transformer 读图 它不是直接吃整张图,而是把图像拆成固定大小的方块,每个方块变成一个向量,再加上位置信息,最后交给 Transformer encoder 去建模 patch 之间的关系。

  2. CNN 之所以强,不只是因为“老牌”,而是因为它天然懂图像 卷积网络自带四个重要偏好:局部性、平移等变性、对小扰动不敏感、分层特征学习。它们让 CNN 在中小数据集上特别省数据、特别稳。

  3. ViT 真正赢的地方,不是“更聪明”,而是“更能吃数据” 当训练数据从 100 万级涨到 1400 万、3 亿级时,Transformer 的扩展性开始兑现,原来靠卷积网络的 inductive bias,慢慢被大规模预训练“冲掉”了。


深度解读

一张图先切成 196 块,再让 Transformer 去“读”

Vision Transformer,简称 ViT,最反常识的地方就在这里:它不是先做卷积,也不是先提边缘、纹理、形状,而是把一张图片直接切成一块一块的 patch。

假设输入是一张 224×224×3 的图。ViT 会把它切成 16×16 的小方块。
算下来,一共是 196 个 patch。每个 patch 不是“图像”,而是被压成一个固定长度的向量,比如 512 维

然后事情开始变得很 Transformer:

  • 给每个 patch 加上 position encoding,告诉模型“这块来自图像的哪个位置”
  • 把所有 patch 一次性送进 Transformer encoder
  • 经过多层 self-attention 后,输出仍然是一串向量
  • 但我们只拿第一个特殊向量,也就是 class token
  • 把它喂进一个 MLP head,接 softmax,得到分类结果

你可以把这个过程理解成:
CNN 像是拿着放大镜,一小块一小块扫图;ViT 更像是把整张图拆成 196 张小卡片,摆在桌上,让模型自己学会哪些卡片该彼此交流。

这套流程之所以成立,关键不在“切块”本身,而在于 self-attention
它让任何一个 patch 都能和其他 patch 建立联系。左上角的天空能和右下角的海面互动,车轮能和车身对话,嘴角能和眼睛协同。CNN 当然也能学到这些关系,但它更像是逐层累积;ViT 则更直接,第一层就把全局关系打开了。

这也是 ViT 最像 Transformer 的地方:它不先假设图像该怎么被看,而是让模型自己去学“什么跟什么有关”。


CNN 为什么曾经那么强,因为它天生就偏爱图像

要理解 ViT,得先承认一件事:CNN 不是被淘汰了,而是太懂图像了。

在 ViT 出现之前,计算机视觉的主力一直是卷积网络,比如 ResNet
它们强,不只是因为历史久,而是因为它们带着一套对图像很友好的 inductive bias

视频里提到的几个 bias,非常关键:

1)局部性(locality)

图像里相邻像素往往有关。
比如一只猫的耳朵、眼睛、鼻子,局部结构都很重要。卷积核就是专门干这个的:它看一小片区域,学局部模式。

2)平移等变性(translation equivariance)

同一个物体出现在图像左边还是右边,语义上通常还是那个物体。
卷积在整张图上滑动,天然擅长找“同样的模式”。

3)对小扰动鲁棒

你用细一点的笔写个“8”和粗一点的笔写个“8”,像素会变,但内容还是“8”。
CNN 里的 pooling 之类的操作,会把这种微小变化“抹平”一点,不会太敏感。

4)分层特征学习

这点最像人看图。
早期层学边缘、颜色、纹理;中期层学轮子、眼睛、轮廓;后期层学脸、车、动物。
特征越往后越抽象,像是在一层层搭积木。

所以 CNN 在中小数据集上很占便宜。它不是盲学,而是先天就知道图像大概率该怎么组织。
这就是为什么视频里说:在像 ImageNet-1k 这种大约 100 万样本 的规模上,ResNet 往往还能压住 ViT。

这件事很重要。
因为它说明 ViT 不是“天然更强”,它只是没有 CNN 那么多先验偏好。模型更自由,代价就是更吃数据。


ViT 真正翻盘,靠的不是技巧,是规模

视频里最有意思的图,是那组训练数据规模对比。

它把数据分成三档:

  • 小数据集:约 100 万样本
  • 中等数据集:约 1400 万样本
  • 大数据集:约 3 亿样本

结果很直接:

  • 小数据集上,ResNet 明显更稳
  • 中等数据集上,ViT 开始追平
  • 大数据集上,部分 ViT 已经开始反超

这背后的逻辑其实很朴素:

CNN 的优势来自 强归纳偏置
ViT 的优势来自 更强的扩展性

前者像是一个很懂图像的人,哪怕看得不多,也能猜得七七八八。
后者像一个没什么先入之见的人,但你给他看足够多的图,他会自己总结出一套极其灵活的理解方式。

这就是为什么 ViT 的故事,在大规模预训练之后才真正成立。

当数据少的时候,CNN 的“偏见”反而是优点。
当数据巨大时,ViT 的“少偏见”开始变成优势,因为它不会被太强的结构预设绑死。

换句话说,CNN 解决的是“少量数据下如何看图”,ViT 更像是在回答“如果数据足够多,模型还能怎么学图”。

这也解释了为什么后来视觉领域越来越重视 pre-training
不是因为大家突然迷信 Transformer,而是因为大家发现:只要预训练足够大,很多原来靠卷积先验占便宜的地方,都能被数据和规模慢慢磨平。


预训练、微调、推理:ViT 的三段式工作流

视频后半段讲得很细,重点其实就三个词:pre-training、fine-tuning、inference

1)Pre-training:先在大图上学通用表示

预训练时,ViT 会随机初始化所有可学习参数,包括:

  • patch embedding
  • class token
  • position embeddings
  • Transformer encoder 的参数

输入一般是 224×224 的图像,标签是类别。
每张图切成 16×16 patch,得到 196 个 patch
再加上一个 class token,总共是 197 个 token

这些 token 进入 Transformer encoder,通常会堆 12 层
每层大致包含:

  • LayerNorm
  • Multi-Head Self-Attention
  • Residual connection
  • MLP

这套结构的目的不是“更复杂”,而是让每个 patch 的表示越来越丰富。
它不只是知道“自己是什么”,还知道:

  • 自己在图里的位置
  • 自己和别的 patch 什么关系
  • 整张图可能在表达什么

最后,只有 class token 会被拿出来做分类。
它会经过一个 MLP head,输出 1000 类的概率分布。
然后用 cross-entropy loss 训练,反向传播更新所有参数。

这个设计很聪明。
因为模型最终不是在给每个 patch 打分,而是在学一个“全图级”的表示。class token 就像一个收件人,前面所有 patch 都在往它身上汇报信息。

2)Fine-tuning:换分辨率、换类别,重新适应任务

预训练完后,ViT 并不是只能干原来的事。
它可以拿去微调,比如换成:

  • 更高分辨率的图片,比如 384×384
  • 更少的类别,比如 100 类

但这里会遇到一个实际问题:
预训练时的 position embeddings 是按 196 个 patch 学的,
而 384×384 图像切成 16×16 patch 后,会变成 576 个 patch

位置数对不上,怎么办?

视频里给出的答案是:2D bilinear interpolation
这一步很关键,也很“工程”。

它不是简单复制,而是把原来的位置嵌入插值到新的网格上。
可以理解成:原来模型只会在 14×14 的地图上认路,现在突然给了它一张 24×24 的更大地图,于是先把旧地图拉伸成新尺寸,再继续用。

这一步体现了 ViT 的一个现实特征:
它很依赖结构化的表示迁移。
不是硬改网络,而是通过插值、替换最后的分类头,让原来的表示能力延续到新任务。

3)Inference:只保留你最需要的那一个向量

推理时流程就更简单了:

  • 输入一张图
  • 切成 patch
  • 加 class token
  • 加 position embeddings
  • 过 Transformer encoder
  • 只取 class token
  • 接 softmax,得到预测结果

其余 patch 的输出向量都可以忽略。

这件事听起来有点浪费,但其实很合理。
因为那些 patch 向量不是“没用”,而是被 class token 吸收了。
它们的价值已经体现在最终的全局表示里。


ViT 真正改变的,不只是视觉模型,而是视觉训练思路

很多人第一次看 ViT,会纠结一个问题:
“它怎么不做卷积了?这样还能叫看图吗?”

这个问题很正常,但答案其实已经很清楚了。
ViT 不是否认图像的结构,而是把“图像结构”这件事交给数据去学,而不是交给卷积核先验去规定。

它的思路是:

  • 不预设太多图像规律
  • 把图像转成 token 序列
  • 用 Transformer 学全局关系
  • 用规模和预训练补足先验缺失

这也解释了为什么 ViT 后来能带出一整条路线:
各种 vision transformer 变体、分层式结构、局部注意力、稀疏注意力、与 CNN 混合架构……本质上都在试图回答同一个问题:

能不能既保留 Transformer 的扩展性,又补上一点图像任务需要的结构偏好?

这也是为什么 ViT 不是一个单独的模型,而是一种思路转向。
它告诉视觉领域:别总想着模型必须像卷积那样看图,也许图像可以先变成 token,再像语言一样被处理。

这件事的后果很大。
一旦图像也被 token 化,视觉和语言之间的边界就开始变薄了。
你会发现,很多多模态模型后来走的路,本质上都是从这里往前延伸的:图像、文本、音频,都可以被表示成某种可处理的 token 序列。

ViT 不是终点。
它更像是一扇门。


值得记住的话

“Scaling the training data outweighs the inductive bias.”

“A model can learn a lot more when you stop telling it too much upfront.”

“The class token is the one token that actually gets to speak for the whole image.”


标签

AI 技术 科学 工具 方法论

更多值得记住的话

**“A model can learn a lot more when you stop telling it too much upfront.”**
**“The class token is the one token that actually gets to speak for the whole image.”**