contrastive learning CLIP SimCLR self-supervised learning embedding derin öğrenme temsil öğrenimi

Contrastive Learning Nedir? CLIP ve SimCLR ile Öğrenme

Orta
person Yapay Zeka Uzmanı
list_altİçindekilerexpand_more
  1. 01Temel Fikir: Benzerler Yakın, Farklılar Uzak
  2. 02SimCLR: Görüntüden Görüntüye Karşıtsal Öğrenme
  3. 03MoCo: Momentum Encoder ve Hafıza Bankası
  4. 04CLIP: Metin ve Görüntüyü Aynı Uzaya Çekmek
  5. 05DINO ve Self-Distillation Yaklaşımı
  6. 06Kayıp Fonksiyonları: InfoNCE, NT-Xent ve Triplet Loss
  7. 07Negatif Örnekler Neden Bu Kadar Önemli?
  8. 08Contrastive Learning ile Üretken Ön-Eğitim Arasındaki Fark
  9. 09Pratikte: Python ile CLIP Zero-Shot Sınıflandırma
  10. 10Nerede Kullanılır?
  11. 11Araştırmanın Mevcut Yönü
Editorial tech-magazine cover illustration about contrastive learning in artificial intelligence, two glowing spheres orbiting each other on contrasting vectors — one cyan one magenta — neural network filaments connecting similar pairs while pushing apart dissimilar clusters, abstract data streams forming a latent space, sophisticated modern concept art, clean balanced composition, soft cinematic studio lighting, rich depth of field, premium color grading in deep navy blues with cyan and magenta accents, highly detailed, polished editorial 8k. No text, no words, no letters, no captions, no logos, no watermark, no UI.

Contrastive learning: benzer örnekleri embedding uzayında yakınlaştıran, farklıları uzaklaştıran teknik

CLIP, 400 milyon görüntü-metin çiftini hiçbir insan etiketine ihtiyaç duymadan işledi ve bu süreçte görseller ile metinleri aynı vektör uzayına yerleştirmeyi öğrendi. “Bir köpek fotoğrafı” ifadesi ile köpek görseli birbirine yakın; “gece gökyüzü” ile güneş fotoğrafı ise birbirinden uzak. Bu ilişkiyi elle kodlamak mümkün değil. Model, kontrast üzerinden öğrendi.

Contrastive learning (karşıtsal öğrenme) bu yaklaşımı tanımlıyor: benzer örnekleri bir arada tutan, farklı örnekleri birbirinden uzaklaştıran bir eğitim stratejisi. Etiket gerekmez; modele sadece “bunlar birbirine benzer, şunlar değil” bilgisi yeterli. Bu fikir üzerine inşa edilen modeller, modern görsel yapay zekanın büyük bölümünü oluşturuyor. CLIP’ten DINO’ya, SimCLR’dan MoCo’ya kadar alan boyunca uzanan çalışmalar hepsinde aynı temel mekanizma var.


Temel Fikir: Benzerler Yakın, Farklılar Uzak

Her girdi (resim, metin, ses) bir model tarafından yüksek boyutlu bir vektöre dönüştürülür. Bu vektör uzayına embedding uzayı denir. Contrastive learning bu uzayı anlamlı hale getirmeyi hedefler: benzer içerikler birbirine yakın, farklı içerikler birbirinden uzak düşmeli.

Eğitim sürecinde iki tür çift kullanılır:

  • Pozitif çift: Aynı içeriğe veya kategoriye ait iki örnek. Aynı fotoğrafın iki farklı kırpması ya da bir görüntüyle onu tanımlayan metin.
  • Negatif çift: Birbirinden farklı örnekler. İki ilgisiz fotoğraf ya da eşleşmeyen bir görüntü-metin ikilisi.

Model, pozitif çiftleri vektör uzayında birbirine yaklaştırmaya, negatif çiftleri uzaklaştırmaya zorlanır. Benzerlik ölçüsü olarak çoğunlukla kosinüs benzerliği kullanılır: iki vektörün yönlerinin ne kadar örtüştüğünü 0 ile 1 arasında verir.

Kayıp fonksiyonu olarak InfoNCE yaygın bir tercih. Pozitif çiftin logit değerini bir güven skoru olarak alır, negatiflerle kıyaslar ve doğru eşleşmeyi en yüksek skorda bırakan bir çapraz-entropi kaybı hesaplar. Bu formülasyon, mutual information teorisiyle de bağlantılı.


SimCLR: Görüntüden Görüntüye Karşıtsal Öğrenme

Google’ın 2020’de yayımladığı SimCLR (Simple Framework for Contrastive Learning), görüntü-görüntü karşıtsal öğrenmenin en temiz formülasyonlarından biri. İki temel bileşeni var.

