兰州市网站建设_网站建设公司_响应式网站_seo优化
2025/12/17 21:15:33 网站建设 项目流程

CLIP很强,但它也有“贵族病”:训练成本高得让人望而却步,动辄上千GPU天的算力让无数团队只能仰望。

直到SigLIP横空出世。

它用一个简单到近乎“暴力”的思想——Sigmoid Loss,把CLIP那套繁琐的InfoNCE损失彻底抛弃,训练效率直接起飞,同样的效果,算力成本却能砍掉数倍甚至一个数量级。更重要的是,它把跨模态对齐的门槛从“天价”拉到了“人人都能玩”。

CLIP开创了跨模态对齐的时代,而SigLIP,则让这个时代真正变得成本可控、触手可及。

今天本文就带你彻底拆开看:SigLIP到底是怎么用一招“Sigmoid”就把CLIP打得落花流水的?

一、CLIP方法回顾

[CLIP(Contrastive Language-Image Pretraining)通过一个非常优雅但计算量巨大的InfoNCE对比损失来训练图像编码器和文本编码器,使匹配的(正例)图文对相似度最高,非匹配的(负例)相似度最低。

1.CLIP概述

图 1 总结了CLIP这种方法背后的关键概念。我们有一个文本嵌入和一个对应的图像嵌入,它们应该代表相同的概念,在这个例子中是“靠近运河的风车”。 通常,训练数据量是巨大的,例如 CLIP 就是在 4 亿个文本-图像对上训练的。在训练过程中,CLIP 的作者使用了 32K 对图像-文本对的批大小(batch size)。在我们的示例中,我们仅使用 4 的批大小。因此,我们得到一个 的相似性矩阵。正如在 [CLIP]论文中所述,目标是增加正样本对(此处为绿色)之间的相似性,并降低负样本对之间的相似性。

图1:CLIP示例

2.CLIP损失函数计算

  1. 相似度计算
  • 训练的关键是计算一个批次内所有文本和图像对之间的相似度得分,通常将这些得分组织成一个矩阵(如 图2 所示)。
  • 矩阵的行代表批次中的所有图像(例如 到),列代表批次中的所有文本(例如 到 )。
  • 对角线元素(例如 )是正向对,即它们是相互匹配的文本和图像。
  • 非对角线元素(例如 是负向对,即它们是不匹配的文本和图像。
  1. 损失函数

CLIP 使用对称的交叉熵损失(Cross-Entropy Loss)来鼓励正向对的相似度高于所有负向对。损失的计算是双向的:

A. 图像到文本的损失 (Image-to-Text Loss):

这部分损失是针对相似度矩阵的行进行 Softmax 归一化(即对所有文本进行 Softmax),目标是最大化图像 与其匹配文本 的概率。

B. 文本到图像的损失 (Text-to-Image Loss):

这部分损失是针对相似度矩阵的列进行 Softmax 归一化(即对所有图像进行 Softmax),目标是最大化文本 与其匹配图像 的概率。

总损失 是上面两部分的平均值:

总损失公式:

  1. 计算成本问题
  • CLIP 成功的关键在于使用了极大的批次大小 (Batch Size),原论文中达到了 32K 对文本-图像对。
  • 这意味着相似度矩阵是一个 的巨大矩阵。
  • 这个庞大的矩阵计算使得 CLIP 模型在计算上非常昂贵,需要大量的 GPU 资源。

图2:CLIP的损失计算示例

损失函数了解较少的读者,可以先读[你真的懂深度学习怎么训练的吗?一文让你搞懂四个关键步骤]

二、SigLIP

SigLIP 是对比式 CLIP 图像编码器的一个改进版本。与 CLIP 类似,SIGLIP 的目标也是拥有一个能将文本和图像映射到同一个共享嵌入空间的模型。

1.SigLIP 损失函数的改进:从 Softmax 到 Sigmoid

SIGLIP 模型的作者旨在改进 CLIP 中损失矩阵计算所涉及的巨大计算开销。

在 CLIP 中,使用的是基于 Softmax 的损失函数,它需要比较每个嵌入向量的整行或整列(即需要一个全局视图)。

与此不同,SIGLIP 仅通过使用基于 Sigmoid 的损失函数,实现了只比较每一对单独的嵌入对。这种方法避免了对当前批次数据的全局依赖,从而降低了计算复杂度。

SigLIP 损失计算步骤

SigLIP 损失的计算过程可以分为以下四个主要步骤(如图3):

  1. 初始相似度矩阵 (S):我们首先计算所有图像-文本对之间的余弦相似度,得到一个包含所有相似度值的矩阵 S。
  2. 矩阵缩放(Scaled Logits):作者通过使用 logit_scale 和 logit_bias 这两个可学习参数对相似度矩阵进行缩放。其中,通过将 Logits 乘以 进行缩放,可以使概率分布更尖锐,帮助模型在训练过程中对其正确预测更有信心;logit_bias 用来调整“分界点”,让 logits 对正负更加区分化
  3. 创建标签矩阵(Label Matrix):创建的标签矩阵本质上是将缩放后的 Logits 对角线上的元素乘以 +1.0,非对角线上的元素乘以 -1.0。
  • 目标:对于正样本对(对角线),使 Logit 尽可能地高且为正;对于负样本对(非对角线),使 Logit 尽可能地低且为负。
  1. 计算 Log-Sigmoid 损失:将缩放后的 Logits 矩阵与标签矩阵相乘后,我们将其输入到 log_sigmoid 损失函数中。

Sigmoid 损失的理解

使用 log_sigmoid 损失,我们不需要对当前批次有一个全局的视图。相反,我们只计算单个对的损失,例如 和 (在本例中为 -11.5),或 和 (在本例中为 -7.7)。 损失值代表什么?

  • 以 为例,初始向量相似度为 -0.54,表明两者完全不匹配。然而,它们属于同一对( 是 的正确描述),理应匹配。
  • 模型的目标是使 signed_logits 矩阵中的每个值都尽可能地大且为正。
  • 对于 产生的较大的负数(-7.71),与模型目标相反,表明该对被错误预测。
  • 正确预测的正样本对(如 )或负样本对(如 ),其对数似然(Log-Likelihood)接近 0,因此贡献的损失较低。
  • 错误预测的正样本对(如 )或负样本对(如 ),其对数似然是一个较大的负数,因此贡献的损失较高。

图3:SigLIP损失计算示例

signed_logits = label_matrix * logits_per_textdef logsigmoid(x): return -np.log(1 + np.exp(-x))log_likelihoods = logsigmoid(signed_logits)# The axis=1 argument sums across the columns (for each row)nll_per_text = -np.sum(log_likelihoods, axis=1)

与 CLIP 的对比与损失函数分析

与 CLIP 不同,我们没有一个双向损失,我们可以简单地将每个单独的 对数似然(log_likelihood) 沿列求和,然后取平均值来得到最终损失。图 4 说明了对数似然的损失只能是 0 或一个负数。

大的负数表明该特定的文本-图像组合是错误匹配:

(1) 意味着一个正样本的相似度很低;

(2) 或者意味着一个负样本的相似度很高。

图4:log sigmoid函数

优化的目标是让对数似然矩阵中的每个数字都接近 0!label_matrix(标签矩阵)巧妙地根据样本对是否匹配,改变了实现该目标的方式。

案例分析

案例 A:匹配对(例如,T2 和 I2)

  • 标签: +1
  • 相似度(Similarity):-0.54
  • 数学要求: scaled_logit * (+1) 必须是正数。
  • 所需操作: 模型必须使 scaled_logit(以及余弦相似度)为正数。
  • T2/I2 的当前现实: scaled_logit 是 -7.7。
  • 结果: signed_logit 是 -7.7。损失(Loss)很高。
  • 更新: 优化器将调整权重,使 T2 和 I2 的嵌入(embeddings)下次更相似。

案例 B:不匹配对(例如,T1 和 I2)

  • 标签: -1
  • 相似度(Similarity):-0.77
  • 数学要求: scaled_logit * (-1) 必须是正数。
  • 所需操作: 模型必须使 scaled_logit 为负数(因为 负数 * -1 = 正数)。
  • T1/I2 的当前现实: scaled_logit 是 -11.0。
  • 结果: signed_logit 是 +11.0。log_sigmoid 是 0。损失(Loss)是 0。
  • 更新: 模型所做的正是要求。该样本对不需要进行大的更新。

多设备数据并行计算

对比学习(Contrastive Learning)已成为现代视觉-语言模型(如 CLIP)预训练的核心范式,其典型代表 SigLip 通过使用逐对 sigmoid loss 替代传统的 InfoNCE(softmax-based)损失,在大规模噪声数据上取得了显著的性能提升和训练稳定性。

然而,当训练扩展到数百甚至数千张加速卡时,传统的数据并行策略在计算 SigLip 损失时会遭遇严重的效率瓶颈。

具体而言,在单卡批大小为 |B|、使用 D 个设备的情况下,全局批大小达到 |B|×D。为正确计算逐对相似度并施加 sigmoid 损失,标准实现必须:

  1. 通过昂贵的 all-gather 操作将所有设备的图像和文本嵌入收集到每一张卡上;
  2. 在每张卡上显式构造一个 |B|×D × |B|×D 规模的巨大相似度矩阵(pairwise similarity matrix),其内存占用随设备数 D 平方增长。

在 D=256 或更高时,该矩阵轻易达到数百 GB 量级,不仅远远超出单卡显存容量,还会因频繁的跨节点集体通信而大幅降低训练吞吐量,成为限制模型进一步扩展的关键障碍。

幸运的是,sigmoid 损失的数学形式具有高度可分解的特性,使得我们能够在完全不构造全局相似度矩阵、不执行完整 all-gather 的前提下,等价且数值稳定地计算梯度。

损失函数

损失函数重构

这种分块 (chunked) 版本的损失计算策略的关键在于:

  1. 避免全局相似度矩阵: 它通过在设备 上迭代地拉取来自所有其他设备 的局部负样本块,本地计算该局部块的损失,从而避免了实例化庞大的 矩阵。
  2. 数据并行化: 损失计算是分布式的,利用了 D个设备。
  3. 内存效率: 由于每台设备只需要处理 大小的局部相似度计算,而不是完整的 矩阵,因此内存效率大大提高。
高效损失计算演示

下面通过一个包含 3 个设备 和 全局批量大小为 12 的模拟设置,图5展示了高效的损失实现。没有使用 all-gathers(全收集操作),并且在任何时间点,只有亮黄色方块(大小为)在内存中被具体化(即被实际存储)。

图5:高效并行损失计算示意图

高效实现的目标是增量式地同时完成损失计算和特征通信。由于 SigLIP 对每一个图像-文本对的处理是完全独立的,因此 SigLip 的损失可以增量式计算。

图 5 用一个玩具示例(toy setup)展示了这个思想:一个 batch_size=12 的小批量分布在 3 张 GPU 上。在这个例子中,有 12 个正样本对和 132 个负样本(非对角线)对。

具体过程如下:

  1. 每张 GPU 先计算自己设备上那部分 mini-batch(大小为 4)的损失。

  2. 然后,每张 GPU 将自己的文本特征(text features)传递给一个“兄弟 GPU”。

    GPU#1 接收来自 GPU#2 的文本特征,GPU#2 接收 GPU#3 的,GPU#3 接收 GPU#1 的(形成一个环形传递)。

  3. 此时,每张 GPU 拥有了一组新的负样本对:自己的图像特征 + 来自兄弟 GPU 的文本特征。

  4. 接着在每张 GPU 上基于这些新的负样本对重新计算损失,并累加到之前已经计算的损失上。

SigLIP 就这样反复执行这两个步骤(损失计算 + 特征通信),直到整个 mini-batch 的总损失全部计算完成。

结束语

SigLIP 通过将对比学习转换为二维分类任务,以极简却高效的方式,在零样本分类、线性探针、跨模态检索以及多语言图像理解等任务上,展现出了超越传统 CLIP 模型的惊人性能。

更重要的是,它揭示了一个关键洞见:在高质量、大规模图文对数据面前,精心设计的二元交叉熵(sigmoid loss)能够比 InfoNCE 更充分地挖掘配对样本中的信号,从而在同等数据量下实现更高的参数效率和更强的鲁棒性。

SigLIP 的成功不仅为开源社区提供了一个性能强劲、可商用、无需复杂蒸馏即可媲美甚至超越闭源模型的视觉-语言基座,更为后续的多模态大模型研究指明了一条“回归本质”的路径:当数据质量与规模达到一定阈值时,最简单的配对损失往往就是最优解。未来,基于 SigLIP 的思想,我们完全有理由期待出现参数更小、速度更快、在长尾分布与多语言场景下更鲁棒的开源多模态基础模型。

从这个意义上说,SigLIP 不仅仅一个模型,它是多模态预训练范式悄然转向的一个标志性节点——在数据为王的时代,真正决定上限的,或许从来就不是损失函数的复杂程度,而是我们能否持续提供足够干净、足够多样的真实图文配对。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询