Fungsi loss merangkum kekeliruan prediksi sebuah model menjadi satu angka yang diminimalkan oleh proses pelatihan. Topik ini menetapkan sifat yang dituntut dari fungsi loss, membedah MSE untuk regresi dan cross-entropy untuk klasifikasi, dan menutup dengan tabel pemilihan loss sesuai bentuk tugas. Setelah selesai, pilihan fungsi loss berhenti menjadi argumen yang disalin dari contoh dan menjadi keputusan yang berdasar.
Loss sebagai satu angka yang diminimalkan#
Proses pelatihan menuntut sasaran numerik yang tunggal, karena algoritma optimasi hanya tahu naik dan turun pada satu sumbu. Fungsi loss menerima prediksi dan target , mengembalikan angka nonnegatif, dan bernilai nol tepat ketika prediksi sempurna. Pada satu batch berisi contoh, yang diminimalkan adalah rata-ratanya:
Dua sifat praktis mengikuti definisi ini. Pertama, rata-rata membuat nilai loss tidak bergantung pada ukuran batch, sehingga kurva loss antar batch dapat dibandingkan. Kedua, setiap fungsi loss membawa asumsi tentang sifat kekeliruan yang wajar untuk tugasnya, sehingga salah memilih loss sama dengan menyuruh model mengejar sasaran yang keliru.
MSE untuk regresi#
Mean squared error mendefinisikan , yaitu rata-rata kuadrat selisih prediksi dan target. Penjumlahannya membatalkan tanda sehingga prediksi terlalu tinggi dan terlalu rendah sama-sama dihitung, sedangkan kuadrat memberi hukuman yang tumbuh cepat pada kesalahan besar. Sifat kuadrat ini membuat model sangat menghindari prediksi yang jauh meleset, dan sekaligus membuat MSE sensitif terhadap pencilan pada data.
Kode berikut menghitung MSE pada beberapa pasangan prediksi dan target kecil, sehingga perilaku hukuman kuadratnya terlihat pada angka yang nyata.
import torch
import torch.nn.functional as F
prediksi = torch.tensor([2.5, 0.0, 2.0, 8.0])
target = torch.tensor([3.0, -0.5, 2.0, 7.0])
mse = F.mse_loss(prediksi, target)
print("selisih :", (prediksi - target).tolist())
print("kuadrat selisih:", ((prediksi - target) ** 2).tolist())
print("MSE :", round(mse.item(), 4))selisih : [-0.5, 0.5, 0.0, 1.0]
kuadrat selisih: [0.25, 0.25, 0.0, 1.0]
MSE : 0.375Perhatikan contoh ketiga yang selisihnya nol dan menyumbang nol pada loss, sedangkan contoh keempat yang selisihnya satu menyumbang satu perempat dari total. Apabila kesalahan besar memang lebih merugikan secara proporsional, sifat ini diinginkan. Apabila setiap kesalahan seharusnya dihargai sama, Mean absolute error menjadi alternatif yang lebih tahan pencilan.
Cross-entropy untuk klasifikasi#
Klasifikasi menghasilkan peluang, dan kekeliruannya diukur dari seberapa sedikit peluang yang diberikan kepada jawaban yang benar. Cross-entropy mendefinisikan , sehingga prediksi yang memberi peluang 1 kepada kelas benar bernilai nol, dan peluang kecil kepada kelas benar dihukum sangat berat karena logaritma menuju saat peluang menuju nol. Untuk batch, yang diambil adalah rata-ratanya.
Kelas prediksi dinyatakan sebagai distribusi peluang lewat softmax, yang menormalisasi keluaran linier menjadi . Pada praktiknya, softmax dan log tidak pernah dipanggil berurutan secara manual karena penyebut dapat meluber pada nilai besar. PyTorch menyediakan log_softmax yang stabil secara numerik, dan cross_entropy menghitung keduanya dalam satu langkah dari logits mentah.
import torch
import torch.nn.functional as F
logits = torch.tensor([[2.0, 1.0, 0.1]])
target = torch.tensor([0])
peluang = F.softmax(logits, dim=1)
loss = F.cross_entropy(logits, target)
print("peluang per kelas:", [round(v, 3) for v in peluang.squeeze(0).tolist()])
print("-log peluang benar:", round(-torch.log(peluang[0, 0]).item(), 3))
print("cross_entropy :", round(loss.item(), 3))peluang per kelas: [0.659, 0.242, 0.099]
-log peluang benar: 0.417
cross_entropy : 0.417Keluarannya memperlihatkan identitas keduanya, yaitu cross_entropy tepat sama dengan peluang kelas benar setelah softmax. Perhatikan pula bentuk argumennya, yaitu logits tanpa softmax dan target berupa indeks kelas, karena kesalahan bentuk ini adalah penyebab error paling umum pada pemakaian pertama.
Memilih loss sesuai bentuk tugas#
Pemilihan loss mengikuti bentuk keluaran dan bentuk target, dan tabel berikut memadatkannya untuk tugas-tugas yang muncul sepanjang jalur ini.
| Tugas | Keluaran model | Loss yang dipakai |
|---|---|---|
| Regresi nilai kontinu | Satu angka tanpa aktivasi | mse_loss atau l1_loss |
| Klasifikasi dua kelas | Satu logit | binary_cross_entropy_with_logits |
| Klasifikasi banyak kelas | Logit per kelas | cross_entropy |
| Pembanding dua distribusi | Peluang per kelas | KL divergence |
Satu kesalahan pemilihan yang paling sering terjadi adalah menerapkan softmax manual lalu memanggil cross_entropy, sehingga softmax dihitung dua kali dan pelatihan berjalan tanpa error tetapi dengan sinyal yang melemah. Kaidah yang aman adalah membiarkan fungsi loss mengurus transformasi terakhirnya, dan menyimpan logits mentah hingga baris loss.
Ringkasan#
- Loss merangkum kekeliruan batch menjadi satu angka rata-rata nonnegatif yang menjadi sasaran seluruh optimasi.
- MSE menghukum kesalahan besar secara kuadrat dan cocok untuk regresi, sedangkan MAE lebih tahan pencilan.
- Cross-entropy mengukur kekurangan peluang pada kelas benar, dan dipanggil dari logits mentah karena softmax plus log yang stabil sudah diurus di dalamnya.
- Bentuk keluaran dan target menentukan loss yang tepat, dan tabel pemilihannya cukup untuk seluruh tugas pada jalur ini.
Referensi#
- torch.nn.MSELoss — PyTorch — Dokumentasi resmi MSE beserta aturan reduksinya.
- torch.nn.CrossEntropyLoss — PyTorch — Dokumentasi resmi cross-entropy yang menegaskan masukannya berupa logits.
- Softmax Regression — Dive into Deep Learning — Bab yang menurunkan cross-entropy dari prinsip kemungkinan maksimum.