Sigmoid Loss for Language Image Pre-Training


TL;DR

本文提出了一种用于语言-图像预训练的简单成对 Sigmoid 损失函数 (Sigmoid loss),它将对比学习任务转化为对图文对的独立二元分类,从而解耦了损失计算与批次大小 (batch size) 的依赖,实现了更高的内存效率和在小批量数据下更优的性能。

关键定义

相关工作

当前,通过网络爬取的图文对进行对比预训练已成为获取通用计算机视觉骨干网络的主流方法,其代表性工作是 CLIP 和 ALIGN。这些方法通常采用基于 Softmax 的对比损失函数 (InfoNCE loss)。

然而,这种标准的 Softmax 损失存在一些关键问题:

  1. 全局依赖性: 它需要在整个批次内计算所有图文对的相似度分数,并通过 Softmax 进行归一化,这导致损失计算与批次大小紧密耦合。
  2. 高内存与计算开销: 在分布式训练中,计算全局归一化需要昂贵的 \(all-gather\) 操作来收集所有设备的嵌入向量,并且需要实例化一个大小为 $$ B × B $$ 的相似度矩阵,这极大地限制了批次大小的扩展。
  3. 数值不稳定性: 朴素的 Softmax 实现存在数值不稳定问题,通常需要额外的计算步骤来稳定。

本文旨在解决上述问题,提出一种更简单、高效且与批次大小解耦的损失函数,以降低语言-图像预训练的资源门槛。

本文方法

本文首先回顾了标准的 Softmax 损失,然后详细介绍了其核心贡献——成对 Sigmoid 损失及其高效实现。

Softmax 损失回顾

对于一个包含 \(|B|\) 个图文对的批次,传统的对比学习目标是拉近匹配对 \((I_i, T_i)\) 的嵌入表示,同时推开不匹配对 \((I_i, T_j≠i)\) 的嵌入表示。使用 Softmax 损失函数,其目标函数如下:

\[-\frac{1}{2 \mid \mathcal{B} \mid }\sum_{i=1}^{ \mid \mathcal{B} \mid } \left( \overbrace{\log \frac{e^{t\mathbf{x}_i \cdot \mathbf{y}_i}}{\sum_{j=1}^{ \mid \mathcal{B} \mid } e^{t\mathbf{x}_i \cdot \mathbf{y}_j}}}^{\text{image\_softmax}} + \log \frac{e^{t\mathbf{x}_i \cdot \mathbf{y}_i}}{\sum_{j=1}^{ \mid \mathcal{B} \mid } e^{t\mathbf{x}_j \cdot \mathbf{y}_i}} \right).\]

其中 \(x\) 和 \(y\) 分别是归一化后的图像和文本嵌入,\(t\) 是一个可学习的温度参数。该损失函数需要对图像和文本分别进行两次独立的归一化。

创新点:Sigmoid 损失

与上述方法不同,本文提出的 Sigmoid 损失将问题转化为对所有可能的图文对进行二元分类。其定义如下:

\[-\frac{1}{ \mid \mathcal{B} \mid }\sum_{i=1}^{ \mid \mathcal{B} \mid }\sum_{j=1}^{ \mid \mathcal{B} \mid }\log\frac{1}{1+e^{z_{ij}\left(-t\mathbf{x}_{i}\cdot\mathbf{y}_{j}+b\right)}},\]

其中,\(z_ij\) 是标签,如果图文对 \((i, j)\) 是匹配的(即 \(i=j\)),则 \(z_ij = 1\),否则 \(z_ij = -1\)。\(t\) 是可学习的温度参数,\(b\) 是为了应对正负样本严重不平衡而引入的可学习偏置项。这种设计将全局的对比学习问题分解为一系列独立的、局部的二元分类子问题。

\(Sigmoid loss\) 的伪代码实现如下:

算法 1 Sigmoid 损失伪代码实现

``\(python 1 # img_emb : 图像模型嵌入 [n, dim] 2 # txt_emb : 文本模型嵌入 [n, dim] 3 # t_prime, b : 可学习的温度和偏置 4 # n : mini-batch 大小 5 6 t = exp(t_prime) 7 zimg = l2_normalize(img_emb) 8 ztxt = l2_normalize(txt_emb) 9 logits = dot(zimg, ztxt.T) * t + b 10 labels = 2 * eye(n) - ones(n) # -1, 对角线为 1 11 l = -sum(log_sigmoid(labels * logits)) / n\)`$$

优点:高效的“分块”实现

Sigmoid 损失的独立性使其能够采用一种内存高效的“分块” (chunked) 实现方式,特别适用于分布式数据并行训练。

Refer to caption 图1:高效损失实现流程示意图。通过在设备间交换文本表征,避免了全局的 all-gather 操作和实例化大型相似度矩阵。

该实现的核心思想是避免一次性计算和存储整个 \(|B| × |B|\) 的相似度矩阵。具体步骤如下:

  1. 在每个设备上,首先计算其本地批次内的相似度,包括正样本对和部分负样本对。
  2. 然后,通过设备间的循环排列(collective permutes)操作,每个设备将其本地的文本嵌入发送给“邻居”设备。
  3. 每个设备接收到新的文本嵌入“块”后,本地的图像嵌入与这个新的文本嵌入块计算损失,并累加。
  4. 重复此过程 \(D-1\) 次(\(D\) 为设备数),直到所有图文对的组合都被计算过。

这种方式的优势在于:

实验结论

Sigmoid 损失与 Softmax 损失的对比

Refer to caption 图2:预训练批次大小的影响。左图 (SigLiT) 和中图 (SigLIP) 显示,Sigmoid 损失在小批量时优势明显,且两种损失的性能都在批次大小约为 32k 时达到饱和。

批次大小的影响

一个令人惊讶的核心发现是:对比学习的性能并非随着批次大小的增大而无限提升

Batch Size 16k 32k 64k 128k 240k
INet-0 71.6 73.2 73.2 73.2 73.1
XM avg 34.8 34.9 34.4 33.6 32.7

表格:mSigLIP 在不同批次大小下的性能。ImageNet 零样本准确率 (INet-0) 和 XM3600 平均检索性能 (XM avg) 均在 32k 批次大小达到峰值。

训练效率与可及性

消融研究与发现

Refer to caption 图7:Sigmoid 训练对数据噪声的鲁棒性。结果显示,在图像、文本或批次对齐被不同概率 $$p` 破坏时,使用 Sigmoid 损失训练的模型始终比使用 Softmax 的模型表现出更强的鲁棒性。

最终结论

本文提出的 Sigmoid 损失在小批量场景下显著优于传统的 Softmax 损失,并且因其内存和计算效率,使得在有限资源下进行大规模语言-图像预训练成为可能。研究还揭示了对比学习中批次大小的收益会快速饱和,一个中等大小(如 32k)的批次已足够获得接近最优的性能。最终,经过充分训练的 SigLIP 模型在多个零样本分类和图文检索基准上取得了业界领先(SOTA)的性能。

ViT size # Patches ImageNet-1k COCO R@1 (T→I) COCO R@1 (I→T)
SigLIP (B) 576 78.6 49.7 67.5
SigLIP (L) 576 82.1 52.7 70.6
SigLIP (SO 400M) 729 83.2 52.0 70.2
OpenCLIP (G 2B) 256 80.1 51.4 67.3
EVA-CLIP (E 5B) 256 82.0 51.1 68.8

表格:与公开发布模型的性能对比。SigLIP 模型在不同尺寸下均优于或可比于参数量大得多的模型。