SigLIP:用 Pairwise Sigmoid 重新思考 CLIP 的对比学习损失

视觉-语言对比预训练(Vision-Language Contrastive Pretraining, VLP)以 CLIP/ALIGN 为代表:用海量图文对把图像与文本映射到同一嵌入空间,通过“相似则近、无关则远”的学习目标获得强大的零样本迁移能力。然而,传统 CLIP 风格的 softmax 对比损失天然依赖 全局归一化(需要看到 batch 内所有负样本),带来 ∣B∣×∣B∣|B|\times|B|B×B 级别的相似度矩阵、显存与通信开销,并迫使训练强依赖超大 batch。

SigLIP(Sigmoid Loss for Language-Image Pre-training)的核心思想很直接:
保留 CLIP 的双编码器架构,但把 softmax contrastive loss 替换为 pairwise sigmoid loss。这样做的收益是:损失不再需要全局归一化,样本对可以近似“独立”地计算;在分布式场景更容易实现;在中小 batch 下通常更强,同时还能扩展到极大的全局 batch(甚至百万级)而不会被 N2N^2N2 级显存直接卡死。


1. 背景与动机:CLIP 的优势与代价

1.1 CLIP 为什么成功

CLIP 的训练目标可以理解为:在一个 batch 中,图像与文本是一一配对的正样本,其余配对都视为负样本。它通过对比学习让模型把正确配对的相似度抬高、错误配对的相似度压低,从而学到可泛化的跨模态表示。

这带来三个直接好处:

  1. 数据获取相对容易:图文对来自互联网弱标注(alt-text、标题、上下文等)。
  2. 零样本迁移:用文本编码器把“类别名/描述”编码成向量,就能作为分类器权重做 ImageNet 等任务的零样本分类。
  3. 规模化有效:模型越大、数据越多通常越强。

1.2 CLIP 的关键瓶颈:softmax 的全局归一化

在 CLIP 中,设一个 batch 有 NNN 对样本 (Ii,Ti)(I_i, T_i)(Ii,Ti)。图像编码器与文本编码器输出归一化后的向量:

  • 图像向量 xi∈Rdx_i \in \mathbb{R}^dxiRd
  • 文本向量 yi∈Rdy_i \in \mathbb{R}^dyiRd
    并定义相似度(常用点积或余弦相似度):
    sij=xi⊤yj s_{ij} = x_i^\top y_j sij=xiyj

CLIP 的经典做法是 双向 softmax(image-to-text 与 text-to-image):

Image-to-Text(给定图像找对应文本):
Li2t=−1N∑i=1Nlog⁡exp⁡(sii/t)∑j=1Nexp⁡(sij/t) \mathcal{L}_{i2t} = -\frac{1}{N}\sum_{i=1}^N \log \frac{\exp(s_{ii}/t)}{\sum_{j=1}^N \exp(s_{ij}/t)} Li2t=N1i=1Nlogj=1Nexp(sij/t)exp(sii/t)

Text-to-Image(给定文本找对应图像):
Lt2i=−1N∑i=1Nlog⁡exp⁡(sii/t)∑j=1Nexp⁡(sji/t) \mathcal{L}_{t2i} = -\frac{1}{N}\sum_{i=1}^N \log \frac{\exp(s_{ii}/t)}{\sum_{j=1}^N \exp(s_{ji}/t)} Lt2i=N1i=1Nlogj=1Nexp(sji/t)exp(sii/t)

最终损失为:
LCLIP=Li2t+Lt2i \mathcal{L}_{\text{CLIP}} = \mathcal{L}_{i2t} + \mathcal{L}_{t2i} LCLIP=Li2t+Lt2i

这里的 ttt 是温度超参数,用于控制 softmax 分布的“尖锐程度”。

问题出在分母:
每个正样本项的归一化分母都需要 batch 内所有负样本,因此必须显式或隐式构造 N×NN\times NN×N 的相似度矩阵 {sij}\{s_{ij}\}{sij}。当 NNN 很大时:

  • **显存:**存下或分块计算 N2N^2N2 个相似度都昂贵
  • **通信:**分布式数据并行下,需要跨设备 all-gather 图像与文本特征,才能得到全局 batch 的负样本集合
  • **吞吐:**all-gather 往往导致“等待所有设备到齐”,形成同步瓶颈

这也是为什么 CLIP 常强调大规模 GPU/TPU 集群:不是因为小规模不能训,而是 softmax 训练在小 batch 下效果往往掉得更厉害,而在大 batch 下又容易被 N2N^2N2 复杂度拖累。


2. SigLIP 的核心:Pairwise Sigmoid Loss

