Görüntü-metin modellerinde embedding uzayı
Bu sayfa, Embedding Space Viewer'da gördüklerinizin ne anlama geldiğini ve nerede yanıltabileceğini anlatıyor. Rakamların tamamı bu aracın kendi verisi üzerinde ölçüldü: Flickr30k'den 500 görüntü ve 2500 caption, CLIP ViT-B/32, 512 boyut. Başka bir veri kaynağı kullanıldığında belirtiliyor.
1. Embedding uzayı nedir?
Bir encoder, girdiyi (bir görüntüyü ya da cümleyi) sabit uzunlukta bir vektöre çevirir. Anlamca benzer girdiler bu uzayda birbirine yakın düşer; yakınlık genellikle cosine benzerliği ile ölçülür.
Görüntü-metin modellerinde temelde iki yaklaşım var:
- Ortak uzay (CLIP, SigLIP, ALIGN): Görüntü ve metin için ayrı encoder'lar var, ama ikisinin çıktısı aynı uzaya yansıtılıyor. Eğitimde contrastive loss, eşleşen görüntü-caption çiftlerini birbirine yaklaştırıyor, eşleşmeyenleri uzaklaştırıyor. Bu sitedeki modeller bu türden.
- Projeksiyonlu VLM'ler (LLaVA, BLIP-2, Qwen-VL): Görüntü parçaları bir bağlayıcı katman (MLP, Q-Former) üzerinden dil modelinin token uzayına taşınıyor. Burada ortak bir uzay yok; görsel taraf, dil modelinin uzayına uyarlanıyor.
2. Uzayda ne "durur"?
Hiçbir şey. Yaygın bir yanılgı, uzayda modelin eğitildiği verilerin bulunduğunu düşünmek. Oysa eğitimden geriye yalnızca iki fonksiyon kalır:
f_görüntü(görüntü) → 512 boyutlu vektör
f_metin(metin) → 512 boyutlu vektör
Eğitim verisi (CLIP için ~400 milyon görüntü-metin çifti) yalnızca bu fonksiyonların ağırlıklarını ayarlamak için kullanıldı. Bu ağırlıklar ~600 MB tutuyor; içlerinde bir veritabanı yok.
Uygulamada gördüğünüz her nokta, bizim seçtiğimiz bir görüntünün ya da metnin bu fonksiyondan geçirilmiş hâli. Yazdığınız bir metin sorgusu da aynı şekilde uzaya yerleşiyor; o cümle eğitim verisinde hiç geçmemiş olsa bile.
3. Modality gap
CLIP benzeri modellerde görüntü ve metin embedding'leri aynı uzayda olsalar da uzayın farklı bölgelerinde toplanır (Liang ve ark., 2022). Bu yüzden bir caption'ın en yakın komşuları neredeyse her zaman diğer caption'lar olur, kendi görüntüsü değil:
| Ölçüm (512B, Flickr + CLIP) | Değer |
|---|---|
| Merkezler arası uzaklık ‖μgörüntü − μmetin‖ | 0.802 |
| Eşleşen görüntü-caption çiftlerinin ortalama cosine'ı | 0.312 |
| Rastgele görüntü-caption çiftlerinin ortalama cosine'ı | 0.171 |
| Görüntü-görüntü ortalama cosine | 0.486 |
| Metin-metin ortalama cosine | 0.498 |
Eşleşen bir çift, rastgele bir çiftten yalnızca biraz daha benzer (0.31'e karşı 0.17). Buna karşılık herhangi iki görüntü veya herhangi iki metin birbirine çok daha benzer (~0.49). Örneğin "a dog running through the snow" sorgusunun en yakın metinleri ~0.78 cosine verirken, en yakın görüntüleri ~0.25'te kalıyor.
Gap kapatılabilir, ve bu retrieval'ı neredeyse etkilemez
Her modaliteden kendi ortalamasını çıkarıp vektörleri yeniden normalize ettiğinizde (uygulamada Centering → Modalite başına) gap neredeyse tamamen kapanıyor. Görüntüden metne arama başarısı ise az değişiyor. Global centering ise başka bir sonuç veriyor:
| Centering | Gap normu | Görüntü → metin top-1 | Metin → görüntü top-1 |
|---|---|---|---|
| Yok | 0.802 | 82.6% | 65.5% |
| Global ortalama | 0.883 | 32.2% | 65.9% |
| Modalite başına | 0.035 | 79.0% | 67.4% |
Model karşılaştırması (Imagenette, 10 sınıf): SigLIP'te gap CLIP'ten bile büyük (1.11'e karşı 0.84), ama zero-shot sınıflandırma doğruluğu %99.7. Yani gap büyük olsa da model görüntüyle metni doğru eşleştirebiliyor.
4. 3B'nin matematiksel sınırı
512 boyutu 3 boyuta indirmek bilgi kaybı demek. Peki bu kayıp ne kadar büyük? Bunun için şu soruları ölçtük:
| Soru | Cevap |
|---|---|
| Varyansın %90'ını taşımak için kaç boyut gerekiyor? | 184 |
| 3 boyut varyansın ne kadarını taşıyor? | %24 |
| Komşulukların %90'ını korumak için kaç boyut gerekiyor? | ~200 |
| İçsel boyut (TwoNN tahmini): görüntüler / metinler | ~21 / ~8 |
PCA ile hedef boyut arttıkça, bir noktanın 10 en yakın komşusundan kaçının korunduğu:
İçsel boyut en kritik sayı. Görüntüler, 512 boyutlu uzayın içinde ~21 boyutlu, kıvrımlı bir yüzey üzerinde duruyor. Hiçbir yöntem, ne kadar akıllı olursa olsun, 21 boyutlu bir yüzeyi 3 boyuta yırtmadan veya üst üste katlamadan yerleştiremez. Bu bir algoritma sorunu değil, geometrinin kendisinden gelen bir sınır.
5. Projeksiyon yöntemleri
Uygulamadaki dört yöntemi ve karşılaştırma için düz bir autoencoder'ı aynı metriklerle ölçtük (Flickr + CLIP, centering yok):
| Yöntem | Trust | kNN@10 | Spearman ρ | Pearson | Triplet |
|---|---|---|---|---|---|
| PCA | 0.805 | 0.049 | 0.792 | 0.857 | 0.735 |
| UMAP | 0.933 | 0.401 | 0.651 | 0.812 | 0.681 |
| t-SNE | 0.957 | 0.495 | 0.409 | 0.432 | 0.639 |
| RTD-AE | 0.819 | 0.083 | 0.696 | 0.682 | 0.736 |
| AE (yalnızca MSE) | 0.951 | 0.322 | 0.558 | 0.553 | 0.672 |
Trust (trustworthiness): 3B'de yakın görünen noktalar gerçekte de yakın mı? kNN@10: 512 boyuttaki 10 en yakın komşudan kaçı 3B'de de ilk 10'da? Spearman ρ / Pearson: rastgele nokta çiftlerinin uzaklıkları 3B'de ne ölçüde korunuyor? Triplet: "A, B'ye mi yakın, C'ye mi?" sorusunun cevabı 3B'de de aynı kalıyor mu? İlk ikisi yerel yapıyı, son üçü global yapıyı ölçüyor.
| Yöntem | Güvenilir olduğu konular | Yanıltabileceği konular |
|---|---|---|
| PCA | Global mesafeler, eksen yönleri, doğrusal yapılar. Gap genellikle ilk eksende. | Yerel komşuluklar (yalnızca %5'i korunuyor) |
| UMAP | Küme üyeliği, yerel komşuluk | Kümeler arası mesafe, küme büyüklüğü, gap'in büyüklüğü |
| t-SNE | Yakın komşuluklar (en iyisi) | Tüm global yapı; sorgu konumu yaklaşık |
| RTD-AE | Topoloji ve triplet sıralaması; sorgu konumu kesin | Yerel komşuluklar |
En iyi durumda bile (t-SNE) komşulukların yarısı 3B'de kayboluyor. Bu yüzden uygulamadaki komşu listeleri ve gap metrikleri 3B görünümden değil, doğrudan 512 boyutlu uzaydan hesaplanıyor.
6. Gap'i en doğru hangisi gösterir?
UMAP'te iki modalite birbirinden uzak iki ada olarak görünür; t-SNE ve RTD-AE'de ise iki bulut yan yana durur. Bu yüzden ilk bakışta "gap'i en iyi UMAP gösteriyor" sonucuna varmak kolay. Ölçümler bunun tersini söylüyor:
| Uzay | Komşuları aynı modaliteden | Lineer ayrılabilirlik | Gap / bulut yayılımı |
|---|---|---|---|
| 512B (gerçek) | %100 | %100 | 1.14 |
| PCA | %100 | %100 | 3.81 |
| UMAP | %100 | %100 | 9.28 |
| t-SNE | %100 | %99.5 | 1.66 |
| RTD-AE | %98.7 | %99.0 | 1.69 |
Gap dört yöntemin hepsinde var: her yöntemde komşular kendi modalitesinden ve iki modalite bir düzlemle ayrılabiliyor. Fark, gap'in ne kadar büyük çizildiğinde:
Gerçekte iki modalitenin merkezleri arasındaki uzaklık, bulutların kendi yarıçapıyla neredeyse aynı (oran 1.14). Yani gerçek resim yan yana duran ama hiç karışmayan iki bulut. UMAP bunu ~8 kat büyüterek iki ayrı ada gibi çiziyor. UMAP, gap'in var olduğunu en çarpıcı biçimde gösteren yöntem; ama ne kadar büyük olduğunu en çok bozan da yine o.
7. RTD-AE deneyi
Trofimov ve ark. (ICLR 2023), bir autoencoder'ı yeniden oluşturma hatası ile Representation Topology Divergence'ın toplamını en aza indirecek şekilde eğitiyor. RTD, iki nokta bulutunun topolojik özelliklerini (kümeler, döngüler ve bunların nerede oluştuğu) persistent homology ile karşılaştıran türevlenebilir bir ölçü. Makale, global yapıyı UMAP ve t-SNE'den belirgin biçimde daha iyi koruduğunu raporluyor.
Bu veride ne bulduk?
- RTD terimi işe yarıyor: Aynı autoencoder'a RTD eklemek global metrikleri belirgin biçimde iyileştiriyor (Spearman 0.56 → 0.70, triplet 0.67 → 0.74). Bunun bedeli yerel komşulukta ödeniyor (kNN 0.32 → 0.08).
- PCA'yı geçemiyor: Mesafe korelasyonunda PCA önde (0.86'ya karşı 0.68); triplet doğruluğunda ise ikisi fiilen berabere. Makaledeki büyük kazançlar, PCA'nın zayıf kaldığı doğrusal olmayan verilerde (Spheres, Mammoth) elde edilmişti. Bizim verideki en baskın yapı olan modality gap ise doğrusal.
- Daha uzun eğitim fayda sağlamıyor: En iyi değerlere ~80. epoch civarında ulaşılıyor; 320 epoch'a kadar sonuçlar iyileşmiyor. İki farklı seed tutarlı sonuçlar veriyor.
- Asıl avantajı parametrik olması: Metin sorguları eğitilmiş encoder'dan geçirilerek 3B'de kesin konumlarına yerleşiyor.
Yeniden üretilebilirlik notları
- PyPI'daki
rtd-ae0.1.2 paketi olduğu gibi çalışmıyor. Paket, giotto-ph'nin yayımlanmamış, değiştirilmiş bir sürümününpairsçıktısına dayanıyor. Standart giotto-ph'ninreturn_generatorsçıktısıyla aynı kenar çiftleri elde edilebiliyor; barkodların birebir aynı olduğunu doğruladık. - Resmi repolarda lisans bulunmadığı için bu sitedeki RTD uygulaması makaledeki tanımdan bağımsız olarak yazıldı. Altı farklı batch'te resmi kodla birebir aynı loss ve gradyan değerlerini veriyor.
- Makale GPU'da çalışıyordu. Apple M4 CPU'da, batch 80 ile 3000 noktanın 80 epoch'luk eğitimi 1.5–3 dakika sürüyor. Batch 256'da ise tek bir adım (rastgele başlangıçla) 43 saniye.
- Ayarlar makalenin 3B deneylerinden alındı: batch 80, 20 epoch ısınma, ardından 60 epoch RTD, λ = 1, H1, card = 50. Hiperparametre taraması yapılmadı.
8. Pratik kurallar
- Üç yöntemi karşılaştırın. Hepsinde görünen bir yapı büyük ihtimalle gerçektir. Yalnızca birinde görünen bir yapı büyük ihtimalle o yöntemin yan etkisidir.
- Kararlılığı test edin. UMAP parametrelerini değiştirince kaybolan bir küme güvenilmezdir.
- Bağlantı çizgilerine bakın. Bir nokta seçildiğinde çizilen çizgiler 512 boyuttaki gerçek komşulara gidiyor. 3B'de kısalarsa projeksiyon o bölgede doğru söylüyor; uzunlarsa yanıltıyor.
- Sorunuza göre yöntem seçin:
Soru Önerilen Gap var mı, yönü ne? PCA Gap ne kadar büyük? RTD-AE / t-SNE + sağ paneldeki 512B metrikleri Bir modalitenin içindeki konu kümeleri? UMAP / t-SNE Bir sorgu uzayın neresine düşüyor? PCA veya RTD-AE (kesin konum)
9. Bu site nasıl çalışıyor?
- Önceden hesaplananlar: Embedding'ler, 4 yöntem × 3 centering için 12 projeksiyon ve gap metrikleri. Bunlar PyTorch ile hesaplanıp sitede statik dosya olarak sunuluyor.
- Tarayıcıda hesaplananlar: Komşu aramaları (512 boyutta cosine) ve metin sorguları. Metin sorguları için CLIP'in metin encoder'ı transformers.js ile tarayıcınızda çalışıyor. Model ilk sorguda bir kez iniyor (~127 MB), sonra tarayıcı önbellekte tutuyor.
- Sorgu konumu: PCA ve RTD-AE'de kesin; UMAP ve t-SNE'de, 512 boyuttaki en yakın 10 komşunun 3B konumlarının benzerlikle ağırlıklı ortalaması.
Neden fp16 model?
Tarayıcıdaki modelin, sitedeki embedding'leri üreten PyTorch modeliyle aynı sonucu vermesi gerekiyor. Beş caption üzerinde ölçtük:
| Model dosyası | Boyut | PyTorch'la ortalama cosine | En kötü |
|---|---|---|---|
| int8 / uint8 / q8 | 64 MB | 0.79 | 0.59 |
| q4 / q4f16 | 73 MB | 0.978 | 0.959 |
| fp16 | 127 MB | 1.000 | 1.000 |
8-bit varyantlar sessizce yanlış sonuç veriyor. CLIP'te sorgu ile görüntüler arasındaki benzerlikler 0.20–0.30 gibi dar bir aralıkta toplandığı için, q4'ün %2–4'lük sapması bile sonuç sıralamasını değiştirmeye yetiyor.
Kaynak kod ve yerel sürüm (canlı UMAP/t-SNE parametreleri, SigLIP): github.com/gungorturan/embedding-space-viewer
10. Kaynaklar
- Radford ve ark. (2021). Learning Transferable Visual Models From Natural Language Supervision (CLIP). arXiv:2103.00020
- Zhai ve ark. (2023). Sigmoid Loss for Language Image Pre-Training (SigLIP). arXiv:2303.15343
- Liang ve ark. (2022). Mind the Gap: Understanding the Modality Gap in Multi-modal Contrastive Representation Learning. arXiv:2203.02053
- Trofimov ve ark. (2023). Learning Topology-Preserving Data Representations (RTD-AE), ICLR 2023. arXiv:2302.00136
- McInnes, Healy, Melville (2018). UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction. arXiv:1802.03426
- van der Maaten, Hinton (2008). Visualizing Data using t-SNE. JMLR 9
- Facco ve ark. (2017). Estimating the intrinsic dimension of datasets by a minimal neighborhood information (TwoNN). arXiv:1803.06992
- Wang, Isola (2020). Understanding Contrastive Representation Learning through Alignment and Uniformity on the Hypersphere. arXiv:2005.10242
- Liu ve ark. (2023). Visual Instruction Tuning (LLaVA). arXiv:2304.08485
- Li ve ark. (2023). BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models. arXiv:2301.12597