【SigLIP论文阅读】:重新定义视觉-语言预训练的损失函数——VLA模型的“语言理解“基石

前言

如果你正在研究具身智能或者VLA(视觉-语言-动作)模型,你会发现一个有趣的现象:几乎所有最新的开源VLA模型都不约而同地放弃了曾经的王者CLIP,转而使用SigLIP作为它们的视觉-语言编码器。OpenVLA用它,Octo用它,小米的Xiaomi-Robotics-0也用它。为什么SigLIP能在短短一年内就取代CLIP的地位?因为它用一个简单到不能再简单的改动------把softmax换成sigmoid------就解决了CLIP几乎所有的痛点:小批量性能差、内存占用高、训练不稳定。今天我们就来深度拆解这篇来自Google DeepMind的神作,看看这个小小的改动到底有多大的魔力。


论文信息


一、为什么我们需要SigLIP?

在SigLIP出现之前,所有的视觉-语言预训练模型(比如CLIP、ALIGN、FLIP)都使用同一个损失函数:基于softmax的对比损失。这个损失函数的思想很简单:让匹配的图文对在特征空间中尽可能接近,不匹配的尽可能远离

但这个看似完美的损失函数有一个致命的缺陷:它需要在整个批次上进行归一化。这就像是老师给全班同学考试排名次,必须看到所有同学的成绩才能给每个人打分。这带来了两个严重的问题:

  1. 小批量性能灾难:如果班级人数太少(批量小),排名就没有意义,模型学不到好的特征。CLIP需要至少几千的批量才能有不错的性能。
  2. 内存爆炸:为了计算所有图文对的相似度,需要在内存中保存一个大小为B×B的矩阵(B是批量大小)。当B=32k时,这个矩阵就有10亿个元素,即使是A100也扛不住。

SigLIP的作者们问了一个简单的问题:我们真的需要排名吗?如果我们给每个图文对单独打分,告诉模型"这对是匹配的"或者"这对是不匹配的",会不会更好?

这个问题的答案就是sigmoid损失。它把对比学习从一个"多分类问题"变成了N个独立的"二分类问题"。就像是老师不再给全班排名,而是给每个学生的每道题单独打分,告诉他们"这道题做对了"或者"这道题做错了"。


二、SigLIP的核心思想:从排名到打分

2.1 传统的Softmax对比损失

我们先回顾一下CLIP使用的softmax对比损失:

−12∣B∣∑i=1∣B∣(log⁡etxi⋅yi∑j=1∣B∣etxi⋅yj+log⁡etyi⋅xi∑j=1∣B∣etyi⋅xj)-\frac{1}{2|\mathcal{B}|} \sum_{i=1}^{|\mathcal{B}|}\left(\log \frac{e^{t x_{i} \cdot y_{i}}}{\sum_{j=1}^{|\mathcal{B}|} e^{t x_{i} \cdot y_{j}}}+\log \frac{e^{t y_{i} \cdot x_{i}}}{\sum_{j=1}^{|\mathcal{B}|} e^{t y_{i} \cdot x_{j}}}\right)−2∣B∣1i=1∑∣B∣(log∑j=1∣B∣etxi⋅yjetxi⋅yi+log∑j=1∣B∣etyi⋅xjetyi⋅xi)

  • ∣B∣|\mathcal{B}|∣B∣:批次大小,也就是一个批次中有多少个图文对
  • xix_ixi:第iii张图片经过L2归一化后的特征向量
  • yiy_iyi:第iii段文本经过L2归一化后的特征向量
  • ttt:可学习的温度参数,用于缩放相似度得分
  • xi⋅yjx_i \cdot y_jxi⋅yj:图片iii和文本jjj的点积,也就是它们的相似度

通俗解释 :对于每一张图片iii,我们计算它和批次中所有文本的相似度,然后用softmax把这些相似度变成概率分布。我们希望图片iii和它对应的文本iii的概率尽可能大,和其他文本的概率尽可能小。同样地,对于每一段文本iii,我们也做同样的操作。

这个损失函数有两个问题:

  1. 不对称:需要计算两次softmax,一次是图片到文本,一次是文本到图片
  2. 全局依赖:每个样本的损失都依赖于批次中所有其他样本

2.2 革命性的Sigmoid对比损失

SigLIP提出的sigmoid损失简单得令人惊讶:

−1∣B∣∑i=1∣B∣∑j=1∣B∣log⁡11+ezij(−txi⋅yj+b)-\frac{1}{|\mathcal{B}|} \sum_{i=1}^{|\mathcal{B}|} \sum_{j=1}^{|\mathcal{B}|} \log \frac{1}{1+e^{z_{i j}\left(-t x_{i} \cdot y_{j}+b\right)}}−∣B∣1i=1∑∣B∣j=1∑∣B∣log1+ezij(−txi⋅yj+b)1

  • zijz_{ij}zij:标签,如果图片iii和文本jjj是匹配的,zij=1z_{ij}=1zij=1;否则zij=−1z_{ij}=-1zij=−1
  • bbb:新增的可学习偏置项,用于解决正负样本不平衡问题
  • 其他符号和上面相同

