news 2026/7/8 9:41:35

精读笔记02_ViT

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
精读笔记02_ViT

【3D点云暑期学习】精读笔记(2):ViT — An Image is Worth 16x16 Words

研0暑期进组学习 · 3D点云多模态方向 · 论文精读系列第 2 篇

论文信息

  • 标题:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
  • 作者:Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, et al.
  • 发表venue:ICLR 2021
  • 阅读日期:2026年6月

写在前面

如果说 Transformer(2017)证明了"注意力机制可以做序列建模",那么 ViT(2020)就证明了"图像也可以变成序列,用同一套 Transformer 来处理"。

这篇论文打破了一个根深蒂固的信念——CV 必须用 CNN。在 ViT 之前,所有人都认为卷积的局部性和平移等变性是视觉任务的"必需品"。ViT 说:不,只要数据够多,纯 Transformer 也能做得更好。

为什么这篇论文对我的 3D 点云主线至关重要?因为 CLIP 的图像编码器用的是 ViT,Uni3D 的 3D 编码器直接用 2D 预训练的 ViT 初始化。理解 ViT,就是理解后续所有多模态模型的视觉骨架。


一、关于 Patch Embedding(图像块嵌入)

1.1 为什么要进行 Patch Embedding?

两个原因:

(1)Transformer 天生吃的是 1D 序列(比如句子里的单词)。Patch Embedding 就是把 2D 的图像强行转化成 1D 的"视觉句子",其中每个 Patch 等价于一个"视觉单词"。

(2)解决"计算量爆炸"问题:如果以每个像素作为一个 Token,224×224 就有50,176个 Token,自注意力机制(复杂度 O(N²))根本算不动。切成 16×16 后,Token 数骤降为196个,计算量变得可以接受。

1.2 如何做 Patch Embedding?

输入图像 x ∈ R^{H×W×C}(H 为高度,W 为宽度,C 为通道数,彩色图像为 3)。以 224×224 图像为例,切成 16×16 的 patch。

第一步:切分(Patches)

将图像分成互不重叠的 N 个小块。每个小块的空间尺寸是 P×P(这里 P=16)。224/16=14,所以横竖各有 14 个格子,总共 N = 14×14 =196个 Patch。

第二步:展平(Flattening)

把每个小 Patch 里面的所有像素值拉平成一个一维向量。每个 Patch 原本是 16×16×3 =768个数值。拉平后,得到 196 个长度为 768 的向量。

公式表达为:x_p ∈ R^{N×(P²·C)},在这里就是 R^{196×768}。

第三步:线性投影(Linear Projection)

使用一个可训练的权重矩阵 E(维度为 (P²·C)×D,即 768×D),将每个 768 维的原始像素向量,乘以这个矩阵,映射成一个 D 维的嵌入向量。这个 D 就是 Transformer 整个网络内部使用的恒定隐向量维度(比如 ViT-Base 中 D=768)。

最终输出:196 个 D 维向量,这些就是 Patch Embeddings(图像块嵌入),也就是送入 Transformer 的 Token。

224×224 图像 ↓ 切分成 16×16 的 Patch 14×14 = 196 个 Patch ↓ 每个 Patch 展平 196 个 768 维向量 ↓ 线性投影 (768→D) 196 个 D 维 Token → 送入 Transformer

1.3 这样做的缺陷是什么?

做完 Patch Embedding 后,原本 2D 的空间结构(哪个 patch 在左上,哪个在右下)被彻底抹平了,序列中所有的 patch 都是平权的。

为了弥补这一点,论文紧接着会加上 Position Embeddings(位置嵌入)。

这也是论文强调的关键点:ViT 几乎没有 CNN 那样的"局部性"和"平移等变性"先验。它把空间结构完全交给位置编码去学习,而 Patch Embedding 本身只负责把像素变成向量。


二、可学习的 1D 位置编码

2.1 为什么是 1D?

论文明确指出,他们试过更复杂的 2D 感知编码(分别学横坐标和纵坐标),但发现性能没有显著提升,所以为了简洁和高效,直接选用了 NLP 中最通用的 1D 编码。

2.2 为什么是"可学习的"(Learnable)?

在原始的 NLP Transformer 中,位置编码有两种做法:

  • 固定的正弦波(Sinusoidal):不需要训练,用数学公式生成
  • 可学习的(Learnable):像神经网络的权重一样,通过梯度下降学出来

ViT 选择了后者。这些位置向量不是人为设定好的数学公式,而是随着 JFT-300M 等大数据集的预训练,通过梯度下降慢慢"学"出来的。

好处:模型可以根据数据分布,自由地调整位置向量之间的"距离感"和"方向感",比死板的固定公式更加灵活。

2.3 它是怎么"加上去"的?(关键机制)

