6.7 KiB
title, draft, tags
| title | draft | tags | ||||
|---|---|---|---|---|---|---|
| 01-ViT | false |
|
一、 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-1k)时,ViT 性能劣于 ResNet;但在 $M \approx 3 \times 10^8$(JFT-300M)时,ViT 的表现开始展现出更强的缩放效应(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 Diffusion:ViT 的衍生与应用
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:
-
将
z \in \mathbb{R}^{h \times w \times c}展平为 Tokens。 -
通过类似 ViT 的标准 Transformer Block 处理。
-
优势:Transformer 的 Scaling Law 比 U-Net 更稳定,更易于通过增加参数量获得涌现能力。
五、 潜在问题与工程坑点
-
计算复杂度瓶颈:Self-Attention 的显存占用随像素数
N呈O(N^2)增长。高分辨率任务中,必须引入 FlashAttention(基于算子融合)或 Window Attention(如 Swin)来降低算力负担。 -
注意力坍缩(Attention Collapse):在极深层模型中,所有 Token 的注意力权重趋向一致(Query 和 Key 的点积分布变平坦)。解决方法包括引入 Re-Attention 或增加 Head 维度。
-
训练不稳定性:ViT 对初始化极其敏感。通常需要较长的 Warmup Steps(如总步数的 5%-10%)来让梯度在高频振荡期后进入稳定流形区域。
结论:ViT 的成功在于其数学架构的通用性。在扩散模型领域,它正在从辅助角色(U-Net 内部插件)演变为核心引擎(DiT),这标志着生成式 AI 正在从空间局部建模全面转向全局关系建模。