Files
2026-05-16 17:16:51 +08:00

141 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 01-ViT
draft: false
tags:
- ViT
- Vision Transformer
- 多模态
- 深度学习
---
### 一、 ViT 的数学底层构筑:从像素到序列
Vision Transformer (ViT) 的核心思想是将图像处理视作一个 1D 序列建模问题,通过舍弃 CNN 的先验偏置Inductive Bias来换取更高的表达能力上限。
#### 1. 图像序列化Patch Embedding
对于输入图像 $x \in \mathbb{R}^{H \times W \times C}$,我们将其切分为 $N$ 个固定大小的图像块Patches每个块的分辨率为 $P \times P$。
序列化映射过程如下:
$$x_p \in \mathbb{R}^{N \times (P^2 \cdot C)}, \quad N = \frac{HW}{P^2}$$
随后,通过线性投影矩阵 $E \in \mathbb{R}^{(P^2 \cdot C) \times D}$ 将其映射至隐空间维度 $D$。
**等价性分析**
线性投影层在算子上完全等价于一个卷积核大小为 $P \times P$、步长Stride为 $P$ 的二维卷积:
$$\text{Output} = \text{Conv2D}(x, \text{kernel\_size}=P, \text{stride}=P)$$
该操作的权重矩阵 $W_{conv}$ 维度即为 $D \times C \times P \times P$。这一步完成了从局部空间信号到全局嵌入向量的转换。
#### 2. [CLS] Token 与 Position Embedding
为了执行分类或全局特征提取ViT 引入了可学习的 $[CLS]$ 向量。输入序列构造为:
$$z_0 = [x_{class}; x^1_p E; x^2_p E; \dots; x^N_p E] + E_{pos}$$
其中 $E_{pos} \in \mathbb{R}^{(N+1) \times D}$ 是位置编码。
**深度讨论:归纳偏置的缺失**
- **Translation Invariance (平移不变性)**CNN 通过卷积核权值共享实现,而 ViT 的 Self-Attention 是置换不变的Permutation Invariant平移不变性必须通过海量数据在位置编码中学习获得。
- **Locality (局部性)**CNN 的感受野随层数线性增加,而 ViT 首层即可实现全局感受野。这种“感受野自由”导致模型在小数据集上极易过拟合,对数据量的需求呈对数线性增长。
---
### 二、 Transformer Encoder 的严谨推导
#### 1. Multi-Head Self-Attention (MSA)
$Attention(Q, K, V)$ 定义在缩放点积之上:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
**矩阵秩Rank视角**单头注意力往往受限于低秩瓶颈Low-rank bottleneck容易导致注意力矩阵退化。多头机制通过将维度 $D$ 切分为 $h$ 个子空间,允许模型在不同的流形空间中捕捉**非相干特征Incoherent Features**。
#### 2. Layer Normalization 与 MLP
ViT 采用 **Pre-LN** 结构其数学意义在于保证残差分支Residual Stream的恒等映射在初始化阶段更接近单位矩阵防止深层网络中的梯度消失或爆炸
$$z'_{\ell} = \text{MSA}(\text{LN}(z_{\ell-1})) + z_{\ell-1}$$
$$z_{\ell} = \text{MLP}(\text{LN}(z'_{\ell})) + z'_{\ell}$$
MLP 通常由两层线性层组成,扩展因子为 4使用 **GeLU** 激活函数。其导数特性 $\Phi'(x)$ 在 $x < 0$ 时不完全为零,提供了比 ReLU 更平滑的优化曲面。
---
### 三、 训练细节与大规模预训练法则
#### 1. JFT-300M 与数据饥渴
实证研究表明,当数据集规模 $M < 10^7$(如 ImageNet-1kViT 性能劣于 ResNet但在 $M \approx 3 \times 10^8$JFT-300MViT 的表现开始展现出更强的缩放效应Scaling Laws
#### 2. 优化器与正则化
- **AdamW**针对权重衰减Weight Decay进行了修正典型超参数为 $\beta_1=0.9, \beta_2=0.999$。
- **DropPath (Stochastic Depth)**:在训练期间随机丢弃整个残差分支,防止深度 Transformer 的协同适应Co-adaptation
- **学习率衰减**通常采用线性预热Warmup配合余弦退火Cosine Annealing
#### 3. 分辨率微调中的位置编码插值
当微调分辨率从 $H \times W$ 提升至 $H' \times W'$ 时,原始 $E_{pos}$ 的序列长度不再匹配。此时需将 $E_{pos}$ 看作二维网格信号利用双线性插值Bilinear Interpolation重采样
$$E_{pos}^{new} = f_{interp}(E_{pos}^{old}, \text{target\_shape}=(\frac{H'}{P}, \frac{W'}{P}))$$
---
### 四、 对接 Stable DiffusionViT 的衍生与应用
#### 1. VAE 中的角色
在 Stable Diffusion (SD) 的变分自编码器中,尽管主体是 CNN但在低分辨率的中等特征层Bottleneck通常嵌入了 **Self-Attention**。这利用了 Transformer 的长程依赖能力,确保生成图像在全局结构(如人体比例、对称性)上的逻辑一致性。
#### 2. U-Net 中的 Transformer Block
SD 的 U-Net 实际上是卷积与 Transformer 的混合体:
- **Spatial Transformer**:包含 Self-Attention处理图像内部关联**Cross-Attention**(处理文本 Prompt 与图像特征的对齐)。
- **计算权衡**
| 维度 | Pixel-based (CNN) | Patch-based (ViT/Transformer) |
|:---|:---|:---|
| **归纳偏置** | 强(适合纹理生成) | 弱(适合全局语义对齐) |
| **计算复杂度** | $O(H \cdot W \cdot K^2)$ | $O((HW)^2 \cdot D)$ |
| **感受野** | 局部,受层数限制 | 全局,由注意力机制驱动 |
| **平移不变性** | 通过卷积权值共享天然具备 | 需通过位置编码学习 |
| **数据依赖** | 少量数据即可取得好效果 | 需要大规模数据($10^7$ 级别) |
#### 3. 从 ViT 到 DiT (Diffusion Transformer)
最新的生成模型(如 Sora, SD3正在抛弃 U-Net转向纯 **DiT** 架构。DiT 将潜在空间Latent Space的特征图完全 Patchify
1. 将 $z \in \mathbb{R}^{h \times w \times c}$ 展平为 Tokens。
2. 通过类似 ViT 的标准 Transformer Block 处理。
3. **优势**Transformer 的 Scaling Law 比 U-Net 更稳定,更易于通过增加参数量获得涌现能力。
---
### 五、 潜在问题与工程坑点
1. **计算复杂度瓶颈**Self-Attention 的显存占用随像素数 $N$ 呈 $O(N^2)$ 增长。高分辨率任务中,必须引入 **FlashAttention**(基于算子融合)或 **Window Attention**(如 Swin来降低算力负担。
2. **注意力坍缩Attention Collapse**:在极深层模型中,所有 Token 的注意力权重趋向一致Query 和 Key 的点积分布变平坦)。解决方法包括引入 **Re-Attention** 或增加 Head 维度。
3. **训练不稳定性**ViT 对初始化极其敏感。通常需要较长的 **Warmup Steps**(如总步数的 5%-10%)来让梯度在高频振荡期后进入稳定流形区域。
---
**结论**ViT 的成功在于其数学架构的通用性。在扩散模型领域它正在从辅助角色U-Net 内部插件演变为核心引擎DiT这标志着生成式 AI 正在从空间局部建模全面转向全局关系建模。