视觉大模型基础 & ViT 学习笔记

本文基于课程课件整理,涵盖大模型基础、ChatGPT核心技术、Vision Transformer (ViT)、CLIP、知识蒸馏与DINO等内容,适合作为视觉大模型入门的学习参考。


目录


一、大模型概述

大模型(Large-scale Model)是指参数规模达到亿级甚至千亿级的深度学习模型。近年来,以 GPT 系列为代表的大语言模型(LLM)在自然语言处理领域取得了突破性进展,同时也推动了视觉领域大模型的发展。

核心特点:

  • 海量参数:数十亿到数千亿参数,具备强大的表达能力和泛化能力
  • 大规模预训练:在海量无标注数据上进行自监督预训练
  • 涌现能力:当模型规模超过某个阈值后,会出现小模型不具备的能力(如思维链推理、上下文学习等)

二、ChatGPT 核心技术

ChatGPT 的训练流程可以分为三个关键阶段:

2.1 无监督预训练(Unsupervised Pre-training)

无监督预训练技术分为两个阶段:

阶段 目标 方式
语言模型预训练 预测下一个单词的概率 自回归(Auto-Regressive)
掩码语言模型预训练 预测被掩码位置的单词 自编码(Auto-Encoding)

GPT 系列主要采用自回归的语言模型预训练方式,在大规模语料上学习语言的统计规律。

2.2 有监督微调(Supervised Fine-Tuning, SFT)

微调技术是 ChatGPT 实现对话生成的关键技术之一。通过在人工标注的高质量问答数据上进行有监督训练,使模型适应对话任务。

  • 使用梯度下降优化算法,不断调整模型权重以最小化损失函数
  • 让模型学会遵循指令、生成符合人类偏好的回答

2.3 奖励模型(Reward Model, RM)

奖励模型的目标是评估模型输出在人类看来是否表现良好

  • 输入:[提示(prompt), 模型生成的文本]
  • 输出:一个标量分数,表示文本质量

训练数据来源:

  • Anthropic:主要来自 Amazon Mechanical Turk 上的聊天工具
  • OpenAI:主要来自调用 GPT API 的用户数据

2.4 PPO 强化学习(Proximal Policy Optimization)

通过强化学习进一步优化模型:

  1. 从预先收集的数据中采样 prompt
  2. 同时输入初始语言模型和当前训练中的语言模型(policy),得到输出 y1, y2
  3. 用奖励模型 RM 对 y1, y2 打分,判断优劣
  4. 使用打分差值作为训练信号,通过 PPO 算法更新模型参数

这一阶段让模型能够生成更符合人类价值观和偏好的回答,即 RLHF(Reinforcement Learning from Human Feedback)


三、多模态大模型

多模态大模型(Multimodal LLM)是指能够同时理解和生成多种模态数据(文本、图像、音频、视频等)的大模型。

代表模型:

  • GPT-4V / GPT-4o:OpenAI 的多模态旗舰模型
  • Gemini:Google 的原生多模态模型
  • LLaVA:开源视觉语言模型,将视觉编码器与大语言模型结合
  • Qwen-VL:阿里的通义千问视觉模型

核心思路:
将图像通过视觉编码器(如 ViT、CLIP 视觉分支)转化为特征向量,再通过投影层对齐到语言模型的嵌入空间,实现图文联合理解。


四、Vision Transformer (ViT) 详解

ViT 是将 Transformer 架构从 NLP 迁移到计算机视觉领域的开创性工作(论文:An Image is Worth 16x16 Words)。

4.1 整体架构

ViT 的核心思想:将图像视为一系列 Patch(图像块),类比 NLP 中的 Token 序列,直接送入 Transformer 编码器处理。

输入图像 -> 分块(Patch Partition) -> 线性投影(Linear Projection)
-> 拼接Class Token -> 位置编码(Position Embedding)
-> Transformer Encoder x L -> MLP Head -> 分类结果

4.2 Embedding 层(嵌入层)

这是 ViT 最关键的创新部分,将 2D 图像转换为 1D 序列。

图像分块(Patch Partition)

假设输入图像为 x ∈ R^(H×W×C)(高 H、宽 W、通道数 C),Patch 大小为 P × P

  • Patch 数量:N = H×W / P²
  • 每个 Patch 展平后维度:P² × C
  • 分割后的序列:xp ∈ R^(N × P²C)

具体例子(ImageNet):

  • 输入:224 × 224 × 3
  • Patch 大小:16 × 16 × 3
  • Patch 数量:(224/16) × (224/16) = 14 × 14 = 196
  • 每个 Patch 维度:16 × 16 × 3 = 768
  • 序列维度:196 × 768
线性投影(Linear Projection / Patch Embedding)

将每个 Patch(维度 P² × C)通过一个可学习的线性变换映射到 D 维嵌入空间:

Patch Embedding = xp · E,   其中 E ∈ R^(P²C × D)

这一步类似于 NLP 中的词嵌入(Word Embedding)。

Class Token

在序列开头拼接一个可学习的 [class] token(维度 D):

  • 最终序列长度:N + 1 = 197
  • 序列维度:197 × 768

这个 Class Token 的最终输出用于分类任务。

位置编码(Position Embedding)

由于 Transformer 本身不具备位置感知能力,需要加入位置编码。ViT 使用可学习的 1D 位置编码:

PE(pos, 2i)   = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
  • 位置编码维度:(N+1) × D = 197 × 768
  • 与 Patch Embedding 相加后送入 Transformer Encoder

4.3 ViT Encoder

ViT 的 Encoder 与标准 Transformer Encoder 完全一致,由 L 层堆叠而成,每层包含:

