1. 视觉Transformer基础与核心思想
视觉Transformer(Vision Transformer,ViT)的出现彻底改变了计算机视觉领域的游戏规则。作为一名长期从事深度学习研究的从业者,我清楚地记得当ViT首次在2020年由Google Research团队提出时,整个计算机视觉社区所受到的震撼。传统卷积神经网络(CNN)长期统治的领域,突然被这个基于纯Transformer架构的模型所挑战。
1.1 从NLP到CV的跨界创新
ViT的核心思想源自自然语言处理中的Transformer架构,但为了适应图像数据的特点,研究者们进行了巧妙的改造。与CNN不同,ViT完全不使用卷积操作,而是将图像视为一系列"视觉词元"(visual tokens)的集合。
关键突破:ViT证明了在大规模数据集预训练条件下,纯Transformer架构在图像分类任务上可以超越当时最先进的CNN模型。
1.2 图像分块嵌入技术
ViT处理图像的第一步是将输入图像分割为固定大小的块(patches)。以标准的224×224像素图像为例,如果选择16×16的块大小,那么将得到(224/16)²=196个图像块。
每个图像块会被展平为一个向量,然后通过线性投影(可学习的全连接层)映射到模型维度D。这个过程可以用公式表示:
code复制z₀ = [x_class; x₁E; x₂E; ...; x_N E] + E_pos
其中:
- x_class是分类token(类似BERT中的[CLS])
- E是块嵌入矩阵(形状为(P²·C)×D,P是块大小,C是通道数)
- E_pos是位置编码
1.3 位置编码的重要性
与CNN不同,Transformer本身不具备空间位置感知能力。因此ViT必须显式地加入位置信息。常用的方法包括:
- 标准位置编码:使用固定或可学习的一维位置编码
- 相对位置编码:考虑块之间的相对位置关系
- 二维位置编码:更符合图像数据的本质特性
在我的实践中,发现对于高分辨率图像任务,二维位置编码通常能带来1-2%的准确率提升。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ViT模型架构详解
2.1 Transformer编码器结构
ViT的核心是标准的Transformer编码器堆叠,每个编码器层包含:
-
多头自注意力机制(MSA)
- 查询(Q)、键(K)、值(V)矩阵计算
- 注意力分数计算:Attention(Q,K,V) = softmax(QKᵀ/√d_k)V
- 多头机制允许模型关注不同子空间的信息
-
前馈网络(FFN)
- 通常由两个全连接层组成,中间有非线性激活
- 公式:FFN(x) = max(0, xW₁ + b₁)W₂ + b₂
-
层归一化(LayerNorm)和残差连接
- 每个子层都有残差连接和层归一化
- 公式:LayerNorm(x + Sublayer(x))
2.2 模型变体与配置
研究者们提出了多种ViT变体,主要区别在于模型深度和宽度:
| 模型变体 | 层数 | 隐藏层维度 | MLP大小 | 头数 | 参数量 |
|----------|------|------------|---------|------