SigLIP 的关键改变是把问题从“多分类”改写为“二分类”,把每个图像-文本配对当作一个二元判别任务:

  • 正样本:(Ii,Ti)(I_i, T_i)(Ii,Ti) 应该匹配
  • 负样本:(Ii,Tj)(I_i, T_j)(Ii,Tj)j≠ij\neq ij=i)应该不匹配

2.1 Sigmoid Loss 的形式

SigLIP 为每个 pair (i,j)(i,j)(i,j) 定义一个标签 zijz_{ij}zij

  • i=ji=ji=j(正对),zij=+1z_{ij}=+1zij=+1
  • i≠ji\neq ji=j(负对),zij=−1z_{ij}=-1zij=1

并引入可学习或可设定的尺度(温度)ttt 与偏置 bbb,用如下的 log-sigmoid 目标进行优化:
LSigLIP=1N2∑i=1N∑j=1Nlog⁡(1+exp⁡(−zij⋅(t⋅sij+b))) \mathcal{L}_{\text{SigLIP}} = \frac{1}{N^2}\sum_{i=1}^N \sum_{j=1}^N \log\left(1+\exp\left(-z_{ij}\cdot (t\cdot s_{ij} + b)\right)\right) LSigLIP=N21i=1Nj=1Nlog(1+exp(zij(tsij+b)))

也可以把内部写成 sigmoid 的形式:令 σ(u)=11+exp⁡(−u)\sigma(u)=\frac{1}{1+\exp(-u)}σ(u)=1+exp(u)1,则

  • 对正样本希望 t⋅sii+bt\cdot s_{ii}+btsii+b 大,使 σ(tsii+b)\sigma(t s_{ii}+b)σ(tsii+b) 接近 1
  • 对负样本希望 t⋅sij+bt\cdot s_{ij}+btsij+b 小,使 σ(tsij+b)\sigma(t s_{ij}+b)σ(tsij+b) 接近 0

直观解释:

  • CLIP softmax:每个图像要在 NNN 个文本里选对一个(多分类)
  • SigLIP sigmoid:每个 pair 都做“匹配/不匹配”(二分类)

2.2 为什么“不需要全局归一化”很重要

对比一下两者最关键的结构差异:

  • softmax 的核心是归一化:
    每个正样本都要除以 ∑jexp⁡(⋅)\sum_j \exp(\cdot)jexp(),分母必须包含所有负样本的分数。
  • sigmoid 的核心是独立判别:
    每个 pair 的损失只依赖该 pair 的分数 (tsij+b)(t s_{ij}+b)(tsij+b) 与标签 zijz_{ij}zij,没有 “必须把所有负样本放进同一个分母” 的结构性要求。

这带来两个直接收益:

  1. 显存友好:不再“必须”在同一时刻持有整个 N×NN\times NN×N 相似度矩阵;可以逐块(block-wise)计算并累加损失。
  2. 分布式更简单:不需要为双向 softmax 进行两次全量 all-gather(图像特征与文本特征都 gather);实现上可以只围绕一侧特征进行更轻量的交换策略。

3. 一个具体例子:CLIP vs SigLIP 在同一 batch 的学习行为差异

假设一个 batch 里有 4 对样本 (I1,T1),…,(I4,T4)(I_1,T_1),\dots,(I_4,T_4)(I1,T1),,(I4,T4)。对某张图像 I1I_1I1

  • CLIP(softmax) 会把 (I1,T1)(I_1,T_1)(I1,T1) 当成唯一正确类别,其余 (I1,T2),(I1,T3),(I1,T4)(I_1,T_2),(I_1,T_3),(I_1,T_4)(I1,T2),(I1,T3),(I1,T4) 都是竞争类别。
    梯度不仅取决于正对分数,也会受到“所有负对分数在分母中的占比”影响。如果某个负样本 T3T_3T3I1I_1I1 的相似度异常高,它会显著改变归一化分布,进而强烈影响梯度方向与幅度。

  • SigLIP(sigmoid) 会对每个 pair 单独施压:

    • 对正对 (I1,T1)(I_1,T_1)(I1,T1):推动 s11s_{11}s11 增大
    • 对负对 (I1,T2)(I_1,T_2)(I1,T2):推动 s12s_{12}s12 减小
    • 对负对 (I1,T3)(I_1,T_3)(I1,T3):推动 s13s_{13}s13 减小
    • 对负对 (I1,T4)(I_1,T_4)(I1,T4):推动 s14s_{14}s14 减小
      每个 pair 的梯度只由该 pair 的分数决定,不会因为“别的负样本分数”改变归一化分母而被重新加权。