一定要注意代码实现中的细节:Position Embedding 是**“加”**在 Patch Embedding 上的,而不是"拼接"。

公式为:

z 0 = [ x c l a s s ; x p 1 E ; … ; x p N E ] + E p o s z_0 = [x_{class}; x_p^1 E; \dots ; x_p^N E] + E_{pos}z0=[xclass;xp1E;;xpNE]+Epos

这意味着,每个 Patch 的最终输入向量 = (图像像素映射来的语义特征)+(该位置的空间坐标特征)。因为两者维度都是 D(比如 768 维),直接相加后,Transformer 的每一层就都能同时利用"这个 Patch 是什么内容"和"这个 Patch 在哪"这两种信息了。

2.4 惊人的发现:1D 编码自学出了 2D 布局

研究者计算了 196 个位置编码之间的余弦相似度(越相似说明编码越接近)。结果发现,虽然我们只给了它一维的序号(0~195),但模型硬是自学出了二维的空间拓扑结构!

  • 邻近性:物理位置上越近的 Patch,它们的位置编码余弦相似度越高(左上角附近的几个格子颜色很接近)。
  • 行列结构:同一行或同一列的 Patch,位置编码呈现出明显的规律性,甚至隐隐约约有类似正弦波的周期性结构。

结论:1D 可学习位置编码完全有能力隐含地表征 2D 图像的空间布局,不需要人工去设计复杂的 2D 编码。这从侧面说明了 Transformer 的强大——给它最简单的输入,它能自己"悟"出结构。


三、为何 ViT 需要在大数据预训练后表现更好?

这是 ViT 最常被讨论的问题:为什么在小数据集上 ViT 打不过 CNN,但在大数据上却反超?

3.1 CNN 自带的"归纳偏置"(Inductive Bias)

归纳偏置可以理解为模型自带的、不用学就会的"先验知识"。CNN 有两个强大的归纳偏置:

归纳偏置含义作用
局部性(Locality)卷积核默认只关注相邻区域(如 3×3 的邻居)天生认为"像素挨得近就是有关系"
平移等变性(Translation Equivariance)一个特征无论在图片哪个位置,同一个卷积核都能识别猫耳朵在左上角或右下角都能被检测到

这些先验极其强大,意味着 CNN 哪怕只给 100 万张图(ImageNet),也能很快学会识别物体,因为它不需要去学"空间是什么"——它天生就知道。

3.2 ViT 缺乏归纳偏置

ViT 只在切分 Patch 和微调插值位置编码时用到了 2D 结构。在真正的 Transformer 层中:

  • 自注意力是全局的:第一个 Patch 可以直接和最后一个 Patch 计算相似度。ViT 一开始并不知道"相邻很重要"。
  • MLP 是局部的,但只作用于单个 Token。
  • 位置编码是加进去的,不是"天生"的:虽然加了 1D 可学习位置编码,但这些编码最初只是随机的数字,模型必须从头去"背诵"哪几个编码代表"上下"、哪几个代表"左右"。

3.3 小数据:ViT 不如 CNN

如果只给 ViT 喂 100 万张图(ImageNet),它的泛化能力很差。因为它会把大量的"算力"浪费在猜测"空间拓扑结构"上,而不是去学"物体长什么样"。

论文原话:“在没有强正则化的情况下,ViT 比同等大小的 ResNet 低几个百分点。”

3.4 大数据:ViT 超越 CNN

当见过 3 亿张千奇百怪的图片后(JFT-300M),发生了质变:

从"背诵"到"理解"空间:ViT 不再需要去"猜测"空间关系了。它通过海量数据,硬生生地在注意力权重中"悟出"了 2D 拓扑结构。

容量(Capacity)优势释放:ViT 的 Transformer 架构比 CNN 拥有更大的模型容量和更灵活的感受野。CNN 的局部性是一种"强制约束"——在小数据时是福音,但在大数据时成了"枷锁"。它永远看不到全局的长程依赖。而 ViT 在大数据下,不仅学会了局部纹理,还能轻松捕捉到远距离像素之间的关联(比如"狗的鼻子"和"狗的尾巴"之间的关系),这是 CNN 很难做到的。

一句话总结:CNN 的归纳偏置是一种"提前透支"——用先验换数据效率;ViT 用数据换自由度——大数据下,自由度的优势碾压了先验的便利。


四、模型架构解析

论文 Figure 1:ViT 模型概览。将图像切分为固定大小的 Patch,线性嵌入后加位置编码,送入标准 Transformer Encoder。分类时使用可学习的 [CLS] Token。

4.1 数据流

