Materi
Untuk klasifikasi lebih dari dua kelas, lapisan keluaran punya satu neuron per kelas, dan skornya (disebut logit) bisa bernilai berapa saja. User Guide scikit-learn menulis rumus yang dipakai MLPClassifier untuk mengubahnya menjadi peluang: softmax(z)ᵢ = exp(zᵢ) / Σ exp(zₖ). Setiap hasil berada di antara 0 dan 1, jumlah semuanya 1, dan urutan besar-kecilnya sama dengan urutan skornya. Kelas tebakan adalah kelas berpeluang terbesar, yang di numpy dicari dengan np.argmax.
Untuk dua kelas, MLPClassifier cukup memakai satu neuron keluaran dengan sigmoid dan ambang 0,5. Dive into Deep Learning menyebut sigmoid sebagai kasus khusus softmax.
Rumus langsung punya masalah angka: exp(1000) sudah melebihi batas float64 dan menjadi inf, lalu inf/inf menghasilkan nan. d2l §4.5 menjelaskan jalan keluarnya: kurangi setiap skor dengan skor terbesar sebelum dieksponenkan. Hasil softmax tidak berubah, karena faktor exp(−maks) muncul di pembilang dan penyebut lalu saling menghapus, tetapi eksponen terbesar kini exp(0) = 1.
import numpy as np
z = np.array([0.5, 2.5, 1.0]) # skor untuk apel, jeruk, pisang
e = np.exp(z - z.max())
peluang = e / e.sum()
print(peluang.round(3)) # [0.1 0.736 0.164], jumlahnya 1
print(np.argmax(peluang)) # 1 -> jeruk