在数据噪声场景(例如图文对存在误配、标题与图片弱相关)下,这种差异更明显:
softmax 往往会把“某个噪声负样本意外高分”放大成全局归一化的扰动;sigmoid 则把它局部化为某些 pair 的损失异常,而不会让整个分母结构被牵连。


4. SigLIP 的高效分布式实现:分块计算 + 特征置换

即使 sigmoid loss 不要求全局归一化,计算所有 N2N^2N2 个 pair 的相似度仍然是二次复杂度。SigLIP 的关键工程点是:把“全局 N2N^2N2 的计算”拆成“每次只在内存里保留一个小块 b2b^2b2,边通信边计算边累积。

4.1 设定:数据并行下的局部 batch

设有 DDD 个设备(GPU/TPU),全局 batch 为 ∣B∣|B|B,则每个设备上的局部 batch:
b=∣B∣D b = \frac{|B|}{D} b=DB

每个设备 ddd 持有本地图像特征块 X(d)∈Rb×dX^{(d)}\in\mathbb{R}^{b\times d}X(d)Rb×d 与文本特征块 Y(d)∈Rb×dY^{(d)}\in\mathbb{R}^{b\times d}Y(d)Rb×d

目标是计算跨设备的负样本 pair:本地 X(d)X^{(d)}X(d) 与所有设备的 Y(k)Y^{(k)}Y(k) 做配对。

4.2 朴素 all-gather 的问题

如果直接 all-gather 所有设备的特征,你会得到全局 Y∈R∣B∣×dY\in\mathbb{R}^{|B|\times d}YRB×d,然后本地计算 X(d)Y⊤X^{(d)} Y^\topX(d)Y 产生 b×∣B∣b\times |B|b×B 的相似度块。

问题是:

  • all-gather 是同步且昂贵的
  • 同一时刻可能仍需要较大的中间张量(尤其在多层并行或更复杂调度下)

4.3 分块置换(ring / permutation)思路

SigLIP 的常见高效做法是 只传递文本特征块,并按设备进行置换

  • 第 0 轮:每个设备用本地 (X(d),Y(d))(X^{(d)}, Y^{(d)})(X(d),Y(d)) 计算一块 b×bb\times bb×b 的相似度与损失(包含正对与本地负对)。
  • 第 1 轮:设备 ddd 从相邻设备收到文本块 Y(d−1)Y^{(d-1)}Y(d1)(或 Y(d+1)Y^{(d+1)}Y(d+1),具体取决于置换方向),计算 (X(d),Y(d−1))(X^{(d)}, Y^{(d-1)})(X(d),Y(d1)) 的损失块并累加。
  • 第 2 轮:继续收到下一块文本特征,重复计算并累加。
  • ……
  • D−1D-1D1 轮:遍历完所有设备的文本块。

在任一时刻,每个设备内存里只需要持有:

  • 本地图像特征块 X(d)X^{(d)}X(d)(固定不动)
  • 当前轮次的文本特征块 Y(⋅)Y^{(\cdot)}Y()
  • 当前轮次的相似度块 S(d)∈Rb×bS^{(d)} \in \mathbb{R}^{b\times b}S(d)Rb×b

因此瞬时内存从可能的 ∣B∣2|B|^2B2(全局矩阵)降低为 b2b^2b2(局部块):
∣B∣2⟶b2=(∣B∣D)2 |B|^2 \quad \longrightarrow \quad b^2 = \left(\frac{|B|}{D}\right)^2 B2b2=(DB)2

4.4 玩具示例:3 个设备、全局 batch=12

D=3D=3D=3∣B∣=12|B|=12B=12,则每卡 b=4b=4b=4
每个设备都固定自己的 444 个图像向量 X(d)X^{(d)}X(d),然后通过 3 轮置换遍历 3 份文本块:

  • 轮 0:X(0)X^{(0)}X(0) vs Y(0)Y^{(0)}Y(0) 计算 4×44\times 44×4
  • 轮 1:X(0)X^{(0)}X(0) vs Y(1)Y^{(1)}Y(1) 计算 4×44\times 44×4
  • 轮 2:X(0)X^{(0)}X(0) vs Y(2)Y^{(2)}Y(2) 计算 4×44\times 44×4

整个过程中,从来不需要把 12×1212\times 1212×12 的矩阵显式放进同一块显存里,只是把 4×44\times 44×4 的块计算 3 次并累积。

这种方式的价值在于:当 ∣B∣|B|B 增长到几十万甚至百万级时,∣B∣2|B|^2B2 完全不可行,但 b2b^2b2 仍可能在合理的设备数下保持可控。