原始图像 (224×224×3) ↓ 切分 + 展平 196 个 Patch (每个 768 维) ↓ 线性投影 196 个 D 维 Token ↓ 前面拼接 [CLS] Token 197 个 D 维 Token (1 CLS + 196 Patch) ↓ + 位置编码 197 个 D 维 Token (含位置信息) ↓ Transformer Encoder × L (如 12 层) 197 个 D 维输出 Token ↓ 取 [CLS] Token 的输出 1 个 D 维全局特征 ↓ MLP Head 分类结果

4.2 关键设计决策

设计选择理由
Patch 大小16×16平衡计算量与信息保留(196 个 Token)
位置编码1D 可学习2D 无显著提升,选最简方案
[CLS] Token借鉴 BERT汇聚全局信息用于分类
归一化顺序Pre-Norm先 LayerNorm 再 Attention,训练更稳定
架构仅 Encoder分类任务不需要 Decoder

五、实验亮点

  • 预训练数据:JFT-300M(3 亿张图)、ImageNet-21k(1400 万张)、ImageNet-1k(130 万张)
  • 主要结果:ViT-H/14 在 ImageNet-21k 上达到 88.55% Top-1 准确率,超越所有 CNN
  • 关键发现:数据规模 vs 性能曲线显示,ViT 在大数据下性能饱和更慢,潜力更大;小数据下 ViT 不如 ResNet
  • 迁移学习:大规模预训练后,ViT 在 CIFAR-100、VTAB 等 5 个下游任务上均达 SOTA

六、个人思考

局限性

  1. 数据饥渴:需要海量数据预训练才能发挥优势,对数据量有限的研究场景不友好
  2. 计算成本高:大规模预训练需要大量 TPU/GPU 资源
  3. Patch 粒度固定:16×16 的 Patch 大小是预设的,对细粒度识别(如密集场景)可能信息损失

与 3D 点云主线的联系

ViT 对我的 3D 主线有直接且关键的意义:

  1. CLIP 的图像编码器就是 ViT(第二周精读):理解 ViT 的 Patch Embedding 和 CLS Token,才能理解 CLIP 如何编码图像
  2. Uni3D 直接用 ViT 做 3D 编码器(第六周精读):用 2D 预训练的 ViT 初始化,把 3D 点云当成"序列"输入——这是 2D 知识迁移到 3D 的核心思路
  3. 点云与图像的本质相似性:点云是 3D 空间中的无序点集,图像是 2D 空间中的像素阵列。ViT 证明了"把空间数据序列化后用 Transformer 处理"是可行的,这为 PointNet → Transformer 的演进提供了理论依据

特别值得注意的是:ViT 的 Patch Embedding 思路(把连续空间切分成离散 Token)与 PointNet 的逐点编码(把每个 3D 点作为一个 Token)在哲学上是相通的。后续的 Point-Bind 正是沿着这条路走的。

可改进点

  1. 可以探索动态 Patch 大小(类似动态分辨率),在不同区域用不同粒度
  2. 3D 点云能否借鉴 Patch Embedding?把点云分簇后每簇作为一个 Token?(这与 PointNet++ 的分组策略有异曲同工之妙)

本周系列博文

  • 精读笔记(1):Attention Is All You Need
  • 精读笔记(2):ViT ← 当前
  • 对比学习(1):Transformer vs ViT 架构对比
  • 周报(1):第一周学习总结

上一篇:精读笔记(1):Attention Is All You Need
下一篇:对比学习(1):Transformer vs ViT 架构对比

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 9:40:08

小白渗透入门实战:90分钟完成SQL注入验证链

1. 这份文档到底是什么,谁该看、怎么看、能解决什么问题“小白渗透入门最全实战文档”——光看标题,很多人第一反应是:又一个教人“黑别人网站”的速成班?其实完全不是。我带过二十多期网络安全方向的新人训练营,也给高…

作者头像 李华
网站建设 2026/7/8 9:40:01

5分钟快速上手:免费AMD Ryzen调试工具终极指南

5分钟快速上手:免费AMD Ryzen调试工具终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/7/8 9:39:29

A3908与PIC18F96J94实现高精度运动控制方案解析

1. 高精度运动控制系统的核心需求解析 在工业自动化领域,运动控制精度直接决定了生产质量和效率。A3908电机驱动芯片与PIC18F96J94微控制器的组合,正是针对以下核心需求而设计: 微米级定位精度 :现代精密制造(如半导…

作者头像 李华
网站建设 2026/7/8 9:38:54

AI回答监测的问题库系统如何设计?

本文面向需要系统性地监测品牌在AI回答中表现的技术人员和数据工程师。在品牌AI可见度监测体系中,问题库是整套系统的“输入层”——问题怎么设计、怎么分类、怎么分层管理,直接决定了后续所有指标的可信度和可比性。文章将从问题模板设计、问题分类体系…

作者头像 李华