Cross-Entropy (Çapraz Entropi)

Sınıflandırma modellerini eğitmek için kullanılan, olasılık tahminleri ile gerçek etiketler arasındaki farkı logaritmik ölçekte ölçen kayıp fonksiyonu.

Çapraz Entropi (Cross-Entropy), sınıflandırma görevlerinde derin öğrenme modellerinin eğitiminde kullanılan en yaygın kayıp fonksiyonudur. Bilgi teorisinden türetilen bu metrik, modelin ürettiği olasılık dağılımının gerçek etiket dağılımıyla ne kadar uyuştuğunu ölçer; fark büyüdükçe kayıp artar ve model parametrelerini güncellemek için daha güçlü bir gradyan sinyali üretilir. Matematikte entropi, bir olayın ne kadar "sürpriz" olduğunu ölçer: nadir olaylar yüksek, yaygın olaylar düşük bilgi içerir. Çapraz entropi ise iki dağılım arasındaki bilgi kaybını ölçer. İkili sınıflandırma (binary classification) için formül: L = −[y·log(ŷ) + (1−y)·log(1−ŷ)]. Burada y gerçek etiket (0 veya 1), ŷ modelin tahmin ettiği olasılıktır. Model yanlış sınıf için yüksek olasılık verdiğinde log terimi sonsuz büyüklüğe yaklaşarak kayıp patlar; bu matematiksel baskı modeli doğru sınıfa yönlendirir. Çok sınıflı sınıflandırma (multi-class) için kategorik çapraz entropi kullanılır: L = −Σ yᵢ·log(ŷᵢ). Doğru sınıfa karşılık gelen terim dışındaki tüm yᵢ değerleri 0 olduğundan, kayıp yalnızca gerçek sınıfın tahmin olasılığına bağlıdır. Softmax aktivasyonu ile birlikte doğal bir eşleşme oluşturur: softmax çıktıları toplamı 1 olan olasılık dağılımı üretir, çapraz entropi bu dağılımla gerçek etiketi karşılaştırır. Çapraz entropi, ortalama karesel hata (MSE) yerine sınıflandırmada neden tercih edilir? MSE, olasılık tahminleri için zayıf gradyanlar üretir: model doğru etikete 0.9 olasılık verirken yanlış yönde ilerlese bile MSE gradyanı küçük kalır. Çapraz entropi ise logaritmik yapısı sayesinde yanlış sınıflara yüksek olasılık veren kötü tahminleri çok daha sert cezalandırır. Eğitimde dikkat edilmesi gereken bir nokta sayısal kararlılıktır: log(0) tanımsızdır. PyTorch ve TensorFlow gibi kütüphaneler log hesaplamasını softmax ile birleştirerek (log-sum-exp trick) bu problemi çözer; `nn.CrossEntropyLoss()` PyTorch'ta softmax + log + NLL kaybını tek adımda uygular. **Label smoothing**, gerçek etiketleri yumuşatarak (ör. 1.0 yerine 0.9, 0.0 yerine 0.1) aşırı güveni önleyen bir çapraz entropi varyantıdır. Model çok eminleştiğinde genelleme kapasitesi düşer; label smoothing bunu hafifletir ve modern transformerların eğitiminde standart hale gelmiştir.

Neden Çapraz Entropi? MSE ile Karşılaştırma

MSE (Ortalama Karesel Hata) regresyon için uygun ama sınıflandırmada zayıf kalır. Model 'kedi' için %90 olasılık önerirken yanlış yönde ilerlese, MSE gradyanı çok küçüktür — düzeltme sinyali yetersiz. Çapraz entropi log(ŷ) kullanır: model yanlış sınıfa yüksek olasılık verdiğinde kayıp logaritmik olarak patlar ve büyük gradyan öğrenmeyi zorlar. İkili sınıflandırma: L = −[y·log(ŷ) + (1−y)·log(1−ŷ)]. Doğru sınıf için ŷ→1 yaptıkça L→0; yanlış sınıf için ŷ→1 yaptıkça L→∞.

Softmax ile Doğal Eşleşme

Çok sınıflı görevlerde softmax çıktı katmanı her sınıf için [0,1] aralığında ve toplamı 1 olan olasılıklar üretir. Kategorik çapraz entropi bu dağılımı alır ve yalnızca gerçek sınıfın tahmin olasılığını değerlendirir: L = −log(ŷ_doğru). PyTorch'ta nn.CrossEntropyLoss() softmax + log + NLL'yi tek seferde ve sayısal kararlı biçimde (log-sum-exp trick) hesaplar. Bu nedenle modelin son katmanına ayrıca softmax EKLEMEYİN — CrossEntropyLoss bunu içerir.

