Paper · 2023-03-27 · cs.CV, cs.AI
Sigmoid Loss for Language Image Pre-Training
SigLIP replaces CLIP's batch-softmax contrastive loss with an independent binary sigmoid loss on every image-text pair, plus a learnable bias initialised at -10. No global normalisation is needed, so the loss can be chunked across devices. It beats softmax below 16k batch, saturates near 32k, and a SigLiT model reaches 84.5% ImageNet zero-shot on four TPUv4 chips in two days.
Contrastive learningVision-language pre-trainingVision Transformer (ViT) backbonesvision-languagecontrastive-losspretrainingbatch-sizezero-shot
arXivPDFCodeMarkdown13 min read
AI-compiled by claude-opus-5-5 on 2026-10-18, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Models like CLIP learn to put pictures and their captions close together in a shared space, so that you can later classify an image by comparing it to text such as "a photo of a dog". The standard training signal is a softmax over a whole batch: for each image, the model must pick its own caption out of every caption in the batch, like a multiple-choice question with thousands of options. That needs every device to see every other device's embeddings and to build one huge table of all image-caption scores.
SigLIP asks a simpler question for each image-caption pair on its own: "do these two belong together, yes or no?" Each pair becomes a tiny binary classification problem, scored with a sigmoid. Because no pair needs to know about the others, the work can be split into small pieces that devices pass around, and memory stays small. Since almost every pair in a batch is a mismatch, the authors add a learned offset that starts the model off predicting "no", so early training is not dominated by fixing that imbalance.
The result is a loss that does as well as or better than the softmax version, clearly better at small batch sizes, and lets you train with far fewer accelerators. The authors also find that pushing the batch size towards a million brings little: around 32 thousand pairs per batch is enough.
TL;DR
- Replace the two-direction softmax (InfoNCE) loss of CLIP/LiT with a per-pair sigmoid binary cross-entropy over all |B|² image-text pairs, with logit
t·<x_i, y_j> + b, learnablet = exp(t')andb, initialisedt' = log 10,b = -10§3.2 alg. 1 §4.9. - The loss is a sum of independent terms, so it can be computed device-by-device with text embeddings rotated between devices instead of an all-gather and a full |B|×|B| matrix; per-device memory goes from |B|² to b² §3.3 fig. 1.
- Sigmoid beats softmax clearly below 16k batch; both saturate around 32k, and 1M batch gives almost nothing over 256k §4.1 §4.2 fig. 2.
- Headline (author-reported): SigLiT g/14 84.5% ImageNet 0-shot with 4 TPUv4 chips in 2 days; SigLIP B/16 from scratch 73.4% with 32 chips in 5 days; SigLIP SO-400M at 384px 83.2% ImageNet 0-shot tab. 1 tab. 3.
- Also: set Adam/Adafactor β2 = 0.95 to survive large-batch gradient spikes §4.7.
Problem
CLIP-style contrastive pre-training normalises pairwise similarities with a batch softmax, applied twice (image→text and text→image) because the softmax is asymmetric §3.1. A stable softmax needs an extra pass to subtract the maximum §1. In data-parallel training, every device must all-gather all embeddings and materialise the |B|×|B| similarity matrix, which is memory heavy and scales quadratically with batch size §3.3. This makes large batches expensive and couples the batch size to the definition of the task §1. Like any contrastive setup, the method assumes that the text belonging to image j is unrelated to image i for i ≠ j, which is noisy in practice §3.
Method
Both towers produce embeddings that are L2-normalised: x_i = f(I_i)/‖f(I_i)‖₂,
y_i = g(T_i)/‖g(T_i)‖₂ §3.1. The image tower is a ViT, the text tower a
transformer §3.1.
Softmax baseline (CLIP/LiT) §3.1:
-\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\,x_i\cdot y_i}}{\sum_{j=1}^{|\mathcal{B}|} e^{t\,x_j\cdot y_i}}\right) §3.1
with t = exp(t') and t' a global learnable scalar §3.1.
Sigmoid loss §3.2. Every pair (i, j) in the batch is an independent
binary classification; z_ij = 1 if image i and text j are paired, -1
otherwise. As printed in the paper:
-\frac{1}{|\mathcal{B}|}\sum_{i=1}^{|\mathcal{B}|}\sum_{j=1}^{|\mathcal{B}|}\underbrace{\log\frac{1}{1+e^{z_{ij}(-t\,x_i\cdot y_j + b)}}}_{\mathcal{L}_{ij}} §3.2
Note the normaliser is 1/|B| (number of positives), not 1/|B|² §3.2. The
bias b is a learnable scalar like t; it counters the heavy imbalance of
|B| positives against |B|² − |B| negatives, which would otherwise dominate
the loss and cause large corrective steps early on §3.2. See Pitfalls for
the sign of b in this equation versus Algorithm 1.
Algorithm 1 from the paper alg. 1:
# img_emb : image model embedding [n, dim]
# txt_emb : text model embedding [n, dim]
# t_prime, b : learnable temperature and bias
# n : mini-batch size
t = exp(t_prime)
zimg = l2_normalize(img_emb)
ztxt = l2_normalize(txt_emb)
logits = dot(zimg, ztxt.T) * t + b
labels = 2 * eye(n) - ones(n) # -1 with diagonal 1
l = -sum(log_sigmoid(labels * logits)) / nChunked multi-device implementation §3.3 fig. 1. With D devices
and per-device batch b = |B|/D (here b is a batch size, not the bias),
the loss is rewritten as:
-\frac{1}{|\mathcal{B}|}\underbrace{\sum_{d_i=1}^{D}}_{\text{A: all devices}}\;\underbrace{\sum_{d_j=1}^{D}}_{\text{B: swap negs}}\;\underbrace{\sum_{i=b d_i}^{b(d_i+1)}\;\sum_{j=b d_j}^{b(d_j+1)}\mathcal{L}_{ij}}_{\text{C: per-device loss}} §3.3
Algorithm: chunked sigmoid loss [§3.3] [fig. 1]
Input: on each device d, local image embeddings X_d and text embeddings Y_d (b each)
1. Each device computes the b×b block X_d · Y_dᵀ: b positives (diagonal) and
b−1 negatives per row; accumulate its loss terms (sum C).
2. Permute text embeddings across devices, so device d now holds the texts of
its neighbour; compute the b×b all-negative block and accumulate (sum B).
3. Repeat step 2 until every device has seen every other device's texts
(D−1 permutes in total).
4. Sum the per-device losses across devices (sum A) and divide by |B|.
Output: the full sigmoid loss; only a b×b block is ever materialised.The authors argue D collective permutes are faster than two all-gathers and that per-device memory drops from |B|² to b² §3.3. This is what enabled batch sizes above one million on relatively few devices §3.3.
Recipes studied.
- SigLiT: a frozen, pre-trained image tower (image embeddings precomputed) plus a text tower trained from scratch with the sigmoid loss §1 §4.1.
- SigLIP: both towers trained from scratch, or the image tower initialised from a pre-trained, unlocked checkpoint §4.2 §4.5.
- mSigLIP: multilingual SigLIP on all ~100 WebLI languages with a 250k vocabulary and a bottlenecked token embedding: an N×K embedding matrix followed by a K×W projection, with K ≪ W §4.3.
- When fine-tuning a pre-trained image tower inside SigLIP, use a 0.1 learning-rate multiplier on it and apply no weight decay to it; weight decay only on the randomly initialised text tower §4.5.
Hyperparameters
| Name | Value | Where | Notes |
|---|---|---|---|
temperature init t' | log 10 (so t = 10) | §3.2 §4.9 two_towers.py | t = exp(t'), learnable |
bias init b | -10 | §3.2 §4.9 | default for all experiments §4.9 |
| β2 (Adam / Adafactor) | 0.95 | §4.7 app. A | default 0.999 was unstable at large batch; used for all experiments §4.7 |
| default optimizer | ScalingViT-Adafactor | §4 | AdamW gives similar results tab. 7 |
| default learning rate / weight decay | 0.001 / 0.0001 | app. C | used across batch sizes 512 to 1024k for SigLIP and SigLiT app. C |
| SigLiT (§4.1) | |||
| image tower | frozen ViT-g (from LiT), precomputed embeddings | §4.1 app. A | |
| image preprocessing | resize only, fixed 288×288 | app. A | |
| text tower | Base size, from scratch | §4.1 app. A | |
| optimizer | ScalingViT-Adafactor, β1 = 0.9, β2 = 0.95 | app. A | |
| learning rate | 0.001, linear warmup over first 200M examples, then cosine to zero | app. A | |
| weight decay | 0.0001 | app. A | |
| tokenizer | 32k SentencePiece trained on English C4 | app. A | |
| max text tokens | 16 | app. A | |
| batch sizes | 512 to 1M | §4.1 tab. 8 | |
| examples seen | 450M, 900M, 3B, 18B | tab. 8 | fig. 2 left uses 18B |
| SigLiT, 4 TPUv4 chips (§4.4) | |||
| image tower | frozen ViT-AugReg-B/8, precomputed embeddings | §4.4 | |
| text tower | Large, 12 layers instead of 24 | §4.4 tab. 1 | |
| optimizer | LION, decoupled weight decay 1e-7 | §4.4 app. A | |
| learning rate | linear warmup over 6.5k steps to 1e-4, cosine decay to 0 over remaining 58.5k steps | §4.4 app. A | |
| steps / batch | 65,000 steps at 32k | §4.4 | just under one day |
| g/14 variant | ViT-g/14 image tower, Large text tower, 20k batch, 107k steps | §4.4 | under two days on 4 chips |
| SigLIP from scratch (§4.2) | |||
| data | WebLI, English pairs only | §4.2 | |
| towers | B/16 ViT image, B-sized transformer text | §4.2 | |
| image resolution | 224×224 | §4.2 | |
| tokenizer / max tokens | 32k SentencePiece (English C4) / 16 | §4.2 | |
| examples seen | 3B and 9B | tab. 5 | fig. 2 middle uses 9B |
| warmup / schedule | not stated | ||
| SigLIP with pre-trained image tower (§4.5) | |||
| image init | unlocked ViT-AugReg-B/16 | §4.5 | |
| LR multiplier on image tower | 0.1 | §4.5 | |
| weight decay on pre-trained image tower | none | §4.5 | text tower still decayed |
| hardware / batch / examples | 16 TPUv4, 16k, 2.4B | §4.5 | |
| mSigLIP (§4.3) | |||
| vocabulary | 250k | §4.3 | vs 32k multilingual; 250k gives slightly more than 1% gain at 900M examples §4.3 |
| embedding bottleneck K | 96 (W = 768 for Base) | §4.3 | about 0.5% ImageNet 0-shot drop vs full 250k embedding §4.3 |
| examples seen | 30B | §4.3 tab. 2 | |
| Scaled models (§4.6) | |||
| towers | ViT-B, ViT-L or SO-400M image; same-size text | §4.6 | |
| examples / batch | 40B at 32k | §4.6 | |
| image patches / text tokens | 256 patches, 64 tokens | §4.6 | |
| higher-resolution adaptation | +5B examples at target resolution, 100× smaller LR, no weight decay | §4.6 | |
| Label-noise study (§4.10) | |||
| towers | M/16 image, M text, from scratch | §4.10 app. E | |
| batch / examples | 16384 / 3.6B | §4.10 app. E | |
| schedule | cosine, linear warmup over 10% of steps to peak 0.001 | app. E |
Results
All numbers are author-reported. ImageNet accuracy is zero-shot top-1 (%).
Small-hardware setups tab. 1. SigLiT uses frozen public checkpoints; SigLIP B/16 in the first row starts from a public unlocked checkpoint, the last two rows are from scratch.
| Model | Image | Text | Batch | #TPUv4 | Days | INet-0 |
|---|---|---|---|---|---|---|
| SigLiT | B/8 (frozen) | L (12 layers) | 32k | 4 | 1 | 79.8 |
| SigLiT | g/14 (frozen) | L | 20k | 4 | 2 | 84.5 |
| SigLIP | B/16 (unlocked) | B | 16k | 16 | 3 | 71.0 |
| SigLIP | B/16 | B | 32k | 32 | 2 | 72.1 |
| SigLIP | B/16 | B | 32k | 32 | 5 | 73.4 |
For comparison the authors cite CLIP at about 2500 TPUv3-days for 72.6% §4.5. Note that the text says the B/8 SigLiT reached 79.7% §4.4 while Table 1 lists 79.8.
SigLiT batch-size sweep (ImageNet 0-shot, sigmoid / softmax) tab. 8:
| Batch | 450M sig | 450M soft | 900M sig | 900M soft | 3B sig | 3B soft | 18B sig | 18B soft |
|---|---|---|---|---|---|---|---|---|
| 512 | 72.5 | 69.5 | 75.0 | 72.8 | 77.2 | 74.6 | - | - |
| 1k | 75.5 | 73.6 | 77.2 | 76.0 | 79.6 | 77.9 | - | - |
| 2k | 77.1 | 76.3 | 79.3 | 78.1 | 81.3 | 80.1 | 82.2 | 81.2 |
| 4k | 79.2 | 78.3 | 80.8 | 79.8 | 82.4 | 81.2 | 83.0 | 82.0 |
| 8k | 80.8 | 79.7 | 82.0 | 81.0 | 83.1 | 82.6 | 83.6 | 83.1 |
| 16k | 81.2 | 81.2 | 82.7 | 82.1 | 83.8 | 83.5 | 84.2 | 84.1 |
| 32k | 81.9 | 81.4 | 83.1 | 82.7 | 84.2 | 84.0 | 84.6 | 84.4 |
| 64k | 81.6 | 81.6 | 83.0 | 82.8 | 84.3 | 84.1 | 84.7 | 84.4 |
| 128k | 80.5 | 80.0 | 83.1 | 83.2 | 84.2 | 84.4 | 84.7 | 84.6 |
| 256k | 72.8 | 72.2 | 82.1 | 81.7 | 84.3 | 84.2 | 84.7 | 84.6 |
| 1024k | - | - | - | - | - | - | 84.7 | - |
The best SigLiT with a B-sized text model reaches 84.7%, vs 85.2% reported by LiT with a 10× larger g-sized text model §4.1. With short schedules, very large batches lose because they take few optimizer steps §4.1 fig. 3.
SigLIP batch-size sweep (ImageNet 0-shot) tab. 5:
| Batch | 3B sigmoid | 3B softmax | 9B sigmoid | 9B softmax |
|---|---|---|---|---|
| 512 | 51.5 | 47.7 | - | - |
| 1k | 57.3 | 53.2 | - | - |
| 2k | 62.1 | 59.3 | - | - |
| 4k | 65.3 | 63.8 | 68.4 | 66.6 |
| 8k | 68.6 | 66.6 | 70.6 | 69.4 |
| 16k | - | - | 72.3 | 71.7 |
| 32k | 69.9 | 69.9 | 73.4 | 72.9 |
| 98k | 69.5 | 69.7 | 73.0 | 73.2 |
| 307k | - | - | 71.6 | 72.6 |
Sigmoid peaks at 32k, softmax needs 98k and still does not exceed the sigmoid peak; 307k hurts both §4.2. On four TPUv4 chips, Base SigLIP fits batch 4096 vs 2048 for the equivalent CLIP §4.2.
mSigLIP batch-size sweep (Base, 30B examples; XM = Crossmodal-3600 text→image recall@1) tab. 2:
| 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 |
| XM de | 54.7 | 54.8 | 55.4 | 54.3 | 54.7 |
| XM en | 46.5 | 46.2 | 46.5 | 46.6 | 46.6 |
| XM hi | 9.1 | 8.5 | 7.9 | 8.1 | 7.3 |
| XM ru | 50.1 | 49.9 | 49.7 | 48.6 | 49.3 |
| XM zh | 30.7 | 32.5 | 32.0 | 30.6 | 23.7 |
The 32k result (34.9%) is compared against 28.5% reported for a LiT model with a four-billion-parameter ViT-e §4.3. The scaled-up mSigLIP ViT-B (§4.6 recipe, "*32k") averages 54.1 image→text and 42.6 text→image recall@1 over 36 languages; per-language numbers are in tab. 9 and fig. 8. The authors note a concurrent Large model reaching 42.96% image retrieval recall@1 §4.6.
Comparison with released models tab. 3 (ImageNet-1k zero-shot; COCO zero-shot recall@1):
| Method | ViT | # Patches | Val | v2 | ReaL | ObjectNet | COCO I→T | COCO T→I |
|---|---|---|---|---|---|---|---|---|
| CLIP | B | 196 | 68.3 | 61.9 | - | 55.3 | 52.4 | 33.1 |
| OpenCLIP | B | 196 | 70.2 | 62.3 | - | 56.0 | 59.4 | 42.3 |
| EVA-CLIP | B | 196 | 74.7 | 67.0 | - | 62.3 | 58.7 | 42.2 |
| SigLIP | B | 196 | 76.2 | 69.6 | 82.8 | 70.7 | 64.4 | 47.2 |
| SigLIP | B | 256 | 76.7 | 70.0 | 83.1 | 71.3 | 65.1 | 47.4 |
| SigLIP | B | 576 | 78.6 | 72.1 | 84.5 | 73.8 | 67.5 | 49.7 |
| SigLIP | B | 1024 | 79.2 | 73.0 | 84.9 | 74.7 | 67.6 | 50.4 |
| CLIP | L | 256 | 75.5 | 69.0 | - | 69.9 | 56.3 | 36.5 |
| OpenCLIP | L | 256 | 74.0 | 61.1 | - | 66.4 | 62.1 | 46.1 |
| CLIPA-v2 | L | 256 | 79.7 | 72.8 | - | 71.1 | 64.1 | 46.3 |
| EVA-CLIP | L | 256 | 79.8 | 72.9 | - | 75.3 | 63.7 | 47.5 |
| SigLIP | L | 256 | 80.5 | 74.2 | 85.9 | 77.9 | 69.5 | 51.1 |
| CLIP | L | 576 | 76.6 | 72.0 | - | 70.9 | 57.9 | 37.1 |
| CLIPA-v2 | L | 576 | 80.3 | 73.5 | - | 73.1 | 65.5 | 47.2 |
| EVA-CLIP | L | 576 | 80.4 | 73.8 | - | 78.4 | 64.1 | 47.9 |
| SigLIP | L | 576 | 82.1 | 75.9 | 87.0 | 81.0 | 70.6 | 52.7 |
| OpenCLIP | G (2B) | 256 | 80.1 | 73.6 | - | 73.0 | 67.3 | 51.4 |
| CLIPA-v2 | H (630M) | 576 | 81.8 | 75.6 | - | 77.4 | 67.2 | 49.2 |
| EVA-CLIP | E (5B) | 256 | 82.0 | 75.7 | - | 79.6 | 68.8 | 51.1 |
| SigLIP | SO (400M) | 729 | 83.2 | 77.2 | 87.5 | 82.9 | 70.2 | 52.0 |
Bias and temperature initialisation (Base, 8k batch, 900M examples, SigLIP setup; 0-shot accuracy) tab. 4:
| b | t' | INet-0 | Pet-0 | C100-0 |
|---|---|---|---|---|
| n/a | log 10 | 62.0 | 81.8 | 59.9 |
| -10 | log 10 | 63.0 | 82.4 | 61.0 |
| -10 | log 1 | 61.0 | 80.0 | 60.4 |
| 0 | log 10 | 61.7 | 79.9 | 59.0 |
| 0 | log 1 | 53.7 | 73.2 | 53.8 |
Hyperparameter robustness (SigLIP from scratch, 3B examples; ImageNet 0-shot) tab. 6. The sweep covered LR {0.0003, 0.001, 0.003} × WD {0.00003, 0.0001, 0.0003} × batch {8k, 16k, 32k} app. C.
| Batch | Default | Best | Best LR | Best WD |
|---|---|---|---|---|
| 8k | 70.1 | 70.1 | 0.001 | 0.0001 |
| 16k | 70.0 | 70.0 | 0.001 | 0.0001 |
| 32k | 68.2 | 69.0 | 0.0003 | 0.00003 |
Run-to-run variance (32k batch, 3B examples, five runs; ImageNet 0-shot) tab. 7:
| Loss | Optimizer | Result (%) |
|---|---|---|
| Softmax | ViT-Adafactor | 69.9 ± 0.1 |
| Sigmoid | ViT-Adafactor | 70.1 ± 0.2 |
| Sigmoid | AdamW | 70.3 ± 0.1 |
A linear LR schedule instead of cosine gave 69.9% app. C.
Other findings.
- Fine-tuning a pre-trained image tower with weight decay degrades its representation (ImageNet 10-shot falls); disabling weight decay on it fixes this §4.5 fig. 4.
- Batch composition (SigLiT, 16k batch, 900M examples): masking negatives at random hurts more as the ratio approaches balance; keeping only the easiest negatives fails; keeping the hardest nearly preserves quality, and matching total pairs seen with hard negatives slightly improves it §4.8 fig. 6. The learned bias and mean logits rise as fewer negatives remain §4.8.
- Under image, text, batch-alignment or combined corruption, sigmoid-trained M-scale models stay ahead of softmax across corruption probabilities §4.10 fig. 7.
Paper vs code
- Sign of the bias. The printed sigmoid-loss equation puts
binsidez_ij(−t·x·y + b), i.e. an effective logitt·x·y − b§3.2. Algorithm 1 and the code use logitt·x·y + balg. 1 siglip.py. Withb = −10meant to push initial predictions towards "negative" §3.2, only the Algorithm 1 / code form is consistent. - Chunked loss. The paper describes D collective permutes passing text embeddings to the neighbouring device §3.3 fig. 1. The current trainer has no chunked version ("TODO: implement chunked version with shard_map") and computes the full logit matrix under
jiton sharded arrays siglip.py siglip.py. A chunked variant exists in the deprecated contrastive trainer; it loops over devices and fetches each device's text embeddings with a maskedpsum(an all-reduce), with a comment that appermuteversion was memory intensive _deprecated_contrastive.py. - Example config differs from paper defaults. The released minimal SigLIP config (
siglip_lit_coco.py, COCO captions) usesbias_init = -2.71,temperature_init = 10,lr = 0.001,wd = 0.01, Adam for a BERT-base text tower, gradient clipping at norm 1.0 and warmup of max(3% of steps, 100) siglip_lit_coco.py. The paper's bias init is −10 §4.9; the paper does not mention gradient clipping. The configs for the paper's own WebLI runs were not found at this commit. - β2 in Adafactor. big_vision's Adafactor uses a step-dependent second-moment decay
min(beta2_cap, 1 − (step+1)^(−0.8))withbeta2_cap = 0.999by default optax.py. The paper's "β2 = 0.95" §4.7 presumably corresponds to setting this cap to 0.95; the paper does not say so. - Normalisation epsilon. The code divides by
‖z‖ + 1e-8two_towers.py; the paper writes a plain L2 normalisation §3.1. - Loss normaliser matches: the code takes the row-sum of per-pair negative log-likelihoods and averages over images, i.e. divides by the number of positives siglip.py, as in alg. 1.
Pitfalls
- Bias sign. Implement
logits = t·<x, y> + bwithbinitialised at −10, as in Algorithm 1 and the code, not the printed equation's−t·x·y + bform (see Paper vs code). Earlier arXiv versions had a pseudocode mistake andtvst'typos, per the acknowledgements p. 10; check which version you are reading. tvst'. The learnable parameter ist'; the multiplier ist = exp(t'). Initialiset' = log 10, nott = log 10§4.9. Initialising witht' = log 1andb = 0costs 9.3 ImageNet points in the ablation tab. 4.- Do not divide by |B|². The loss is summed over all |B|² pairs but divided only by |B| §3.2 alg. 1. Dividing by |B|² changes the effective learning rate as batch size changes.
- Use
log_sigmoid(labels * logits), notlog(sigmoid(...)), for numerical stability alg. 1 siglip.py. - Distributed negatives. Positives are only on the local diagonal; every cross-device block is all negatives §3.3. If you shard the batch, make sure cross-device blocks get label −1 everywhere and that each pair is counted exactly once.
- The chunked loss needs D−1 communication rounds per step and a loop over devices; "faster than all-gather" is the authors' claim, and the released chunked code actually uses all-reduces §3.3 _deprecated_contrastive.py.
- Large-batch instability. At large batch, gradient-norm spikes cause large parameter jumps and loss spikes; β2 = 0.95 fixed it for all their runs §4.7 fig. 5. Occasional spikes still occur fig. 5.
- Bigger batch is not better. Gains saturate near 32k; 307k hurt both SigLIP losses §4.2 and >32k hurt mSigLIP retrieval §4.3. Large batches also need long schedules to pay off fig. 3.
- Fine-tuning a pre-trained image tower: without disabling weight decay on it, results are barely above from-scratch §4.5 fig. 4. Use the 0.1 LR multiplier too §4.5.
- Unstated: learning-rate warmup and schedule for the from-scratch SigLIP runs, weight-decay form (coupled vs decoupled) for Adafactor runs, text-tower architecture details beyond size, and the exact WebLI filtering are not stated.
- SigLiT numbers depend on precomputed frozen embeddings of a strong image tower; the 4-chip results do not include the cost of training that tower or computing the embeddings §4.4.
Lineage
- Builds on: CLIP and ALIGN, whose batch-softmax loss it replaces; LiT, whose locked-image recipe gives SigLiT §1 §4.1.
- Related efficiency work: FLIP (arXiv:2212.00794) randomly drops visual tokens; BASIC and LAION scaled batch size only up to 16k and 160k respectively §2.
- Compared against: CLIP, OpenCLIP, EVA-CLIP (arXiv:2303.15389), CLIPA-v2 (arXiv:2306.15658) tab. 3.
Source and license
Adapted from “Sigmoid Loss for Language Image Pre-Training” by Xiaohua Zhai, Basil Mustafa, Alexander Kolesnikov, Lucas Beyer (arXiv:2303.15343), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/google-research/big_vision at commit 0127fb6b337e (Apache-2.0). Any quoted code is shown under that license.