Softmax Aktivasyon Fonksiyonu Nedir ve Numpy ile Nasıl Implement Edilir
TANIM
Softmax fonksiyonu modelden çıkan sonuçların olasılıksal şekilde ifade edilmesi için kullanılan bir fonksiyondur. Genellikle nöral ağlarda (neural network) ağın sonucunu sınıflara olasılık değerleri vermek için kullanılır.
Softmax fonksiyonu input olarak $K$ boyutlu uzaydan vektör $z$ alır. Bu vektörü $K$ olasılık değerlerinden oluşan bir olasılık dağılımına çevirir. Bu olasılıkların her biri exponentialları ile doğru orantılıdır. Softmax fonksiyonu uygulamadan önce bu $z$ vektöründeki bazı değerler negatif de olabilir 0 da olabilir, pozitif de olabilir. Softmax fonksiyonunu uyguladıktan sonra ise bütün değerler $(0, 1)$ aralığında değer alır ve bütün değerlerin toplamı 1 olur.
Standart softmax function tanımı şu şekildedir. $\sigma : \mathbb{R^{K}} \rightarrow \mathbb{R^K}$
Bir diğer deyişle bizim yaptığımız işlem her bir değerin exponential fonksiyonunu almak ve bunu toplama bölmek. Böylece normalize etmiş oluyoruz ve bütün değerleri topladığımız zaman sonuç 1 ediyor.
Örnek olarak vektör $k = [1, 1, 1] \in \mathbb{R^3}$ olsun. O zaman,
$$ \sigma(k) = [\frac{1}{3}, \frac{1}{3}, \frac{1}{3}] $$
Peki bunu nasıl bulduk. Öncelikle toplamı hesaplayalım
$$ \sum_{j=1}^{K}e^{k_i} = e^1 + e^1 + e^1 = 3e $$
Toplam $3e$ çıktı. Şimdi her bir değeri exponential fonskiyona input olarak verirsek çıkacak sonuç $e^1 = e$ olur. Bizim softmax fonksiyonunda yaptığımız işlem ise bu değerleri alıp toplama bölmek. Yani,
$$ \frac{e}{3e} = \frac{1}{3} $$
NUMPY İLE NASIL İMPLEMENT EDİLİR
Numpy fonksiyonunda arrayin direk exponential fonksiyonunu alabiliriz. Bunun için for loop açmamıza gerek yok
|
|
|
|
Arrayin direk üstel şekilde toplamını da alabiliriz.
|
|
|
|
Şimdi softmax implement etmek için her şeye sahibiz. Fonksiyon şeklinde implement edebiliriz.
|
|
Şimdi fonksiyonumuzu test edelim
|
|
|
|
Gördüğümüz üzere softmax fonksiyondan çıkan arrayin toplamı 1 e eşit oluyor
|
|
Softmax fonksiyonu bu kadar. Bir sonraki yazıda görüşmek üzere.