Veri artırma: Aynı görüntüden iki farklı “görünüm” üretilir. Rastgele kırpma, renk değişimi, Gaussian blur gibi dönüşümler uygulanır. Bu iki görünüm pozitif çifti oluşturur. Model, yüzey farklılıklarına rağmen her iki görünümün aynı kaynaktan geldiğini öğrenmek zorunda.

Projector head: Encoder (örneğin ResNet-50) görüntüyü bir temsil vektörüne dönüştürür. Üstüne eklenen küçük bir MLP (projector), bu vektörü contrastive loss’un uygulandığı bir uzaya taşır. Eğitim sonrasında projector head atılır; encoder’ın ürettiği temsil downstream görevlerde kullanılır.

SimCLR’ın önemli bir bulgusu şu: batch büyüklüğü performansı doğrudan etkiler. Büyük batch’ler daha fazla negatif örnek içerir; model daha güçlü bir sinyal alır. Orijinal çalışmada 4096 büyüklüğünde batch kullanıldı. Bu durum ciddi hesaplama kaynağı gerektiriyor ve küçük ölçekli araştırmalarda ulaşılması güç bir eşik.

SimCLR v2 daha büyük encoder’lar ve bir teacher-student mekanizması ekleyerek bu temeli yarı etiketli öğrenmeye taşıdı.


MoCo: Momentum Encoder ve Hafıza Bankası

Büyük batch ihtiyacını aşmak için Facebook AI Research farklı bir strateji önerdi: MoCo (Momentum Contrast).

MoCo’nun yaklaşımı şu: negatif örnekleri mini-batch ile sınırlama; bunun yerine bir hafıza bankası (memory bank) tut. Bu banka, geçmiş batch’lerden biriktirilen encoder çıktılarını depolar. Her eğitim adımında güncel pozitif çift, bankadaki binlerce negatifle kıyaslanır. Böylece model, batch büyüklüğünden bağımsız zengin bir negatif havuzuna erişir.

Buradaki sorun şu: hafıza bankasındaki eski temsiller zamanla güncelliğini yitirir. Bunu gidermek için MoCo momentum encoder kullanır. Ana encoder hızla güncellenir; momentum encoder ise ana encoder ağırlıklarının üstel hareketli ortalamasıdır. Güncelleme kuralı basit:

θ_k = m * θ_k + (1 - m) * θ_q

m değeri (örneğin 0.999) yüksek tutulduğunda momentum encoder yavaş değişir; hafıza bankasındaki temsiller tutarlı kalır ve eğitim istikrar kazanır.

MoCo v2, SimCLR’dan projection head ve veri artırma stratejilerini benimsedi. MoCo v3 ise Vision Transformer mimarisine geçişin önündeki eğitim kararsızlığı sorunlarını çözdü.


CLIP: Metin ve Görüntüyü Aynı Uzaya Çekmek

OpenAI’nin 2021’de sunduğu CLIP (Contrastive Language-Image Pretraining), karşıtsal öğrenmeyi multimodal alana taşıdı. Çift encoder yapısı var: biri görüntüler için (Vision Transformer veya ResNet), diğeri metinler için (Transformer tabanlı).

Eğitim verisi, internet kaynaklı 400 milyon görüntü-metin çiftinden oluşan bir derleme. Her görüntü, onunla eşleşen metin açıklamasıyla pozitif çift oluşturuyor; aynı batch’teki diğer kombinasyonlar negatif oluyor. Yani N örnekli bir batch için N pozitif, N²-N negatif çift var. Bu ölçekte eğitim, modelin dil ile görsel içeriği aynı uzaya yerleştirmesini zorunlu kılıyor.

Zero-shot sınıflandırma CLIP’in en dikkat çekici özelliği. Modele hiç görmediği bir kategoriyi tanımlatmak için şöyle bir şablon kullanılır: “a photo of a [sınıf adı]”. Her sınıf için bu metin embedding hesaplanır, görüntü embedding’i ile kıyaslanır, en yakın olan sınıf seçilir. Herhangi bir fine-tuning olmadan ImageNet’te ~76% top-1 doğruluğuna ulaşıldı; bu, denetimli yöntemlerle eğitilmiş ResNet-50’nin puanıyla karşılaştırılabilir.

CLIP, görsel dil modellerinin (VLM) temel yapı taşlarından biri oldu. Stable Diffusion, metin istemlerini encode etmek için CLIP kullanır; DALL-E 1 de aynı temel üzerine inşa edilmişti. Açık kaynak tarafında OpenCLIP projesi, farklı ölçeklerde ve kamuya açık verilerle eğitilmiş CLIP modellerini dağıtıyor.


