Softmax Fonksiyonu

Çok Sınıflı Sınıflandırma İçin Temel Bir Araç

1. Softmax Fonksiyonu Nedir?

Softmax fonksiyonu, makine öğrenmesinde ve derin öğrenmede çok sınıflı sınıflandırma problemlerinde yaygın olarak kullanılan bir fonksiyondur. Temel amacı, bir dizi reel sayıyı (genellikle bir sinir ağının çıktı katmanının değerleri) olasılık dağılımına dönüştürmektir.

Softmax, bir girdi vektörünün her elemanı için 0 ile 1 arasında bir değer üretir ve bu değerlerin toplamı 1'e eşittir. Bu özelliği, softmax çıktılarının doğrudan olasılık olarak yorumlanmasına olanak tanır.

Softmax fonksiyonu matematiksel olarak şu şekilde ifade edilir:

\[ \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} \]

Burada:

  • \( \mathbf{z} \): Girdi vektörü
  • \( z_i \): Vektörün i. elemanı
  • \( K \): Vektörün boyutu (sınıf sayısı)
  • \( \sigma(\mathbf{z})_i \): i. sınıfa ait olasılık

2. Softmax Uygulaması

Burada 5 sınıflı bir sınıflandırma problemi için softmax hesaplamasını görelim. Bir sinir ağının ham çıktılarını (logits) girdi olarak kullanalım ve bunları olasılıklara dönüştürelim.

Vanilla JavaScript ile Softmax Fonksiyonu:

function softmax(logits, temperature = 1.0) {
    // Temperature uygulaması (T parametresi)
    const scaledLogits = logits.map(x => x / temperature);
    
    // En büyük değeri bulalım (sayısal stabilite için)
    const maxLogit = Math.max(...scaledLogits);
    
    // exp(x_i - max) hesaplaması (taşma önlemi)
    const expValues = scaledLogits.map(x => Math.exp(x - maxLogit));
    
    // Toplamı hesaplayalım
    const expSum = expValues.reduce((a, b) => a + b, 0);
    
    // Her bir değer için olasılık hesaplayalım
    return expValues.map(x => x / expSum);
}

Aşağıda örnek bir girdi vektörü (logits) verilmiştir. "Hesapla" düğmesine tıklayarak softmax değerlerini görebilirsiniz:

Sonuçlar:

Sınıf Logit Değeri Softmax Değeri

3. Softmax ve Sıcaklık (Temperature) Parametresi

Softmax fonksiyonuna bir sıcaklık (temperature) parametresi ekleyerek, dağılımın keskinliğini kontrol edebiliriz. Sıcaklık parametresi, softmax hesaplamasından önce logitleri ölçeklendirmek için kullanılır:

\[ \sigma(\mathbf{z}, T)_i = \frac{e^{z_i/T}}{\sum_{j=1}^{K} e^{z_j/T}} \]

Burada \(T\) sıcaklık parametresidir.

Aşağıda, sıcaklık parametresinin dağılım üzerindeki etkisini görebilirsiniz:

1.0

4. Softmax'in Özellikleri

Softmax fonksiyonunu diğer aktivasyon fonksiyonlarından ayıran bazı önemli özellikler:

Softmax fonksiyonunun türevi:

\[ \frac{\partial \sigma(\mathbf{z})_i}{\partial z_j} = \begin{cases} \sigma(\mathbf{z})_i(1 - \sigma(\mathbf{z})_i) & \text{if } i = j \\ -\sigma(\mathbf{z})_i\sigma(\mathbf{z})_j & \text{if } i \neq j \end{cases} \]

4. Sayısal Stabilite

Softmax hesaplamasında karşılaşılabilecek en büyük sorunlardan biri sayısal taşmadır. Büyük giriş değerleri için \(e^{z_i}\) çok büyük sayılar üretebilir ve bu da hesaplamada taşmalara neden olabilir.

Bu sorunu çözmek için yaygın bir teknik, tüm giriş değerlerinden maksimum değeri çıkarmaktır:

\[ \sigma(\mathbf{z})_i = \frac{e^{z_i - \max(\mathbf{z})}}{\sum_{j=1}^{K} e^{z_j - \max(\mathbf{z})}} \]

Bu matematiksel olarak aynı sonucu verir, ancak sayısal stabiliteyi iyileştirir. Yukarıdaki JavaScript kodumuzda bu tekniği uyguladık.

Stabilite Testi:

Aşağıdaki alanı çok büyük sayılarla denemek için kullanabilirsiniz:

Büyük Değerlerle Sonuçlar:

Sınıf Logit Değeri Softmax Değeri

5. Gerçek Dünya Uygulamaları

Softmax fonksiyonu, çok çeşitli makine öğrenmesi ve derin öğrenme uygulamalarında kullanılır:

Görüntü Sınıflandırma

Derin Evrişimli Sinir Ağları (CNN), genellikle son katmanda softmax kullanarak görüntüleri birden çok sınıfa ayırır. Örneğin MNIST rakam tanıma problemi (10 sınıf) veya ImageNet sınıflandırması (1000 sınıf).

Doğal Dil İşleme

Kelime tahminleri, duygu analizi veya metin sınıflandırma problemlerinde, çıktı katmanında softmax fonksiyonu kullanılarak olası sınıflar arasında olasılık dağılımı elde edilir.

Örnek Senaryo: El Yazısı Rakam Tanıma

Aşağıdaki örnekte, bir sinir ağının 5 farklı rakamı sınıflandırmak için ürettiği logit değerleri ve bunların softmax ile olasılıklara dönüşümünü görebilirsiniz:

Bu örnekte, model en yüksek olasılığı "5" rakamına atamıştır, bu da modelin bu girdiyi "5" olarak sınıflandıracağı anlamına gelir.