前言:上一篇我们啃下了 Transformer 这块硬骨头,知道了它靠自注意力机制在 NLP 领域大杀四方。那么一个很自然的疑问就来了:Transformer 这种为文本设计的架构,能用来处理图像吗?答案是——不仅能,而且效果惊人。这篇我们就把 Transformer 从 NLP 搬到 CV(计算机视觉),聊聊 ViT、CLIP、DINO 这些视觉大模型的基本原理。


目录

  1. 写在前面:Transformer 如何跨界到视觉
  2. ViT 详解:把图片当成“句子”来处理
  3. 视觉大模型全景:不止 ViT
  4. 总结:新人必知的视觉大模型图谱

1. 写在前面:Transformer 如何跨界到视觉

上篇我们学 Transformer 时,它的输入是「一个句子 = 一串单词」,每个词对应一个向量。这个套路对文本天然适用。

但图像怎么办?图像是一个三维矩阵(宽 × 高 × 通道),没法直接喂给 Transformer。核心问题只有一个:

怎么把一张图片变成 Transformer 能消化的「一串向量」?

ViT(Vision Transformer)的答案极其简单粗暴:把图切成小方块,每个方块当成一个“单词”。这就是 ViT 的核心思想。听起来简单,但 2020 年 Google 提出时,效果直接对标甚至超越了当时的 SOTA CNN。

新手类比:CNN 处理图像时是从局部卷积一步步提取特征,就像从像素→边缘→轮廓→完整物体,一层层往上抽象。而 ViT 是一开始就把整张图切成 patch,然后让 Self-Attention 直接学习任意两个 patch 之间的关系,像人类看图一样先有整体印象。


2. ViT 详解:把图片当成“句子”来处理

2.1 Part 1 | ViT 概览:CNN 的挑战者

ViT 的整体架构和 NLP Transformer 几乎一模一样,唯一的区别在输入层:

图像
  → 切成 Patches → 每个 Patch 转成一个向量 → 加位置编码
    → Encoder × N 层(和 Transformer Encoder 一样)
      → MLP Head → 分类结果(猫?狗?车?)

ViT 没有 Decoder,只用了 Encoder。因为它做的是图像分类,不是序列生成。

为什么 ViT 能挑战 CNN?

CNN ViT
核心操作 卷积核滑动,局部感受野 Self-Attention,全局感受野
归纳偏置 强(局部性、平移不变性) 弱(全靠数据学)
长距离依赖 需要堆很多层 第一层就能看到整张图
数据需求 中等数据量可行 需要大规模数据训练
解释性 CAM 等可视化 Attention 矩阵可视化

关键结论: CNN 自带「局部连接」「平移不变性」等先验假设,小数据集上更容易学。ViT 没有这些假设,所以更需要大数据来学,但数据量足够时,ViT 能学到更灵活的特征。


2.2 Part 2 | Embedding 层:一张图怎么变成一串 token

这是 ViT 最巧妙的部分。以标准 ImageNet 图像(224×224×3)为例,一步步来看:

2.2.1 Patch Embedding(图块嵌入)
原始图像:     224 × 224 × 3
切分 Patch:   每个 Patch = 16 × 16 × 3
Patch 数量:   224/16 = 14,14 × 14 = 196 个 patch
每个 Patch:   展平 → 16×16×3 = 768 维向量
线性投影:     768 → 768(论文中,D=768)

总结果:196 个 token,每个 token 是 768 维向量。

新手理解:从前 Transformer 处理「每个词」的向量,现在 ViT 处理「每个图块」的向量。只不过词向量是查表查出来的,图块向量是通过一个线性层算出来的。

2.2.2 CLS Token(分类令牌)

Borrowed from BERT 的做法:在序列最前面加一个特殊的 [CLS] token。

Token 序列: [CLS] + [Patch_1] + [Patch_2] + ... + [Patch_196]
Token 数量: 197

最后用 [CLS] token 的输出向量来做分类。它相当于一个「信息收集器」,Self-Attention 会把整张图的信息汇聚到它身上。

2.2.3 Position Embedding(位置编码)

