神经网络与深度学习第四周总结
一、引言
本周课程系统讲解了视觉大模型的核心技术,从大语言模型的基本原理出发,逐步深入到视觉领域的Transformer改造——Vision Transformer(ViT),并进一步介绍了多模态模型CLIP以及自监督学习方法DINO。通过本次学习,我对Transformer架构在视觉任务中的演变、大模型的预训练-微调范式有了更深刻的理解。
二、大模型技术基础:从语言到视觉
2.1 什么是大语言模型
大语言模型(Large Language Model, LLM)是基于海量文本数据训练的深度学习模型,能够生成自然语言文本并理解语义,完成摘要、问答、翻译等任务。典型代表包括GPT系列、文心一言、通义千问等。
运作原理:模型采用“单字接龙”的方式,根据上文不断预测下一个字。将生成的字与上文组合成新的上文,循环往复即可生成任意长度的回答。模型的知识来源于预训练阶段学习的海量文本数据。
2.2 GPT系列的演进
| 版本 | 参数量 | 学习材料大小 |
|---|---|---|
| GPT-1 | 1.17亿 | 5 GB |
| GPT-2 | 15亿 | 40 GB |
| GPT-3 | 1700亿 | 45 TB |
| GPT-4 | 万亿级别 | >100 TB |
2.3 大模型的训练三阶段
- 无监督学习:给模型海量资料,让其自学语言表达规律(语言模型预训练 + 掩码语言模型预训练)。
- 有监督学习:使用人工标注的问答对进行微调,让模型学会回答问题。
- 强化学习(RLHF):通过奖励模型对模型的不同回答进行排序打分,利用PPO算法不断优化。
这一训练范式后来也被借鉴到视觉大模型中,即“大规模预训练 + 下游任务微调”。
三、Vision Transformer(ViT):图像视为16×16的单词
ViT是Google团队在2020年CVPR上提出的工作,论文标题《An Image is Worth 16x16 Words》。它打破了CNN在视觉任务中长期的主导地位,证明了纯Transformer架构在足够大的数据集上可以超越CNN。
3.1 总体架构
ViT的整体流程如下图所示(简示):
- 将图像切分成固定大小的Patch(如16×16);
- 将每个Patch线性映射为向量(Token),并添加位置编码以及一个额外的类别Token;
- 将Token序列输入标准的Transformer Encoder(多头注意力 + MLP);
- 提取类别Token对应的输出,经过MLP头进行分类。
3.2 嵌入层详解
图像切分为Patch序列
设输入图像 (x \in \mathbb{R}^{H \times W \times C}),Patch尺寸为 (p \times p),则Patch数量 (N = \frac{HW}{p^2}),每个Patch展平为 (p^2 \cdot C) 维向量。
以ImageNet为例:输入224×224×3,取 (p=16),则每个Patch维度为 (16 \times 16 \times 3 = 768),Patch数量为 ((224/16)^2 = 196)。
在第0位置添加类别Token(可学习的嵌入向量),最终输入矩阵为 (\mathbf{z}_0 \in \mathbb{R}^{197 \times 768})。
线性映射:通过一个线性变换将Patch向量映射到指定的嵌入维度(与Transformer中的词嵌入对应)。
位置编码:ViT采用一维可学习位置编码,直接加到输入矩阵上。作者对比了一维编码、二维编码、相对编码,发现三种方式效果几乎无差异(如下表),因此选择最简单的一维编码。
| 位置编码方式 | 默认/主干 | 每层加编码 | 每层加编码(共享) |
|---|---|---|---|
| 无位置编码 | 0.61382 | N/A | N/A |
| 一维编码 | 0.64206 | 0.63964 | 0.64292 |
| 二维编码 | 0.64001 | 0.64046 | 0.64022 |
| 相对编码 | 0.64032 | N/A | N/A |
此外,可视化一维编码的相似性矩阵表明,它仍然能够较好地学习到二维空间信息(相邻Patch的编码相似度高)。
3.3 编码器
ViT的编码器与原始Transformer基本一致,但顺序上先进行层归一化(LN),再进入多头注意力(MSA)。计算公式如下:
[
\begin{align*}
z_0 &= [x_{\text{class}}; x_1^p E; x_2^p E; \dots; x_N^p E] + E_{\text{pos}}, \quad E \in \mathbb{R}{(p2\cdot C)\times D}, E_{\text{pos}} \in \mathbb{R}^{(N+1)\times D} \
z’\ell &= \text{MSA}(\text{LN}(z{\ell-1})) + z_{\ell-1}, \quad \ell = 1\dots L \
z_\ell &= \text{MLP}(\text{LN}(z’\ell)) + z’\ell, \quad \ell = 1\dots L \
y &= \text{LN}(z_L^0)
\end{align*}
]
其中MLP中的激活函数采用GELU(Gaussian Error Linear Unit):
[
\text{GELU}(x) = x \cdot \Phi(x) = x \cdot \frac{1}{2}\left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right]
]
3.4 MLP头与分类
将编码器输出的类别Token(即 (z_L^0))送入MLP头进行分类。在预训练阶段(ImageNet-21k),MLP头结构为 Linear + tanh + Linear;在迁移到下游数据集微调时,通常替换为一个简单的线性层。
3.5 模型变体与实验结果
ViT提供了三种规格:Base、Large、Huge。
| 模型 | Patch大小 | 层数 | 隐藏维度 | MLP维度 | 头数 | 参数量 |
|---|---|---|---|---|---|---|
| ViT-Base | 16×16 | 12 | 768 | 3072 | 12 | 86M |
| ViT-Large | 16×16 | 24 | 1024 | 4096 | 16 | 307M |
| ViT-Huge | 14×14 | 32 | 1280 | 5120 | 16 | 632M |
在ImageNet、CIFAR等数据集上,ViT-H/14取得最优结果,且预训练成本(TPUv3-core-days 2.5k)远低于BiT-L(9.9k)和Noisy Student(12.3k)。关键结论:经过充分的大规模预训练后,ViT的效果优于CNN;但在中小数据集上,CNN仍有优势。
3.6 微调:适应不同分辨率
微调时,若输入图像分辨率改变(例如从224×224变为1024×1024),保持Patch尺寸不变,则Patch数量会从196变为4096。虽然Transformer编码器可以处理变长序列,但可学习的位置编码固定长度,无法直接匹配。解决方案是对预训练的位置编码进行2D插值,得到新的位置编码矩阵。
四、多模态大模型与CLIP
4.1 多模态大模型概述
多模态大模型旨在同时处理视觉、语言、声音等多种模态信息。核心挑战在于:如何将已预训练好的单模态基础模型(尤其是LLM)与其他模态模型连接起来,实现协同推理。通常采用多模态预训练和多模态指令微调来实现模态对齐与人类意图对齐。
4.2 CLIP:通用视觉语言模型
CLIP(Contrastive Language-Image Pre-training)是OpenAI提出的经典工作,使用大规模图像-文本对进行对比学习,使得图像和文本能够映射到同一语义空间。其优势包括:
- 零样本分类:不需要训练即可对新类别进行分类;
- 跨模态检索:根据文本搜索图像或根据图像搜索文本;
- 作为视觉大模型的基础组件,广泛应用于下游任务(如目标检测、图像生成)。
(更详细内容参见配套材料7-4)
4.3 知识蒸馏与DINO
知识蒸馏是一种模型压缩与自监督学习技术。DINO(DIstillation with NO labels)利用自蒸馏的方式,使教师网络和学生网络相互促进,无需任何标注即可学习到优秀的视觉特征。该方法在ImageNet线性评估上取得了与有监督方法相当的效果,为自监督视觉大模型的发展奠定了基础。
五、总结与思考
5.1 核心脉络
本次课程清晰地展示了一条技术演进路线:
大语言模型(Transformer)→ 视觉Transformer(ViT)→ 多模态模型(CLIP)→ 自监督视觉模型(DINO)
核心思想是将图像视为“单词”(Patch序列),将NLP的成功经验迁移到视觉领域,并借助大规模预训练和对比学习、蒸馏等方法不断提升模型的泛化能力。
5.2 个人思考
- ViT的位置编码:一维可学习编码虽简单,但可视化证明其能隐式编码二维空间关系,这启示我们,有时候简单的设计也能达到复杂方法的效果。
- CNN与ViT的互补性:ViT擅长全局依赖建模,但需要大量数据;CNN天然具有局部归纳偏置,数据效率更高。未来的模型可能融合两者(如Swin Transformer、ConvNeXt)。
- 大模型的微调挑战:ViT在分辨率变化时需要对位置编码插值,这提示我们,当基础模型假设固定输入尺寸时,迁移到变长输入仍需巧妙处理。
5.3 疑问与后续学习方向
- 位置编码的2D插值是否会造成信息损失?有没有更优雅的可变长度位置编码方案(例如相对位置编码或RoPE)?
- 在资源有限的情况下,是否有必要从零训练ViT?或者使用预训练ViT + 适配器(Adapter)微调更高效?
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)