通俗解释 :对于每一个图文对(i,j)(i,j)(i,j),我们都把它当作一个独立的二分类问题。如果它们是匹配的,我们希望模型输出的概率接近1;如果不匹配,希望概率接近0。sigmoid函数正好能把任意实数映射到(0,1)之间,适合作为二分类的概率。

你可能会问:这么简单的改动,为什么之前没有人想到?

其实不是没有人想到,而是大家都认为正负样本的严重不平衡会让模型学不到东西。在一个批次大小为B的情况下,只有B个正样本,却有B²-B个负样本。也就是说,负样本的数量是正样本的B倍。当B=32k时,负样本是正样本的32000倍!

但SigLIP的作者们发现,只要加入一个简单的偏置项bbb,并把它初始化为-10,就能完美解决这个不平衡问题。这个偏置项会让模型在训练初期倾向于预测所有对都是负样本,然后再慢慢学习区分正样本。

2.3 伪代码实现

SigLIP的损失函数实现起来非常简单,只有几行代码:

python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

def siglip_loss(img_emb, txt_emb, t_prime, b):
    """
    SigLIP损失函数的PyTorch实现
    
    Args:
        img_emb: 图片特征 [batch_size, embed_dim]
        txt_emb: 文本特征 [batch_size, embed_dim]
        t_prime: 可学习的温度参数的对数
        b: 可学习的偏置参数
    
    Returns:
        loss: SigLIP损失值
    """
    # 计算温度参数
    t = torch.exp(t_prime)
    
    # L2归一化特征
    zimg = F.normalize(img_emb, dim=-1)
    ztxt = F.normalize(txt_emb, dim=-1)
    
    # 计算所有图文对的相似度
    logits = torch.matmul(zimg, ztxt.T) * t + b
    
    # 创建标签:对角线为1,其他为-1
    labels = 2 * torch.eye(logits.shape[0], device=logits.device) - 1
    
    # 计算sigmoid损失
    loss = -torch.sum(F.logsigmoid(labels * logits)) / logits.shape[0]
    
    return loss

就是这么简单!和CLIP的损失函数相比,它不仅更短,而且更对称,只需要计算一次。


三、让百万级批量成为可能的工程魔法

sigmoid损失最大的优势不是它的性能,而是它的内存效率。因为每个图文对的损失都是独立的,我们不需要在内存中保存整个B×B的相似度矩阵。Google的工程师们更进一步,设计了一个精妙的"分块实现",让内存复杂度从O(B²)降到了O(b²),其中b是每个设备的批量大小。

3.1 分块实现原理

图1:SigLIP的分块损失实现(出处:原文Figure 1)

这个分块实现的思想非常巧妙:

  1. 初始时,每个设备都有自己的b个图片和b个文本
  2. 每个设备先计算自己本地的b×b个图文对的损失,这包含了所有的正样本和b-1个负样本
  3. 然后,设备之间交换文本特征:设备1把自己的文本发给设备2,设备2发给设备3,依此类推
  4. 每个设备再计算自己的图片和新收到的文本的损失
  5. 重复这个过程,直到每个设备的图片都和所有设备的文本计算过损失

这样一来,任何时候每个设备的内存中都只需要保存一个b×b的相似度矩阵,而不是B×B的。当有D个设备时,B = D×b,内存占用就变成了原来的1/D²。

举个例子:如果我们有32个设备,每个设备的批量是1024,那么总批量是32768。传统的softmax实现需要保存32768×32768≈10亿个元素的矩阵,而SigLIP的分块实现只需要保存1024×1024≈100万个元素的矩阵,内存占用减少了1000倍!

正是这个分块实现,让SigLIP能够在只有4个TPUv4芯片的情况下训练出批量大小为32k的模型,甚至能够支持高达100万的批量大小。


四、用数据说话:SigLIP到底有多强?

SigLIP的作者们做了非常详尽的实验,从各个角度验证了sigmoid损失的优势。我们来看最关键的几个实验。

4.1 批量大小的影响:32k就足够了!

这是论文中最重要的一个发现:无论是sigmoid损失还是softmax损失,性能都会在批量大小达到32k时饱和,再增大批量几乎没有收益

图2:批量大小对性能的影响(出处:原文Figure 2)

