视觉表征架构演进
VIT
[2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
核心思想:将图像划分为多个固定大小的 patch,并将每个 patch 看作 NLP 中的 token,经过线性映射后输入标准 Transformer Encoder
传统 CNN:
1 | Image |
ViT
1 | Image |
把图像理解问题转化为一个序列建模问题
Patch Embedding
给定输入图像
patch 总数为
把每个 Patch 展平成一个向量
通过线性投影
Position Embedding
ViT 添加可学习的位置编码
原始 ViT 延续 BERT 的设计,在 patch token 前增加一个可学习的 [CLS] 用于聚合整张图片的信息
ViT-B/16
1 | 输入图片 |
现代 VIT
对于视觉任务,Self-Attention 本身已经能够实现 patch 间的信息交互,因此 CLS 并不是必须
很多现代 ViT 使用平均池化代替 CLS
- 不需要额外学习 CLS token
- 训练更加稳定
- 与 CNN 的 Global Average Pooling 类似
VIT 的局限
虽然 ViT 将 Transformer 引入视觉领域,但存在两个问题:
- 计算复杂度随图片尺寸平方增长
- 缺少 CNN 的层次化结构
因此后续提出Swin Transformer:通过窗口注意力和层次化结构,让 Transformer 更适合视觉任务
Swin Transformer
[2103.14030] Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
核心设计:
- Window Attention 降低计算量
- Shifted Window 实现跨窗口通信
- Patch Merging 构建层次化结构
Patch Embedding
首先将图片划分为 patch
输入:
再通过 Linear Projection 转换到定义的特征维度
1 | 输入 |
与 ViT 最大区别:
- VIT 在这里已经直接转化为 token sequence
- Swin 保留二维空间结构 [B, H, W, C]
Window Partition
Swin 不进行全局 Attention,而是在二维 feature map 上划分窗口
例如
1 | [B, 56, 56, 96] |
W-MSA
W-MSA:Window Multi-head Self-Attention
第一个 Swin Block 使用 W-MSA
1 | ┌───────┬───────┐ |
不同窗口内部进行 Self-Attention,不同窗口之间不发生交互
SW-MSA
SW-MSA:Shifted Window Multi-head Self-Attention
问题:如果所有 Block 都使用固定窗口,不同窗口之间无法交互,模型只能理解局部区域,无法建立跨区域关系
解决方法:第二个 Block 对窗口进行移动,移动大小为 $\left\lfloor M/2\right\rfloor$
Shift 之后,一个新的 Window 就同时包含多个 Window 的一部分 token
1 | 原窗口 |
实现跨 Window 信息交流
Swin Block
一个完整 Swin Block 通常是 W-MSA 和 SW-MSA 成对出现
1 | Block 1 |
Patch Merging
这是 Swin 和 ViT 非常大的另一个区别
ViT 基本一直保持 token 数不变,而 Swin 会逐阶段降低空间尺寸,提高通道数,类似 CNN
会在 Swin Block 后下采,下采采用拼接 + Linear 的实现方式
1 | 原特征图 |
Swin-T
| Block | shape | |
|---|---|---|
| stage1 | ×2 | [B,56,56,48] |
| stage2 | ×2 | [B,28,28,192] |
| stage3 | ×6 | [B,14,14,384] |
| stage4 | ×2 | [B,7,7,768] |
在 stage 后 再 Merge
对比 VIT
| ViT | Swin | |
|---|---|---|
| Token形式 | 一维序列 | 二维Feature Map |
| Attention | Global Attention | Window Attention |
| 复杂度 | $O(N^2)$ | $O(NM^2)$ |
| 空间结构 | 弱 | 强 |
| 多尺度 | 无 | 有 |
| Patch数量 | 固定 | 逐层减少 |
| 适合任务 | 分类 | 分类/检测/分割 |
ConvNeXt
核心思想:以经典 ResNet 为基础,引入 Transformer 时代的设计思想,对 CNN 进行现代化改造,使纯 CNN 达到与 Swin Transformer 相近的性能
ConvNeXt 和 ResNeXt 没有直接继承关系。
- ResNeXt:通过 Cardinality(多分支)增强 ResNet
- ConvNeXt:重新设计 CNN Block,使其适应现代训练方式
Patchify Stem
传统 ResNet:
1 | 7×7 Conv, stride=2 |
ConvNeXt 修改为
1 | 4×4 Conv stride=4 |
类似 ViT / Swin 的 Patch Embedding
ConvNeXt Block
传统 ResNet Block:
1 | 3×3 Conv |
ConvNeXt Block:
1 | Input |
升维到 4C 就是借鉴 FFN 的思想,用 1 ×1 卷积代替FFN
Large Kernel Depthwise Convolution
ConvNeXt 使用 $7\times 7$ Depthwise Conv
通过扩大卷积核增加感受野
普通卷积同时完成:
- 空间信息提取
- 通道融合
相比普通卷积,Depthwise Conv在每个通道独立卷积,再通过 1 × 1 卷积完成通道融合
从参数量上来看
普通卷积:
| 类型 | groups |
|---|---|
| 普通卷积 | 1 |
| Group Conv | Cardinality |
| Depthwise Conv | $C_{in}$ |
所以相当于没有混合通道,默认情况下输出通道数等于输入通道数
这一部分可以关联分组注意力
Depthwise Conv 负责空间建模,后续的 1×1 卷积负责通道混合
类似Transformer中 Attention 实现 token 空间交互,FFN 完成 channel 变换
| 普通Conv | Depthwise Conv | |
|---|---|---|
| 空间信息 | √ | √ |
| 通道融合 | √ | × |
| 参数量 | 大 | 小 |
| 计算量 | 大 | 小 |
| 输出channel | 可改变 | 通常不变 |
ConvNeXt-T
和 Swin 基本一致
| Stage | Feature Size | Channel | Block数量 |
|---|---|---|---|
| Stage 1 | 56×56 | 96 | 3 |
| Stage 2 | 28×28 | 192 | 3 |
| Stage 3 | 14×14 | 384 | 9 |
| Stage 4 | 7×7 | 768 | 3 |
| Swin Transformer | ConvNeXt | |
|---|---|---|
| 类型 | Transformer | CNN |
| 核心操作 | Window Attention | Large Kernel Conv |
| 信息交互 | Self-Attention | 卷积感受野 |
| Stem | Patch Embedding | 4×4 Conv |
| Stage结构 | 有 | 有 |
| Downsampling | Patch Merging | Conv Downsample |
| Norm | LayerNorm | LayerNorm |
CLIP
[2103.00020] Learning Transferable Visual Models From Natural Language Supervision
传统视觉模型训练目标通常是 Image -> Label
这种方式存在问题:
- 只能识别训练时出现的类别
- 需要大量人工标注标签
- 学到的是类别级别信息,而不是更通用的语义关系
CLIP(Contrastive Language-Image Pre-training)的核心思想:使用大量图像-文本对进行对比学习,让图像和文本映射到同一个语义空间
模型学习:图片和描述它的文字应该接近,不匹配的图片和文字应该远离
CLIP由两个独立 Encoder 组成:
- Image Encoder
- Text Encoder
CLIP 的关键:两个 Encoder 输出维度相同
Contrastive Learning
CLIP使用对比学习,训练数据是大量的 (image, text) 对
计算所有图片和文本之间的相似度
理论上对角线位置的相似度应该最高
CLIP Loss
CLIP同时优化两个方向:
Image → Text
给定图片找到正确文本
给定文本找到正确图片
Zero-shot Classification
CLIP最大的特点是不需要针对每个类别重新训练
传统 Image Classification如果出现训练时没有的类就会失效
Zero-shot Classification 并不学习 Image → Label,而是学习 Image → Embedding 和 Text → Embedding,最重要的是让图片和文字进入同一个语义空间
CLIP就是典型Zero-shot模型
| 传统分类 | Zero-shot分类 | |
|---|---|---|
| 输入 | 图片 | 图片+类别文本 |
| 输出 | 固定类别编号 | 文本类别 |
| 训练类别 | 必须固定 | 可以扩展 |
| 最后层 | Linear classifier | 相似度匹配 |
| 代表模型 | ResNet | CLIP |
CLIP 和大语言模型(LLM)的 Zero-shot/Few-shot 是同一个范式,模型通过预训练获得通用能力,推理时不需要(或只需要少量)任务数据
| CLIP | LLM | |
|---|---|---|
| 输入 | 图片+文本 | 文本 |
| 预训练任务 | 图文对比学习 | Next Token Prediction |
| 学习目标 | 跨模态对齐 | 语言分布建模 |
| 知识表示 | Embedding空间 | 参数+上下文 |
| Zero-shot | 文本类别直接分类 | Prompt直接完成任务 |
| Few-shot | 少量图文示例 | Prompt示例 |
| 是否训练参数 | 否 | 否 |
共同思想:不为每个任务训练一个模型,而是训练一个拥有通用表示能力的基础模型,通过提示或少量示例完成新任务
最终都走向:
1 | 预训练获得通用能力 |
可以把 CLIP 看成视觉领域的大模型雏形:
- CLIP 让模型从“分类器”变成“视觉语义理解模型”
- GPT 让模型从“语言模型”变成“通用任务模型”
因此 CLIP 成为了多模态模型的基础
补充思考
写于2026.9.6
现在的大模型都在追求 AGI(通用人工智能),但距离严格意义上的还有差距
目前已经能够有一定的迁移能力,但跨任务迁移还不稳定
争议:模型是真的理解语义还是学习了大量文本中的统计规律
当前大模型距离 AGI 的主要差距:
- 缺少持续学习能力,如何让 AI 像人一样持续成长?
- 缺少自主规划能力,目前Agent在多步任务中容易偏离目标、忘记目标或者规划错误
- 缺少真实世界交互能力,期待世界模型的效果