Sayısal Kararlılık ve Pratik Uygulama

log(0) matematiksel olarak tanımsızdır; model sıfır olasılık tahmin ederse kayıp patlar. Kütüphaneler bunu log-sum-exp numarası ile çözer. PyTorch: criterion = nn.CrossEntropyLoss(); loss = criterion(logits, labels) — logits softmax öncesi ham çıktılar. TensorFlow/Keras: tf.keras.losses.CategoricalCrossentropy(from_logits=True). İkili sınıflandırma: nn.BCEWithLogitsLoss() (sigmoid + BCE birleşik). Ağırlıklı çapraz entropi: sınıf dengesizliğinde nadir sınıflara daha yüksek ağırlık atanır.

Label Smoothing ve Varyantlar

Label smoothing: gerçek etiketi 1.0 yerine 1-ε (ör. 0.9), diğer sınıfları 0 yerine ε/(K-1) yapar. Model aşırı güvenli (overconfident) olduğunda genelleme düşer; yumuşatma bunu önler. ε=0.1 standart; Transformer eğitiminde yaygın. Focal Loss: yanlış sınıflanan zor örneklere ek ağırlık verir, dengesiz veri setleri için güçlü (nesne tespitinde standart). KL Divergence: çapraz entropi ile entropi arasındaki fark; dağılım karşılaştırmada genelleştirilmiş form.

Çapraz Entropi Varyantları

Label Smoothing

Kesin 0/1 etiketler yerine ε dağılımıyla yumuşatılmış hedefler; aşırı güven ve ezber sorununu azaltır, ImageNet'te +0.5% doğruluk rapor edildi.

Focal Loss

Kolay örneklerin kaybını azaltarak zor örneklere odaklanır; sınıf dengesizliğinde nesne tespiti için geliştirildi (RetinaNet).

Binary Cross-Entropy

İki sınıflı veya çok etiketli sınıflandırma için; her sınıf bağımsız sigmoid ile değerlendirilir, softmax normalleştirme gerekmez.

KL Divergence

Çapraz entropinin genelleştirilmesi; bilgi damıtma ve VAE ELBO kaybında çıktı dağılımları arasındaki farkı ölçer.

Sık Sorulan Sorular

  • check_circle Çapraz entropi ile MSE arasındaki temel fark nedir? MSE karesi alınmış fark ölçer, sınıflandırma için zayıf gradyan üretir. Çapraz entropi log olasılık ölçer; yanlış sınıfa yüksek olasılık verildiğinde logaritmik olarak cezalandırır — bu büyük gradyanlar öğrenmeyi hızlandırır.
  • check_circle PyTorch'ta CrossEntropyLoss nasıl kullanılır? criterion = nn.CrossEntropyLoss(); loss = criterion(logits, labels). logits ham tahminler (softmax uygulanmamış), labels sınıf indeksleri (LongTensor). Son katmana softmax eklemeyin — loss içinde zaten var.
  • check_circle İkili sınıflandırma için hangi kayıp fonksiyonu seçilmeli? BCEWithLogitsLoss — sigmoid + binary cross-entropy birleşik ve sayısal kararlı. Çıkış boyutu (batch_size,) veya (batch_size, 1), etiket float [0.0, 1.0].
  • check_circle Label smoothing ne zaman kullanılmalı? Model çok kesin (overconfident) tahminler yapıyorsa ve test genellemesi düşükse label smoothing deneyin. ε=0.1 iyi başlangıç. Transformer ve büyük sınıflandırma modellerinde standarttır; küçük veri setlerinde aşırı regularizasyon riski var.
  • check_circle Çok sınıflı ile çok etiketli fark nedir? Çok sınıflı (mutually exclusive): softmax + categoricalCE, her örnek 1 sınıfa ait. Çok etiketli (multi-label): sigmoid + BCEWithLogitsLoss, her örnek birden fazla sınıfa ait olabilir.
  • check_circle Kayıp çok yüksek başlıyor ama düşmüyor — ne yapmalıyım? Son katmana softmax koymuşsanız ve CrossEntropyLoss kullanıyorsanız çift softmax problemi var — son katmandan softmax kaldırın. Öğrenme hızı çok yüksek veya düşük olabilir. Gradyan patlaması için gradient clipping deneyin.