从图中我们可以看到三个非常清晰的结论:

  1. 小批量下SigLIP碾压CLIP:当批量大小小于16k时,SigLIP的性能比CLIP高出一大截。在批量大小为2k时,差距甚至超过了5%。
  2. 32k是黄金批量:无论是SigLiT(冻结视觉编码器)、SigLIP(从头训练)还是mSigLIP(多语言),性能都在32k批量时达到峰值。
  3. 过大的批量反而有害:当批量大小超过256k时,性能开始下降。这打破了"批量越大越好"的神话。

这个发现对于普通研究者来说意义重大。以前训练CLIP需要几百个GPU才能达到不错的性能,现在用32个GPU就能训练出最好的SigLIP模型。

4.2 极致的训练效率:4个TPU两天训练出SOTA模型

SigLIP的高效性在SigLiT(Locked-image Tuning)设置下体现得淋漓尽致。SigLiT的思想是:冻结一个预训练好的视觉编码器,只训练文本编码器。

模型 视觉编码器 文本编码器 批量大小 TPUv4数量 训练时间 ImageNet零样本准确率
SigLiT B/8 ViT-B/8(冻结) L* 32k 4 1天 79.8%
SigLiT g/14 ViT-g/14(冻结) L 20k 4 2天 84.5%
SigLIP B/16 ViT-B/16(从头) B 32k 32 2天 73.4%

表1:SigLiT和SigLIP的训练效率(出处:原文Table 1)

注:L是指只有12层的Large模型*

只用4个TPUv4芯片训练两天,就能达到84.5%的ImageNet零样本准确率!这在以前是不可想象的。作为对比,原始的CLIP ViT-L/14需要256个TPUv3芯片训练12天,才能达到76.2%的准确率。

4.3 全面超越CLIP家族

在和其他公开模型的对比中,SigLIP在几乎所有任务上都取得了SOTA的结果。

方法 视觉编码器 ImageNet-1k零样本 COCO图文检索R@1
CLIP ViT-B 68.3% 33.1%
OpenCLIP ViT-B 70.2% 42.3%
EVA-CLIP ViT-B 74.7% 42.2%
SigLIP ViT-B 76.2% 47.2%
CLIP ViT-L 75.5% 36.5%
EVA-CLIP ViT-L 79.8% 47.5%
SigLIP ViT-L 80.5% 51.1%
SigLIP SoViT-400M 83.2% 52.0%

表2:SigLIP与其他模型的对比(出处:原文Table 3)

从表中可以看到,即使是相同大小的模型,SigLIP也比CLIP和EVA-CLIP高出1-2个百分点。特别是在图文检索任务上,SigLIP的优势更加明显,ViT-B版本的SigLIP甚至超过了ViT-L版本的EVA-CLIP。


五、深入理解SigLIP:关键消融实验

为了搞清楚SigLIP为什么这么好,作者们做了一系列详尽的消融实验。

5.1 偏置项的重要性

我们之前提到,sigmoid损失加入了一个偏置项bbb来解决正负样本不平衡问题。这个偏置项到底有多重要?

偏置b 温度t' ImageNet零样本 Oxford Pets零样本 CIFAR-100零样本
log10 62.0% 81.8% 59.9%
-10 log10 63.0% 82.4% 61.0%
0 log10 61.7% 79.9% 59.0%
0 log1 53.7% 73.2% 53.8%

表3:偏置项和温度初始化的影响(出处:原文Table 4)

从表中可以清楚地看到,加入初始化为-10的偏置项,能在所有任务上带来稳定的提升。如果没有偏置项,或者偏置项初始化不正确,性能会大幅下降。

5.2 负样本比例的影响

很多人担心sigmoid损失中正负样本的严重不平衡会影响性能。作者们做了一个实验,人为地减少负样本的数量,看看会发生什么。

图3:负样本比例的影响(出处:原文Figure 6)

实验结果非常有趣:

  1. 随机去掉负样本会降低性能:这说明负样本确实是有用的
  2. 只保留最难的负样本几乎不影响性能:这说明大部分学习其实来自于少数难负样本
  3. 不平衡并不是大问题:即使负样本是正样本的32000倍,模型也能学得很好

5.3 标签噪声鲁棒性

互联网上的图文对数据充满了噪声,很多图片和文本并不匹配。一个好的损失函数应该对这些噪声有鲁棒性。

图4:标签噪声鲁棒性对比(出处:原文Figure 7)

从图中可以看到,无论是什么类型的噪声(图片噪声、文本噪声、对齐噪声),SigLIP的性能下降都比CLIP小得多。这是因为sigmoid损失把每个对当作独立的二分类问题,一个错误的标签只会影响一个对的损失,而不会像softmax那样影响整个批次的分布。

5.4 大批次训练的稳定性

当批量大小超过32k时,训练会变得不稳定,经常出现梯度爆炸的情况。作者们发现,只要把Adam优化器的β2参数从默认的0.999降到0.95,就能完美解决这个问题。

图5:降低β2稳定大批次训练(出处:原文Figure 5)