DINO ve Self-Distillation Yaklaşımı

DINO (Self-DIstillation with NO labels), contrastive öğrenme ile knowledge distillation’ı birleştiren bir yaklaşım. Meta AI’ın çalışması olan DINO, teacher-student mimarisini etiket olmadan kullanıyor.

Student model rastgele başlatılır ve gradient ile güncellenir. Teacher ise student’ın momentum ortalaması; doğrudan eğitilmez. Student, küçük görüntü kırpmaları alırken teacher büyük kırpmalar görür. Her ikisi de aynı çıktıyı üretmeye yönlendirilir. Bu asimetri, modeli görüntünün farklı ölçeklerden anlamlı özellikler çıkarmaya zorlar.

DINO’nun ilginç bir özelliği: attention haritaları incelendiğinde modelin nesnelerin sınırlarını öğrendiği görülüyor; hiçbir segmentasyon etiketi olmadan. Bu gözlem, self-supervised learning’in ne kadar güçlü yapısal bilgi üretebileceğini ortaya koyuyor.

DINOv2 daha büyük veri ve daha dikkatli kürasyon ile bu temeli pekiştirdi. Derinlik tahmini, segmentasyon ve sınıflandırma gibi görevlerde denetimli önceden eğitilmiş modellere yakın, kimi zaman üstün sonuçlar verdi. Model ağırlıkları kamuya açık.


Kayıp Fonksiyonları: InfoNCE, NT-Xent ve Triplet Loss

Contrastive learning’in tarihi, kayıp fonksiyonlarının evrimi üzerinden de okunabilir.

Triplet loss bu alandaki ilk ciddi yaklaşım (Google, FaceNet, 2015). Üçlü örneklerle çalışır: bir anchor, ona benzer bir pozitif, ona benzemeyen bir negatif. Modelden anchor ile pozitif arasındaki mesafenin, anchor ile negatif arasındaki mesafeden margin kadar küçük olması beklenir:

L = max(d(a, p) - d(a, n) + margin, 0)

Triplet loss’un zayıf noktası, etkili negatif seçimi. Rastgele negatifler çoğu zaman çok kolay; model yeterli sinyal almaz. Bu yüzden hard negative mining gerekir, ki bu hesaplama açısından maliyetlidir.

NT-Xent (Normalized Temperature-scaled Cross Entropy), SimCLR’ın kullandığı kayıp. Her örnek için pozitif çiftini mini-batch’teki tüm diğer örneklerden ayırt etmesini ister. Temperature parametresi dağılımın sertliğini kontrol eder; düşük temperature yüksek güven, yüksek temperature daha yumuşak gradients anlamına gelir.

InfoNCE bilgi teorik bir bakış açısından gelir. Negatifler arasından pozitifi tahmin etme problemi olarak kurulur; mutual information’ın alt sınırını maksimize eder. MoCo ve birçok modern çalışma bu kayıp fonksiyonunu benimsiyor.

Kayıp FonksiyonuÇalışma BiçimiNegatif Kaynağı
Triplet LossÜçlü örnekler (anchor, +, -)Hard negative mining
NT-XentBatch içi çapraz entropiIn-batch negatives
InfoNCESoftmax tabanlı sınıflandırmaBatch veya memory bank

Negatif Örnekler Neden Bu Kadar Önemli?

Contrastive learning’de negatif örneklerin kalitesi ve miktarı, modelin ne öğrendiğini doğrudan belirler.

Negatif örnek olmadan ne olur? Model tüm girdileri aynı noktaya gönderir; kayıp sıfıra iner ama temsiller anlamsızlaşır. Buna representation collapse (temsil çöküşü) denir. SimCLR, MoCo ve DINO hepsi bu çöküşe karşı farklı çözümler sunar: büyük batch, hafıza bankası veya self-distillation.

Negatifler çok kolaysa model yeterince zorlanmaz. Hard negative mining, modelin hâlâ ayırt etmekte güçlük çektiği örnekleri seçer: birbirine görsel olarak benzeyen ama farklı kategorilerdeki örnekler. Bu örnekler, gradient açısından daha bilgi yüklü.

In-batch negatives en basit yaklaşım: mini-batch içindeki diğer tüm örnekler negatif sayılır. Büyük batch’lerde işe yarar ama küçük batch’lerde çok az negatif kalır. Memory bank bu sorunu aşar: geçmiş batch’lerden biriktirilen temsiller zengin bir havuz oluşturur ve batch büyüklüğünden bağımsız çalışır.


Contrastive Learning ile Üretken Ön-Eğitim Arasındaki Fark

