149 lines
8.5 KiB
Markdown
149 lines
8.5 KiB
Markdown
---
|
||
title: 02-CLIP
|
||
draft: false
|
||
tags:
|
||
- CLIP
|
||
- 多模态
|
||
- 对比学习
|
||
- 深度学习
|
||
---
|
||
## 一、 CLIP 的核心架构:多模态对比表征
|
||
|
||
Contrastive Language-Image Pre-training (CLIP) 的本质是在高维流形上寻找图像与文本的**最大互信息 (Mutual Information)** 估计。
|
||
|
||
### 1.1 双塔架构与投影空间
|
||
|
||
CLIP 采用非对称的双塔架构。令 $x_i$ 为输入图像,$t_i$ 为对应的描述文本。
|
||
|
||
- **图像编码器 (Image Encoder)**: $f_\theta(\cdot)$,通常为特征提取能力极强的 ViT (Vision Transformer) 或 ResNet。其输出为 $h_i \in \mathbb{R}^{d_v}$。
|
||
|
||
- **文本编码器 (Text Encoder)**: $g_\phi(\cdot)$,采用 Transformer 架构,输出为 $h_t \in \mathbb{R}^{d_l}$。
|
||
|
||
|
||
为了实现跨模态对齐,需将不同维度的特征映射至共享的单位超球面 $\mathbb{S}^{d-1} \subset \mathbb{R}^d$:
|
||
|
||
$$I_i = \text{L2-Norm}(h_i W_i), \quad T_i = \text{L2-Norm}(h_t W_t)$$
|
||
|
||
其中 $W_i \in \mathbb{R}^{d_v \times d}$ 与 $W_t \in \mathbb{R}^{d_l \times d}$ 是可学习的线性投影矩阵。映射后的向量满足 $\|I_i\|_2 = 1$ 且 $\|T_i\|_2 = 1$。
|
||
|
||
**Intuition(图文对齐的物理意义)**:
|
||
|
||
将图文投影到单位超球面 $\mathbb{S}^{d-1}$ 的核心动机在于**消解模态间的度量异构性**。图像特征的欧式距离反映的是像素级纹理性差异,而文本特征的欧氏距离反映的是语义类簇间差异。通过 L2-Normalization + 线性投影,我们将两者都映射到同一黎曼流形——单位超球面,此时余弦相似度 $s_{i,j} = I_i \cdot T_j^\top$ 成为统一的度量标准。
|
||
|
||
从几何视角看,对比学习本质上是将配对样本 $(x_i, t_i)$ 的表示 $I_i$ 与 $T_i$ 拉近至同一邻域(正样本距离趋近于 1),同时将所有非配对样本 $(x_i, t_{j \neq i})$ 推远至超球面的对立极点(负样本距离趋近于 -1)。这等价于在高维球面上进行的有监督流形学习。
|
||
|
||
### 1.2 对比学习损失函数:InfoNCE
|
||
|
||
CLIP 的训练目标是最大化 $N$ 个配对样本的余弦相似度,同时最小化 $N^2 - N$ 个非配对样本的相似度。其损失函数采用对称的 **InfoNCE (Information Noise-Contrastive Estimation)**:
|
||
|
||
$$\mathcal{L}_{\mathrm{KL}} = \frac{1}{2N} \sum_{i=1}^{N} \left( -\log \frac{\exp(s_{i,i} \cdot \tau)}{\sum_{j=1}^{N} \exp(s_{i,j} \cdot \tau)} - \log \frac{\exp(s_{i,i} \cdot \tau)}{\sum_{j=1}^{N} \exp(s_{j,i} \cdot \tau)} \right)$$
|
||
|
||
其中 $s_{i,j} = I_i \cdot T_j^\top$ 表示相似度分数。
|
||
|
||
**温度系数 $\tau$ 的深度解析**:
|
||
|
||
$\tau$(或训练中的 $\exp(\tau)$)是一个关键的可学习参数。
|
||
|
||
- **动力学作用**:从 softmax 的数学形式分析,温度 $\tau$ 实质上是控制注意力权重分布熵的缩放因子。定义缩放后的 logits $\tilde{s}_{i,j} = s_{i,j} \cdot \tau$,则 softmax 输出的概率分布为 $p_{i,j} = \exp(\tilde{s}_{i,j}) / \sum_k \exp(\tilde{s}_{i,k})$。当 $\tau \to 0$ 时,$\tilde{s}_{i,j}$ 趋近于零向量,softmax 退化为均匀分布(最大熵),模型无法学习有效区分;当 $\tau \to \infty$ 时,分布熵最小化,仅最大 logits 对应的样本获得梯度。CLIP 训练时 $\tau \to 0.07$ 恰好处于”尖锐但不过度”的中间地带,使得正样本获得显著高于负样本的梯度权重,同时负样本间的相对难度差异也能被区分。
|
||
|
||
- **困难负样本 (Hard Negatives) 的物理机制**:当某个负样本 $T_k$ 与正样本 $T_i$ 在语义上接近时(如”白猫”vs”灰猫”),其 $s_{i,k}$ 较高。在较大的 $\tau$ 下(对应较陡的 softmax 曲线),这类”近似正样本”的梯度惩罚会显著增强,推动模型学习更细粒度的语义边界。
|
||
|
||
- **稳定性控制**:在训练初期,$\tau$ 被初始化为一个较小值(如 0.07),以防止梯度爆炸;随着训练进行,模型逐渐通过减小分布熵来提取更精细的特征。**工程结论:$\tau$ 的自适应学习是 CLIP 能够从嘈杂网络数据中收敛的核心。**
|
||
|
||
|
||
---
|
||
|
||
## 二、 极致硬核的训练细节
|
||
|
||
### 2.1 大规模 Batch 的数学意义
|
||
|
||
CLIP 的训练使用了极大的 Batch Size ($N=32,768$)。从互信息下界的角度看:
|
||
|
||
$$I(X; T) \geq \log(N) - \mathcal{L}_{\mathrm{KL}}$$
|
||
|
||
**负采样强度分析**:对比学习的性能在很大程度上取决于负样本的数量。$N$ 的增大意味着对于每一个正样本,模型必须从 $32,767$ 个干扰项中识别出正确匹配。这极大地强化了特征的判别性,使得模型能够学习到细粒度的语义差异而非简单的低频特征。
|
||
|
||
### 2.2 优化器策略与权重衰减
|
||
|
||
- **AdamW 配置**:采用解耦的权重衰减(Weight Decay)。
|
||
|
||
- **差异化策略**:对于所有线性层应用 $0.2$ 的 Weight Decay,但对 **LayerNorm 和 Bias 参数不予衰减**。这保证了在极深的网络中,激活值的均值和方差保持稳定。
|
||
|
||
- **LR Schedule**:采用 **Linear Warmup**(前 2000 步)配合 **Cosine Annealing** 衰减。
|
||
|
||
|
||
### 2.3 分布式并行与数值稳定性
|
||
|
||
在处理 $32768 \times 32768$ 的相似度矩阵时,内存占用极大。
|
||
|
||
- **混合精度 (Mixed Precision)**:使用 FP16 进行前向传播以节省带宽,但在计算损失函数和更新梯度时回退到 FP32 以避免溢出。
|
||
|
||
- **DDP 与 Sharding**:利用分布式数据并行,将 Batch 分散在多个 GPU 节点上,并仅在计算相似度矩阵时进行全局的全收集 (All-gather) 操作。
|
||
|
||
|
||
---
|
||
|
||
## 三、 对接 Stable Diffusion:从表征到引导
|
||
|
||
Stable Diffusion (SD) 并不直接使用 CLIP 的分类能力,而是将其作为**语义条件注入器**。
|
||
|
||
### 3.1 隐空间桥梁:为什么选择倒数第二层?
|
||
|
||
在 SD 中,通常提取 CLIP Text Encoder (ViT-L/14) 的 **Penultimate Layer (倒数第二层)** 输出。
|
||
|
||
- **理论支撑**:最后一层特征经过了对比损失的极致压缩,旨在实现全局对齐,丢失了大量局部空间语义。倒数第二层保留了更多的 token-level 细粒度信息,更有利于 U-Net 进行精细的图像重建。
|
||
|
||
|
||
### 3.2 Cross-Attention 机制的数学注入
|
||
|
||
CLIP 的文本 Embedding $c$ 作为外部条件注入 U-Net 的计算流。对于 U-Net 中的中间特征图 $\phi(z_t)$:
|
||
|
||
1. **查询矩阵 (Query)**: $Q = W_Q \cdot \phi(z_t)$
|
||
|
||
2. **键矩阵 (Key)**: $K = W_K \cdot c$
|
||
|
||
3. **值矩阵 (Value)**: $V = W_V \cdot c$
|
||
|
||
|
||
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d}}\right)V $$
|
||
|
||
这里 $K$ 和 $V$ 完全源自 CLIP 特征,这意味着生成的每一步都在根据文本语义对像素流形进行重塑。
|
||
|
||
### 3.3 Classifier-Free Guidance (CFG) 引导
|
||
|
||
为了强化语义一致性,SD 引入了 CFG:
|
||
|
||
$$\tilde{\epsilon}_\theta(z_t, c) = \epsilon_\theta(z_t, \emptyset) + w \cdot (\epsilon_\theta(z_t, c) - \epsilon_\theta(z_t, \emptyset))$$
|
||
|
||
其中 $w$ 为引导系数。**数学本质**:$\epsilon_\theta(z_t, c) - \epsilon_\theta(z_t, \emptyset)$ 实际上是条件分布 $\log p(c|z_t)$ 的梯度方向。CLIP 提供的特征向量决定了这个梯度的“准确性”,从而在扩散过程中不断将潜在变量推向符合 prompt 描述的区域。
|
||
|
||
---
|
||
|
||
## 四、 潜在问题与技术局限
|
||
|
||
### 4.1 词袋效应 (Bag-of-Words Property)
|
||
|
||
尽管 CLIP 具有强大的表征能力,但在处理复杂逻辑关系时表现欠佳。
|
||
|
||
- **成因分析**:InfoNCE 目标函数倾向于提取全局统计语义,而忽略了 Transformer 内部的序列结构。即使打乱 Prompt 的词序,其在单位超球面的投影点依然极其接近。
|
||
|
||
- **后果**:SD 在处理“A 在 B 左边”或“不仅有 A 而且有 B”等空间/逻辑关系时经常崩溃。
|
||
|
||
|
||
### 4.2 特征坍缩 (Feature Collapse)
|
||
|
||
在极大规模 Batch 训练下,若数据噪声过高,模型可能陷入**局部最优解**。
|
||
|
||
- **现象**:模型通过学习图像的背景频率或特定伪影(如水印)来实现对齐,导致特征向量集中在超球面的极小区域,丧失泛化性。
|
||
|
||
|
||
### 4.3 分辨率瓶颈与零样本Gap
|
||
|
||
CLIP 在 224x224 分辨率下训练,而 SD 通常生成 512+ 分辨率的图像。
|
||
|
||
- **挑战**:ViT 的位置编码 (Positional Embedding) 在外推至高分辨率时会产生畸变,导致生成的图像在宏观结构上与文本对齐,但在微观细节上存在语义漂移。
|
||
|
||
|
||
---
|
||
|
||
**结论**:CLIP 的成功在于其将多模态问题转化为一个简洁的**对齐优化问题**,为生成式模型提供了稳健的语义先验。然而,其对语义结构理解的缺失,仍是当前 Generative AI 领域亟待攻克的数学高地。 |