和原版 Transformer 一样,告诉模型每个 patch 在图中哪个位置。ViT 用的也是可学习的 1D 位置编码:

位置向量的维度也是 768,
直接加到 patch embedding 上:197 个 token × 768 维

注意:ViT 在论文中用的是标准可学习位置嵌入,不是固定 sin/cos。实验发现固定 sin/cos 也能用,但效果略差。

2.2.4 一张图总结 Embedding 层
224×224×3 图片
    ↓ 切成 16×16 的块
196 个 patch,每个展平成 768 维
    ↓ 加 [CLS] token
197 个 token,每个 768 维
    ↓ 加位置编码
最终输入 Transformer Encoder:197 × 768 的矩阵

2.3 Part 3 | ViT Encoder:照搬 Transformer

ViT 的 Encoder 就是原汁原味的 Transformer Encoder,公式如下:

z₀ = [x_class; x¹_patch_E; x²_patch_E; ...; x^N_patch_E] + E_pos

z'_ℓ = MSA(LN(z_{ℓ-1})) + z_{ℓ-1}           // 多头自注意力 + 残差
z_ℓ  = MLP(LN(z'_ℓ))    + z'_ℓ               // 前馈网络 + 残差

y    = LN(z⁰_L)                               // 取出 CLS token,做分类

逐层解释:

  • LN:Layer Normalization,层归一化,放到子层前面(Pre-Norm,这是 ViT 与原始 Transformer 的一个小区别)
  • MSA:Multi-Head Self-Attention,让 197 个 token 互相看
  • MLP:两层全连接,中间用 GELU 激活函数
GELU 激活函数

ViT/Transformer 中普遍使用 GELU 替代 ReLU:

GELU(x) = x × Φ(x)        Φ 是标准正态分布的累积分布函数
        ≈ x × sigmoid(1.702 × x)

GELU 比 ReLU 更平滑,在接近 0 的区域不是直接截断,而是有个概率性的过渡。实验证明在大规模 Transformer 中 GELU 效果更好。

QKV 在 ViT 中的直观理解

虽然计算过程和在 NLP 中一模一样,但在图像任务中:

  • Q(Query):「我这个小方块在找什么?」
  • K(Key):「我的特征是什么?」
  • V(Value):「我有哪些信息可以提供?」

举个例子:一个 patch 包含「猫的耳朵尖端」,它的 Query 可能会匹配到另一个 patch 的 Key(猫的眼睛),然后从眼睛的 Value 获取信息。

新手理解:ViT 的第一层 Self-Attention,就是让每个 16×16 的小方块去问整个图中哪些方块和自己有关系。这比 CNN 的 3×3 卷积视野大多了。


2.4 Part 4 | MLP Head:分类头

Encoder 输出后,取 [CLS] token 的最终表示,过一层 LayerNorm,再通过一个简单的 MLP 输出分类概率:

[CLS] token → LayerNorm → Linear → 分类输出(如 1000 类)

注意:预训练时用 MLP Head 分类,微调时换一个新的分类头即可。


2.5 Part 5 | 实验结果:ViT 行不行?

ViT 论文的核心发现:

数据规模是决定性因素:

  • 在中等数据集(如 ImageNet 130 万张)上:ViT 不如同等规模的 CNN
  • 在大数据集(如 JFT-300M 3 亿张)上:ViT 超越了 CNN,且计算效率更高

这验证了一个结论:Transformer 的归纳偏置弱,需要更多数据才能发挥优势。一旦数据量够,全局自注意力的优势就体现出来了。

新手小笔记:ViT 是大数据的宠儿。数据量小的时候别急着换 ViT,CNN 可能更好训。


2.6 Part 6 | 微调:在大模型上“精装修”

ViT 的标准使用方式:

  1. 预训练:用大规模数据集(如 JFT-300M)从头训练
  2. 微调:在自己的小数据集上用预训练权重继续训练
  3. 换分类头:把预训练模型的 MLP Head 换成适合自己任务分类数的头

预训练 → 微调的范式现在已经是 CV 领域的主流做法,和 NLP 中「BERT 预训练 + 下游任务微调」的思路完全一致。


3. 视觉大模型全景:不止 ViT

第二个 PDF 把视野从 ViT 一个模型,扩展到了整个「视觉大模型」的生态。这一部分让我对 AI 视觉的整体格局有了更清晰的认识。

3.1 Part 1 | 大模型时代的背景

从 2022 年底 ChatGPT 横空出世,大模型正式进入公众视野。背后的关键技术:

  1. 大规模预训练:海量数据 + 海量参数

  2. RLHF(人类反馈强化学习)

    • 收集人类偏好数据(Prompts → 模型回答 → 人工排序)
    • 训练 Reward Model(奖励模型,学习人类偏好)
    • 用 PPO 算法优化模型,让模型生成人类更喜欢的回答
  3. 关键趋势

    • 模型越来越大 → 涌现能力
    • 从单模态到多模态(文本 + 图像 + 音频…)

新手理解:RLHF 就像「老师给分 → 学习打分标准 → 按标准自我优化」这样一个循环。


3.2 Part 2 | 多模态大模型:图文融合

传统模型:CV 模型处理图像,NLP 模型处理文本,井水不犯河水。

多模态大模型:让模型同时理解图片和文字,能看图说话、按文找图。

关键问题是:

怎么让「图片的表示」和「文字的表示」处于同一个语义空间里?

让「猫」这张图和「猫」这个词,在向量空间里的位置尽可能靠近。

这个方向催生了 CLIP 这样的里程碑模型。


3.3 Part 4 | CLIP:用文字监督来学图像

CLIP(Contrastive Language-Image Pre-training)是 OpenAI 在 2021 年提出的,它的核心思路极其优雅:

传统做法 vs CLIP:

传统:人工标注分类标签 → 训练分类器(类别固定,扩展性差)
CLIP:图文配对数据 → 训练图文匹配 => 学习开放的视觉概念
CLIP 的训练方式:对比学习
一批图文对:[图A, 文字A], [图B, 文字B], [图C, 文字C], ...
                ↓
    图像编码器               文字编码器
    (ViT/ResNet)            (Transformer)
                ↓                       ↓
    图A向量  图B向量    ...    文A向量  文B向量  ...
                ↓                       ↓
    计算所有图文对之间的相似度矩阵
                ↓
    优化目标:配对的相似度最高,不配对的相似度低

这就是对比学习:拉近正样本对,拉远负样本对。

CLIP 训练后能做到:

  • 给出「一张猫的图」+「一句话:“a photo of a cat”」→ 高相似度
  • 给出「一张猫的图」+「一句话:“a photo of a dog”」→ 低相似度
  • 零样本分类:不需要针对特定类别重新训练
    • 给出图 + 所有可能的文字标签(“cat”, “dog”, “car”…)
    • 选相似度最高的标签

这在当时是革命性的:一个 CLIP 模型不用任何微调,就能在任何图像分类任务上有不错的表现。彻底摆脱了「有几类就得训练几类」的限制。


3.4 Part 5 | DINO 与知识蒸馏:不用标签也能学

DINO(DIstillation with NO labels)更进一步——连文字标签都不用。

DINO 的核心:Self-Distillation(自蒸馏)
输入一张图 → 两个不同的随机裁剪
    ↓                    ↓
学生网络(S)           教师网络(T)
(小裁剪)            (大裁剪/全局图)
    ↓                    ↓
让 S 的输出去匹配 T 的输出
    ↓
教师网络用学生的动量(EMA)更新

关键点:

  • 不需要任何人工标签,纯粹自监督学习
  • 教师网络用学生参数的指数移动平均(EMA)更新
  • 不同视角下同一物体的特征被拉近,不同物体的特征被推开
一个惊艳的结果

DINO 学到的注意力图(Attention Map)能自动「分割」出前景物体,即使训练过程中从没标注过什么前景/背景。

这意味着模型通过自监督自己学会了什么是「物体」,而不需要人类教它。

知识蒸馏的本质
教师模型(大而强)
    ↓ 提供「软标签」(输出概率分布,不只给硬答案)
学生模型(小而快)
    ↓ 不仅学正确答案,还学教师的「思维方式」

蒸馏的关键在于「软标签」包含了丰富的信息:

  • 硬标签:这是「猫」= [0, 0, 1, 0, 0]
  • 软标签:可能是「猫」= [0.02, 0.05, 0.82, 0.08, 0.03],告诉你猫和老虎相似度高,和汽车不沾边

4. 总结:新人必知的视觉大模型图谱

一张图串起视觉大模型的进化

  CNN 时代
    │
    ├── ResNet / EfficientNet(监督学习,有标签)
    │
  Transformer 跨界(2020)
    │
    ├── ViT:Transformer 直接做图像分类
    │   思路:图 → Patches → Tokens → Self-Attention
    │   关键:需要大数据集才能发挥优势
    │
    ├── CLIP(2021):图文对比学习
    │   思路:图 → 编码器 ⇄ 文字 → 编码器 → 对比学习
    │   突破:零样本分类,开放的视觉概念
    │
    ├── DINO(2021):自监督自蒸馏
    │   思路:同一张图的不同视角 → 学生匹配教师
    │   突破:不用任何标签,自学会分割物体
    │
    └── 多模态大模型(2023+)
        思路:LLM + 视觉编码器 → 看图说话 / 理解

核心概念对照表

概念 一句话解释 为什么重要
Patch Embedding 把图切块,每块当词处理 让 Transformer 进入视觉的钥匙
CLS Token 专门用来汇总整图信息的全局 token 类似阅读理解的中心句
GELU 比 ReLU 更平滑的激活函数 Transformer 标配
对比学习 拉近正样本,推远负样本 CLIP 的灵魂
零样本分类 不训练就能分类新类别 让模型有了「理解力」而非死记硬背
知识蒸馏 大模型教小模型 模型压缩 + 自监督学习
Pre-Norm LayerNorm 放在子层前面 ViT 的细节改进
自蒸馏 模型自己教自己 DINO 不需要标签的秘密

学习心得

  1. 先学 Transformer,再学 ViT 就轻松多了。ViT 的 Encoder 几乎就是原版 Transformer Encoder 的复制粘贴。上一篇文章的积累在这里直接兑现。

  2. 数据规模是关键变量。CNN 用了大量人工设计的归纳偏置(卷积的局部性),在小数据上是优势;Transformer 全靠数据驱动,在大数据上才释放威力。

  3. CLIP 让「图片理解」变得通用。传统的分类模型(猫→猫标签)学的是死记硬背,CLIP 学的是图文之间的关系,这是一种更接近人类理解的方式。

  4. 自监督学习是大势所趋。标注数据成本太高,DINO 这种不用标签就能学到有用表征的方法,才是真正走向通用智能的必经之路。

  5. 多模态是终局。未来的 AI 不会是孤立的 CV 模型或 NLP 模型,而是真正能同时理解图文音视频的统一模型。ViT、CLIP、DINO 都是通往这个终局的里程碑。

新手学习路线建议

CNN 基础(ResNet)
  → Transformer(Attention 机制)
    → ViT(Transformer 怎么处理图像)
      → CLIP(图文对比学习)
        → DINO(自监督学习)
          → 多模态大模型(GPT-4V / LLaVA 等)

写在最后

从 CNN 到 Transformer,从单模态到多模态,从监督学习到自监督学习——视觉 AI 的发展速度让人目不暇接。但沉下心来,会发现这些看似不同的模型,底层的核心思想是相通的:

  • 表示学习:把图像/文字变成有意义的向量
  • 注意力机制:让模型知道哪些信息是重要的
  • 对比学习:在比较中学会什么是相似的、什么是不同的

这三条主线串起了 CV 领域的黄金链条。

如果这篇文章对你有帮助,欢迎留言交流,一起打怪升级~

上一篇:【纯新手向】我的深度学习打怪升级之路(六):Transformer——让机器「读懂」上下文的注意力奇迹
下一篇: 敬请期待~


不积跬步,无以至千里。共勉 💪

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