BERT ve GPT gibi modeller üretken ön-eğitim kullanır: maskelenmiş token’ları tahmin etmek ya da bir sonraki token’ı üretmek gibi görevler. Bu yaklaşım doğal olarak dil modellemesine yönelir ve büyük metin derlemleriyle iyi ölçeklenir.

Contrastive learning ise görev-agnostik temsil üretir. Hangi modalite olduğu önemli değildir: görüntü, metin, ses ya da bunların kombinasyonu. Transfer learning açısından bakıldığında, iyi bir contrastive encoder çok az etiketle downstream görevlere uyarlanabilir.

Üretken modellerin avantajı, büyük ölçekli metin verisinin bolluğu. Contrastive modellerin avantajı ise multimodal görevlerde esneklik ve etiket gerektirmeyen büyük ölçekli ön-eğitim. İki paradigma bugün birbirini dışlamıyor; çok modlu modellerin çoğu her ikisini de içeriyor.

Zayıf yanı şu: negatif örneklerin kalitesine ve miktarına hassas. Yanlış negatif (aslında pozitif olması gereken bir örneğin negatif sayılması) eğitimi bozar. Büyük ölçekli veriyle bu sorun azalır ama tamamen ortadan kalkmaz.


Pratikte: Python ile CLIP Zero-Shot Sınıflandırma

Aşağıdaki örnek, transformers kütüphanesini kullanarak CLIP ile zero-shot sınıflandırma yapıyor. Herhangi bir fine-tuning gerekmez.

import torch
from PIL import Image
from transformers import CLIPProcessor, CLIPModel

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

image = Image.open("kedi.jpg")
labels = [
    "bir kedi fotoğrafı",
    "bir köpek fotoğrafı",
    "bir araba fotoğrafı",
]

inputs = processor(text=labels, images=image, return_tensors="pt", padding=True)

with torch.no_grad():
    outputs = model(**inputs)
    logits_per_image = outputs.logits_per_image
    probs = logits_per_image.softmax(dim=1)

for label, prob in zip(labels, probs[0]):
    print(f"{label}: {prob:.2%}")

Çıktı şu şekilde görünür:

bir kedi fotoğrafı: 91.23%
bir köpek fotoğrafı: 7.15%
bir araba fotoğrafı: 1.62%

Model, labels listesini genişleterek istediğiniz sayıda kategori için çalışabilir. Eğitim verisi görmediği sınıflar da dahil.


Nerede Kullanılır?

Contrastive learning, birkaç kritik uygulama alanında kendini kanıtladı.

Anlamsal arama: Embedding modelleri, contrastive pretraining ile eğitilir. Bir kullanıcı sorgusu ile belgeler aynı uzaya gönderilir; en yakın belge alınır. Bu mekanizma RAG (Retrieval-Augmented Generation) sistemlerinin temelini oluşturuyor ve doğrudan halüsinasyon oranıyla ilişkili.

Medikal görüntüleme: Nadir hastalıklarda etiketli veri kıt olduğunda contrastive pretraining ile az etiketle yüksek performans elde ediliyor. CXR-CLIP ve BioViL gibi projeler bu yaklaşımı akciğer grafisi analizine uyguladı.

Öneri sistemleri: Kullanıcı ve içerik embedding’lerini aynı uzaya çeken sistemler, daha isabetli öneriler üretiyor. Pinterest, YouTube ve Spotify bu alanda contrastive teknikleri benimseyen şirketler arasında.

Kod arama: CodeBERT ve benzeri modeller, kod parçacıklarını ve doğal dil açıklamalarını aynı embedding uzayına çekiyor. Doğal dille kod arama bu yaklaşımla mümkün hale geliyor.


Araştırmanın Mevcut Yönü

Contrastive learning, büyük dil modellerinin gündem merkezine taşınmasından sonra bile aktif araştırma alanı olmaya devam ediyor.

RLHF ve tercih öğrenimi sistemleri contrastive sinyalleri farklı biçimlerde kullanıyor: hangi yanıt tercih edildi, hangisi daha iyi, iki seçenek arasındaki fark ne. Bu yaklaşım da temelde aynı “benzer mi, değil mi” sorusunu soruyor.

Retrieval kalitesinin halüsinasyon üzerindeki etkisi de ilgi odağında. İyi bir embedding modeli daha doğru belge getirirse, modelin uydurma yapma riski azalır. Bu bağlantı, contrastive learning’i güvenilir LLM sistemleri inşasıyla doğrudan ilişkilendiriyor.

Veri ölçeği küçüldükçe negatif örnek kalitesi daha kritik hale geliyor. Hard negative mining, sentetik negatifler ve curriculum learning kombinasyonları bu alandaki araştırmaların güncel odak noktaları arasında yer alıyor.

auto_stories İlgili Makaleler