公式表达

输入构造:

z0 = [x_class; x_p^1 E; x_p^2 E; ...; x_p^N E] + E_pos

其中 E ∈ R^(P²·C × D)E_pos ∈ R^((N+1)×D)

第 l 层计算:

z'_l = MSA(LN(z_{l-1})) + z_{l-1},   l = 1...L
z_l  = MLP(LN(z'_l)) + z'_l,          l = 1...L

最终输出(取 Class Token):

y = LN(zL^0)
多头自注意力(Multi-Head Self-Attention, MSA)

注意力机制的计算流程:

  1. 生成 Q、K、V:通过三个不同的线性变换矩阵将输入映射为 Query、Key、Value
  2. 计算注意力分数:Q 与 K 做点积运算
  3. Softmax 归一化:对注意力分数进行 softmax,得到注意力权重
  4. 加权求和:用注意力权重对 V 进行加权求和
Attention(Q, K, V) = softmax(QK^T / √d_k) · V

其中 √d_k 是缩放因子,防止点积结果过大导致 softmax 梯度消失。

MLP 层

ViT 中的 MLP 由两个全连接层组成,中间使用 GELU 激活函数:

GELU(x) = x · Φ(x)

其中 Φ(x) 是标准正态分布的累积分布函数(CDF):

Φ(x) = 1/2 · [1 + erf(x/√2)]

GELU 相比 ReLU 更加平滑,在 Transformer 架构中表现更优。

Layer Normalization (LN)

在每个 MSA 和 MLP 之前应用 Layer Normalization(Pre-Norm 结构),稳定训练过程。

4.4 MLP Head(分类头)

Encoder 输出后,取 Class Token 对应的输出向量,通过 MLP Head 进行分类:

  • 本质是一个全连接层(或浅层 MLP)
  • 输出维度 = 类别数
  • 类似于 BERT 中的 [CLS] token 用法

4.5 实验结果

ViT 在大规模数据集(如 JFT-300M)上预训练后,在多个图像分类基准上达到或超越了当时最先进的 CNN 模型:

  • 相比 CNN(如 ResNet),ViT 在大数据量下具有更强的表示能力
  • 在中小规模数据集上不如 CNN(缺少 CNN 的归纳偏置,如平移不变性和局部性)

4.6 微调(Fine-tuning)

ViT 在预训练后可以通过微调迁移到下游任务:

  • 移除预训练的 MLP Head,换为新的分类头(或检测/分割头)
  • 在目标数据集上进行端到端微调
  • 可采用更高的分辨率进行微调(如从 224×224 提升到 384×384),此时只需对位置编码进行 2D 插值即可

五、CLIP:语言-图像联合预训练

CLIP(Contrastive Language-Image Pre-training)由 OpenAI 提出,是一个将图像和文本映射到同一嵌入空间的双塔模型。

核心思想

通过对比学习(Contrastive Learning),让配对的图文在嵌入空间中距离更近,不配对的图文距离更远。

图像 Image -> 图像编码器 Image Encoder -> 图像特征
文本 Text  -> 文本编码器 Text Encoder  -> 文本特征
                ↓
         对比学习 Contrastive Learning
                ↓
           相似度矩阵

训练方式

  • 使用 4 亿图文对进行训练
  • 采用对称的 InfoNCE 损失:同时最大化图像→文本和文本→图像的正确匹配概率
  • 在 batch 内构造负样本

应用

  • 零样本分类:用文本描述作为类别标签,无需微调即可分类
  • 图文检索:图像搜文本、文本搜图像
  • 作为视觉编码器:被广泛用于多模态大模型(如 LLaVA)的视觉 backbone

六、知识蒸馏与 DINO

6.1 知识蒸馏(Knowledge Distillation)

将大型"教师模型"的知识迁移到小型"学生模型":

  • 软标签蒸馏:使用教师模型的输出概率分布(软标签)训练学生
  • 特征蒸馏:让学生模型模仿教师模型的中间层特征
  • 目标是让小模型在保持轻量的同时接近大模型的效果

6.2 DINO(Self-Distillation with No Labels)

DINO 是 Facebook AI 提出的自监督学习方法,核心创新是无标签的自蒸馏

  • Teacher-Student 架构:教师和学生网络结构相同
  • 动量更新:教师网络的参数不通过梯度更新,而是由学生网络参数的指数移动平均(EMA)得到
  • 中心化与锐化:使用 centering 和 sharpening 防止模型坍塌
  • ViT + DINO 的注意力图能自动学习到语义分割级别的物体轮廓,这是 DINO 最令人惊叹的特性

七、总结

主题 核心要点
ChatGPT 训练流程 无监督预训练 -> 有监督微调 -> 奖励模型 -> PPO 强化学习
ViT 图像分块 -> Patch Embedding -> Transformer Encoder -> MLP Head,去除了 CNN 的归纳偏置
CLIP 双塔对比学习,4亿图文对训练,实现零样本分类
知识蒸馏 大模型教小模型,DINO 实现了无标签自蒸馏

技术演进路线

CNN (ResNet) -> ViT (纯 Transformer) -> CLIP (图文联合) -> 多模态大模型 (GPT-4V, LLaVA...)
                                         |
                                         v
                                    DINO (自监督)

参考来源

  • An Image is Worth 16x16 Words (ViT, ICLR 2021)
  • Learning Transferable Visual Models From Natural Language Supervision (CLIP, ICML 2021)
  • Emerging Properties in Self-Supervised Vision Transformers (DINO, ICCV 2021)
  • Training language models to follow instructions with human feedback (InstructGPT, NeurIPS 2022)
Logo

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

更多推荐