β2参数控制了梯度的移动平均窗口大小。降低β2意味着优化器会更关注最近的梯度,而不是很久以前的梯度。这样当出现梯度尖峰时,优化器能更快地反应,避免参数更新过大导致训练崩溃。


六、为什么SigLIP是VLA模型的最佳选择?

现在我们终于明白,为什么所有的VLA模型都选择SigLIP作为它们的视觉-语言编码器了:

  1. 小批量微调性能好:VLA模型通常需要在自己的机器人数据集上进行微调,而这些数据集的批量一般都很小。SigLIP在小批量下的优异性能正好满足了这个需求。
  2. 内存效率高:SigLIP的分块实现能大幅降低内存占用,让VLA模型能在消费级GPU上运行和微调。
  3. 标签噪声鲁棒性好:机器人领域的数据集通常都有很多噪声,比如示教数据中的错误动作、不精确的语言描述等。SigLIP对噪声的鲁棒性让它能更好地处理这些脏数据。
  4. 和DINOv2完美配合:DINOv2提供高质量的视觉特征,SigLIP提供高质量的视觉-语言对齐特征。两者结合起来,就是VLA模型的"黄金搭档"。OpenVLA就是用DINOv2作为视觉编码器,用SigLIP的文本编码器作为语言编码器,取得了超越闭源RT-2-X的性能。

七、动手实践:5行代码使用SigLIP

最后,我们来写几行代码,体验一下SigLIP的强大。用Hugging Face的Transformers库,只需要5行代码就能提取图文特征并计算相似度:

python 复制代码
from transformers import AutoProcessor, AutoModel
import torch
from PIL import Image

# 加载模型和处理器
processor = AutoProcessor.from_pretrained("google/siglip-so400m-patch14-384")
model = AutoModel.from_pretrained("google/siglip-so400m-patch14-384")

# 加载图片和文本
image = Image.open("robot.jpg")
texts = ["a robot arm picking up a cup", "a dog running in the park", "a car driving on the road"]

# 预处理
inputs = processor(text=texts, images=image, return_tensors="pt", padding=True)

# 提取特征
with torch.no_grad():
    outputs = model(**inputs)
    image_features = outputs.image_embeds
    text_features = outputs.text_embeds

# 计算相似度
similarity = torch.matmul(image_features, text_features.T)
print("相似度得分:", similarity)
# 输出:相似度得分: tensor([[0.8234, 0.1245, 0.0987]])

就是这么简单!你可以用这些特征来做零样本分类、图文检索,或者作为VLA模型的输入。


总结

SigLIP是视觉-语言预训练领域的一个里程碑式的工作。它用一个简单到不能再简单的改动------把softmax换成sigmoid------就解决了CLIP长期以来的痛点,大幅提升了训练效率,降低了训练成本,同时还取得了更好的性能。

SigLIP的核心贡献可以总结为三点:

  1. 提出了sigmoid对比损失:它不需要全局归一化,小批量性能好,内存效率高,实现简单。
  2. 证明了32k批量就足够了:打破了"批量越大越好"的神话,让普通研究者也能训练出SOTA的视觉-语言模型。
  3. 提供了高效的分块实现:能支持高达100万的批量大小,同时大幅降低了内存占用。

对于VLA领域来说,SigLIP就像是给机器人装上了一个"语言理解大脑",让它们能更好地理解人类的语言指令,并和视觉感知结合起来。未来,随着模型更大、数据更多、方法更好,我们相信视觉-语言模型会变得越来越强大,最终实现真正的通用具身智能。而SigLIP,就是这条道路上最重要的一步。

相关推荐
zzhongcy3 小时前
Flyway 数据库版本管理工具使用指南
数据库·人工智能
zuozewei3 小时前
AI-7D-SATS 平台的架构选型:为什么选择“Workflow + Multi-Agent“的混合架构?
人工智能·架构
兴通物联科技3 小时前
工业手持终端 PDA 键盘化设计与现场作业效率优化 —— 以 XT8001D 为例
大数据·物联网·计算机视觉·计算机外设·硬件架构
深度学习lover3 小时前
<数据集>yolo 易拉罐识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·易拉罐识别
企业架构师老王3 小时前
金融财务审核自动化实战:从票据稽核到流水对账,AI Agent落地全链路方案解析
人工智能·金融·自动化
机器学习算法与Python实战3 小时前
云端 AI Agent 实测:数据分析→PPT→视频,一个输入框跑完整个项目
人工智能·数据分析·powerpoint
财经资讯数据_灵砚智能3 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月18日
人工智能·python·信息可视化·自然语言处理·ai编程
AI小百科3 小时前
AI大模型推理的不确定性建模有哪些方法
大数据·人工智能
FairGuard手游加固3 小时前
FairGuard亮相百度AI开发者大会,共探AI反外挂进化之路
人工智能·百度