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

149 lines
8.5 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: 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 领域亟待攻克的数学高地。