5. 实验现象:batch size 与性能的关系

SigLIP 与 CLIP 的对比实验通常会呈现以下规律(用 ImageNet 零样本准确率等指标衡量):

  1. 小 batch(例如 4K–8K)时,sigmoid 往往优于 softmax
    原因可以从优化角度理解:softmax 的“类别竞争 + 归一化分母”在负样本不足或分布不稳定时更容易出现梯度不理想;sigmoid 则把学习信号分散到每个 pair 的二元判别,往往更平滑。

  2. batch 增大到一定阈值后,收益趋于饱和
    常见观察是到 32K32K32K 左右性能接近最优或进入平台期。继续加大 batch(比如更大数量级)收益会显著递减。

  3. 超大 batch 不一定带来线性收益
    即便工程上能扩展到百万级 batch,性能增益也可能非常有限,甚至在某些设置下会因为优化噪声、数据噪声累积、学习率/温度调度不匹配等因素出现“训练更难但收益很小”。


6. 关键问题拆解

6.1 Sigmoid 损失相比 softmax 的核心优势是什么?

可以从三个维度总结:

(1) 不需要全局归一化
softmax 的分母 ∑jexp⁡(⋅)\sum_j \exp(\cdot)jexp() 强制依赖整个 batch 的负样本集合;sigmoid 的每个 pair 损失独立可加,因此天然适合分块累积。

(2) 分布式通信压力更小、实现更灵活
softmax 往往需要双向目标且依赖全局负样本,通常要更重的 all-gather;sigmoid 可通过“只置换文本块”的方式边通信边计算,避免同步等待与全量矩阵常驻。

(3) 中小 batch 下更稳健
大量设置中,sigmoid 在 <16K<16K<16K 的 batch 区间常能取得更好的效果;这对算力有限的研究者尤其重要。


6.2 batch size 为什么会影响视觉-语言对比学习?

batch size 的作用主要体现在“负样本数量与多样性”上。对比学习需要负样本来塑造判别边界,直觉上负样本越多越好,但真实情况更细:

  • softmax 框架下,负样本数量不足会让归一化分布过于粗糙,且“最难负样本”对分母的影响会变得不稳定,导致梯度噪声更大。
  • sigmoid 框架下,负样本同样重要,但学习信号更像“很多个二元分类器的加和”,对负样本数量的敏感性在实践中常更温和。

此外,当 batch 继续增大时,收益会进入递减区间:

  • 负样本已经足够覆盖主要混淆模式,再增加更多负样本只是重复
  • 数据噪声(误配、弱相关文本)也会随规模上升被放大,导致“更多负样本”不一定等价于“更干净的训练信号”
  • 优化超参(学习率、温度 ttt、偏置 bbb、权重衰减等)需要重新调配,否则大 batch 可能反而更难训

6.3 SigLiT 与 SigLIP 的区别:为什么 Locked-image Tuning 有意义?

这里把两者区分成“训练什么、冻结什么”:

  • SigLIP:图像编码器 + 文本编码器一起训练(端到端对齐)
    优点:潜在上限高
    代价:训练资源需求更大

  • SigLiT(Locked-image Tuning):冻结一个强视觉模型,只训练文本侧(或小部分适配)
    优点:资源需求显著降低,收敛更快,对算力友好
    代价:上限受冻结视觉表示限制

一个直观应用场景是:
当你已经有很强的视觉 backbone(例如在大规模图像任务上预训练充分),你可能更希望“用较小成本把文本空间对齐到这个视觉空间”,而不是重新训练视觉侧。SigLiT 这类策略的价值就在于:把计算预算集中在最关键的对齐环节


7. 实际场景中的两类典型案例

案例 A:算力受限的团队,无法轻松上 32K+ 全局 batch

目标:希望做一个“接近 CLIP 能力”的图文检索/零样本分类模型,但资源有限。
此时 sigmoid loss 往往更友好,因为:

  • 在较小 batch(例如 4K–8K)仍可能保持较强性能
  • 不必为构造巨大 N×NN\times NN×N 相似度矩阵付出高昂显存代价
  • 分布式实现可以用更轻量的特征交换策略降低通信瓶颈

案例 B:多语言图文检索,数据噪声更重

多语言数据常见问题:

  • 同一图片配套文本可能是短标签、机器翻译、甚至与图像弱相关的上下文片段
  • 文本分布更异质,噪声更难避免

在这类场景中,sigmoid 的“局部 pairwise 判别”常比“全局归一化的 softmax 竞争”更抗噪:
噪声样本更像影响某些 pair 的局部项,而不至于通过 softmax 分母机制对整批样本产生连锁影响。


Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