Softmax ve Çapraz Entropi

Logit, olasılık, −log q_y ve sıcaklık.

Sonda model bir skor listesi üretir: her sınıf veya kelime parçası için bir sayı. Bu sayı henüz olasılık değildir; negatif olabilir, toplamı 1 olmayabilir. Softmax listeyi 0–1 arasına çekip toplamı 1 yapar. Çapraz entropi, doğru parçanın eksi log-olasılığıdır: emin ve yanlış olmak pahalıdır. Yeni bir altyapı katmanı yoktur.

Softmax

Logit vektörü z ∈ ℝᴷ.

qᵢ = exp(zᵢ) / Σⱼ exp(zⱼ)

qᵢ > 0, Σ qᵢ = 1. En büyük logit en büyük olasılığı alır; fark exp ile şişer. z = (2, 1, 0.1):

e² ≈ 7.389, e¹ ≈ 2.718, e^{0.1} ≈ 1.105, toplam ≈ 11.212

q ≈ (0.659, 0.242, 0.099)

Logit farkı 1 (2 ile 1) olasılıkta ~2.7 katına döner. Softmax, “fark 1 skor”u doğrusal yüzde sanmaz.

Sayısal kararlılık: exp(zᵢ) zᵢ = 50 iken taşar. exp(zᵢ − max z) aynı q’yu verir; max’ı düşmek pay ve paydayı aynı katla küçültür.

function softmax(z: number[]): number[] {
  const max = Math.max(...z);
  const exps = z.map((v) => Math.exp(v - max));
  const sum = exps.reduce((a, b) => a + b, 0);
  return exps.map((e) => e / sum);
}

Sıcaklık T > 0: qᵢ ∝ exp(zᵢ / T). T → 0 dağılımı argmax’a çiviler; T → ∞ düzgün dağılıma yaklaşır. Çıkarımda “yaratıcılık” ayarı, eğitim kaybının parçası değil (eğitimde T = 1). T = 2 yukarıdaki z’yi (1, 0.5, 0.05) gibi davranır; olasılıklar (0.51, 0.31, 0.18) civarına yayılır.

Çapraz entropi kaybı

One-hot hedef: doğru indeks y. L = −log q_y. Yukarıda y = 0 ise L = −log 0.659 ≈ 0.417. y = 2 ise −log 0.099 ≈ 2.31: model yanlış sınıfa düşük olasılık verdi, kayıp büyüdü.

q_y → 1 iken L → 0. q_y → 0 iken L → ∞. Sıfır olasılık, sonsuz ceza: eğitim z_y’yi diğerlerinden ayırmaya zorlanır. Etiket gürültülüyse bu acımasızdır; label smoothing P(y) = 1−ε, diğerlerine ε/(K−1) vererek tavanı yumuşatır.

İkili durumda K = 2 softmax, sigmoid + ikili çapraz entropiye denktir (logit farkı). Çok sınıfta softmax, “sınıflar birbirini dışlar” varsayar. Aynı örnekte iki etiket doğruysa (multi-label) bağımsız sigmoid’ler kullanılır.

Gradyan sadeleşir

L = −log q_y = −z_y + log Σⱼ exp(zⱼ) (log-sum-exp). Türev:

∂L/∂zᵢ = qᵢ − 1[i = y]

Doğru sınıfta q_y − 1 ≤ 0: logit artmalı. Diğerlerinde qᵢ: logit azalmalı, q kadar. MSE’deki ŷ − y yapısının çok sınıflı hali budur. Softmax’ı elle türetip −1/q ile çarpmaya gerek yoktur; kütüphane log_softmax + nll birleşimini sayısal olarak birleştirir (log-sum-exp trick).

Dil modelinde K sözlük boyudur (50k–200k). Her konumda bir z, bir q, bir −log q_{doğru token}. Dizinin kaybı konumların ortalamasıdır. Perplexity exp(ortalama L) (nat ise e^L): modelin her adımda “kaç token arasında kararsız” kaldığının geometrik okumasıdır. L = 2.3 nat ≈ e^{2.3} ≈ 10 perplexity.

Alıştırma

z = (0, 0, 0) için q nedir, y = 1 iken L nedir? (1/3, −log(1/3) ≈ 1.099.) Sonra z_1 ← 2 yapıp q ve L’yi tekrar hesaplayın. ∂L/∂z₁ = q₁ − 1 negatif midir? İşaret, doğru logit’i büyütme yönü olmalıdır.