Loss Function – Saat mengerjakan Machine Learning / Deep Machine Learning menggunakan loss function/fungsi kerugian/biaya digunakan untuk mengoptimalkan model selama pelatihan. Tujuannya hampir selalu untuk meminimalkan minimize loss function/fungsi kerugian. Semakin rendah kerugian, semakin baik modelnya. Pada PyTorch ada banyak jenis loss function seperti MSE, Cross Entropy dan yang lainnya.
Loss function digunakan untuk mengukur kesalahan antara keluaran prediksi dan nilai target yang diberikan. Sebuah loss function memberitahu kita seberapa jauh model algoritma dari mewujudkan hasil yang diharapkan. Kata ‘loss’ berarti penalit/hukuman yang didapat model karena gagal memberikan hasil yang diinginkan. Misalnya, fungsi kerugian (sebut saja J) dapat mengambil dua parameter berikut:
- Output yang diprediksi (y_pred)
- Nilai target (y)
Fungsi ini akan menentukan kinerja model dengan membandingkan keluaran yang diprediksi dengan keluaran yang diharapkan. Jika deviasi antara y_pred dan y sangat besar, nilai loss akan sangat tinggi.
Jika penyimpangannya kecil atau nilainya hampir sama, itu akan menghasilkan nilai loss yang sangat rendah. Oleh karena itu, kalian perlu menggunakan loss function yang dapat membuat penalti / menghukum model dengan benar saat melakukan proses pelatihan. Loss function berubah berdasarkan pernyataan masalah yang coba dipecahkan oleh algoritme kita pilih.
Bagaimana cara menambahkan loss function PyTorch
Contents
Modul torch.nn PyTorch memiliki beberapa loss function standar yang dapat kita gunakan, untuk menambahkannya, kita harus terlebih dahulu mengimpor perpustakaan:
import torch
import torch.nn as nn
Selanjutnya, tentukan jenis loss function yang ingin digunakan. Berikut adalah cara untuk mendefinisikan fungsi mean absolute error loss:
loss = nn.L1Loss()
Jenis Loss Function
Ada banyak jenis loss function yang bisa kalian pakai, yaitu
- Regression Loss Functions
- Mean Squared Error Loss
- Mean Squared Logarithmic Error Loss
- Mean Absolute Error Loss
- Binary Classification Loss Functions
- Binary Cross-Entropy
- Hinge Loss
- Squared Hinge Loss
- Multi-Class Classification Loss Functions
- Multi-Class Cross-Entropy Loss
- Sparse Multiclass Cross-Entropy Loss
- Kullback Leibler Divergence Loss
Lebih lengkapnya yaitu https://pytorch.org/docs/stable/nn.html#loss-functions
1. Mean Absolute Error (L1 Loss Function)
Mean Absolute Error (MAE), juga disebut L1 Loss, menghitung rata-rata jumlah perbedaan mutlak antara nilai aktual dan nilai prediksi.
Ini memeriksa ukuran kesalahan dalam satu set nilai yang diprediksi, tanpa mempedulikan arah positif atau negatifnya. Jika nilai absolut dari kesalahan tidak digunakan, maka nilai negatif dapat membatalkan nilai positif.
Kapan itu bisa digunakan?
Masalah regresi, terutama ketika distribusi variabel target memiliki outlier, seperti nilai-nilai kecil atau besar yang sangat jauh dari nilai rata-rata. Hal ini dianggap lebih kuat untuk outlier.
import torch
import torch.nn as nn
input = torch.randn(3, 5, requires_grad=True)
target = torch.randn(3, 5)
mae_loss = nn.L1Loss()
output = mae_loss(input, target)
output.backward()
print(‘input: ‘, input)
print(‘target: ‘, target)
print(‘output: ‘, output)
2. Loss Function MSE (L2 Loss function)
Mean Squared Error (MSE), juga disebut L2 Loss, menghitung rata-rata perbedaan kuadrat antara nilai aktual dan nilai prediksi. Pytorch MSE Loss selalu menghasilkan hasil positif, terlepas dari tanda nilai aktual dan prediksi. Untuk meningkatkan akurasi model, kita harus mencoba mengurangi L2 Loss sekecil mungkin atau mencapai nilai sempurna adalah 0,0.
torch.nn.MSELoss
Rumus MSE yaitu
MSE digunakan untuk kasus seperti kasus regression. Ada 3 yang digunakan yaitu ‘none’ | ‘mean’ | ‘sum’. Saya akan demokan cara menghitung secara manual. Misalkan jika kita memilih opsi mean
import torch
import torch.nn
a = torch.Tensor([2.0,3.0,8.0])
b = torch.Tensor([4.0,6.0,7.0])
torch.sum((a-b)**2)/3
atau bila dalam pytorch yaitu
loss_mse = torch.nn.MSELoss(reduction=’mean’)
loss_mse(a,b)
Kalian bisa coba-coba untuk mengganti reduction = ‘ sum’
Mengapa menggunakan loss function MSE?
MSE sensitif terhadap outlier dan diberikan beberapa contoh dengan nilai fitur input yang sama, prediksi optimal akan menjadi nilai target rata-ratanya. Ini harus dibandingkan dengan Mean Absolute Error, di mana prediksi optimal adalah median. Oleh karena itu, MSE baik digunakan jika yakin bahwa data target yang dikondisikan pada input, terdistribusi secara normal di sekitar nilai rata-rata
Kapan menggunakan loss function MSE?
Gunakan MSE saat melakukan regresi, percaya bahwa target Anda, dikondisikan pada input, terdistribusi normal, dan ingin kesalahan besar secara signifikan (kuadrat) lebih diberikan perhitungan daripada kesalahan kecil.
Contoh: kalian ingin memprediksi harga rumah di masa depan. Harga adalah nilai kontinu, oleh karena itu kami ingin melakukan regresi. MSE di sini dapat digunakan sebagai fungsi kerugian.
Tidak cocok menggunakan loss function MSE
Tidak cocok menggunakan loss function MSE jika target yang digunakan berupa one hot encoding yaitu kasus yang berkaitan dengan klasifikasi. Misalkan saja kasus 3 kelas yang dibuat one hot encoding
- [1,0,0] : kelas 1
- [0,1,0]: kelas 2
- [0,0,1]: kelas 3
Kita coba saja misalkan terdapat hasil prediksi [0.5,0.5,1] maka akan masuk kelas yang mana?
class1 = torch.Tensor([1,0,0])
class2 = torch.Tensor([0,1,0])
class3 = torch.Tensor([0,0,1])
prediksi = torch.Tensor([0.5,0.5,1])
loss_mse(class1,prediksi)
loss_mse(class2,prediksi)
loss_mse(class3,prediksi)
maka untuk akan sulit jika hasil point 1 dan 2 adalah sama yaitu 1.5 untuk itu loss function MSE tidak cocok untuk klasifikasi dengan target one hot encoding diperlukan loss function yang lain. Untuk target one hot encoding sudah jarang digunakan bahkan untuk pytorch tidak menyediakan khusus untuk hal tersebut.
3. Negative Log-Likelihood Loss Function
Fungsi Negatif Log-Likelihood Loss (NLL) hanya diterapkan pada model dengan fungsi softmax sebagai lapisan aktivasi keluaran. Softmax mengacu pada fungsi aktivasi yang menghitung fungsi eksponensial yang dinormalisasi dari setiap unit di lapisan.
Fungsi Softmax dinyatakan sebagai:
NLL menggunakan konotasi negatif karena probabilitas (atau kemungkinan) bervariasi antara nol dan satu, dan nilai logaritma dalam rentang ini negatif. Pada akhirnya, nilai kerugian menjadi positif.
Di NLL, meminimalkan fungsi kerugian membantu kita mendapatkan output yang lebih baik. Kemungkinan log negatif diperoleh dari perkiraan perkiraan kemungkinan maksimum (MLE). Ini berarti bahwa kita mencoba untuk memaksimalkan kemungkinan log model, dan sebagai hasilnya, meminimalkan NLL.
Dalam NLL, model akan diberikan penalti / hukuman karena membuat prediksi yang benar dengan probabilitas yang lebih kecil dan didorong untuk membuat prediksi dengan probabilitas yang lebih tinggi. NLL tidak hanya peduli tentang prediksi yang benar tetapi juga tentang model yang yakin tentang prediksi dengan skor tinggi.
Misalkan kita punyai 3 record dengan 5 ciri fitur/paramater yaitu
m = nn.LogSoftmax(dim=1)
nll_loss = nn.NLLLoss()
# size of input (N x C) is = 3 x 5
input = torch.randn(5, 4, requires_grad=True)
# every element in target should have 0 <= value < C
target = torch.tensor([0,1,2,3,3])
output = nll_loss(m(input), target)
output.backward()
print(‘input: ‘, input)
print(‘target: ‘, target)
print(‘output: ‘, output)
arti dari
- m = nn.LogSoftmax(dim=1) artinya akan di kalkulasi berdasarkan perbaris yaitu dim=1 kalau diubah perkolom menjadi dim=0. Pytorch menganut jumlah sample sebagai baris/record dengan jumlah ciri fitur sebagai kolom. Misalkan kita mempunyai 100 record dengan 3 ciri fitur maka torch.randn(100, 3, requires_grad=True)
- # size of input (N x C) is = 3 x 5 yaitu kita mempunyai 3 record dengan 5 fitur
- # every element in target should have 0 <= value < C artinya kita harus mempunyai target dengan rentang tersebut
Kapan itu bisa digunakan?
Masalah klasifikasi multi-kelas, jadi misalkan ada 4 kelas kalian bisa menggunakan target nilai 0,1,2,3
Cara menggunakannya
Kalian bisa melihat Cara menggunakan loss function Negative log likelihood loss nn.NLLLoss
4. Cross-Entropy Loss Function
torch.nn.CrossEntropyLoss
Loss function ini menghitung perbedaan antara dua distribusi probabilitas untuk serangkaian kejadian atau variabel acak yang disediakan.
Ini digunakan untuk menghitung skor yang merangkum perbedaan rata-rata antara nilai yang diprediksi dan nilai sebenarnya. Untuk meningkatkan akurasi model, kalian harus mencoba meminimalkan skor—skor lintas entropi antara 0 dan 1, dan nilai sempurna adalah 0.
Loss function lainnya, seperti MSE memberikan penalti prediksi yang salah. Cross-Entropy akan memberikan penalti yang banyak. Berbeda dengan Negatif Log-Likelihood Loss, yang tidak memberikan penalti berdasarkan keyakinan prediksi, Cross-Entropy menghukum prediksi yang salah tapi yakin, serta prediksi yang benar tapi kurang percaya diri.
Fungsi Cross-Entropy memiliki variasi yang luas, jenis yang paling umum adalah Binary Cross-Entropy (BCE). BCE Loss terutama digunakan untuk model klasifikasi biner; yaitu, model hanya memiliki 2 kelas. Persamaan matematika dari cross entropy yaitu
Kapan itu bisa digunakan?
- Tugas klasifikasi biner, yang merupakan fungsi kerugian default di Pytorch.
- Membuat model yang percaya diri—prediksi akan akurat dan dengan probabilitas yang lebih tinggi.
import torch
import torch.nn as nn
input = torch.randn(3, 5, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
cross_entropy_loss = nn.CrossEntropyLoss()
output = cross_entropy_loss(input, target)
output.backward()
print(‘input: ‘, input)
print(‘target: ‘, target)
print(‘output: ‘, output)
Cara menggunakannya
Kalian bisa melihat Cara menggunakan loss function Cross-entropy loss