Penjelasan kerugian lintas-entropi


35

Misalkan saya membuat NN untuk klasifikasi. Lapisan terakhir adalah lapisan padat dengan aktivasi softmax. Saya memiliki lima kelas yang berbeda untuk diklasifikasi. Misalkan untuk contoh pelatihan tunggal, true labeladalah [1 0 0 0 0]saat prediksi [0.1 0.5 0.1 0.1 0.2]. Bagaimana saya menghitung kerugian lintas entropi untuk contoh ini?

Jawaban:


50

The lintas entropi rumus mengambil dalam dua distribusi, p(x) , distribusi yang benar, dan q(x) , perkiraan distribusi, didefinisikan melalui variabel diskrit x dan diberikan oleh

H(p,q)=xp(x)log(q(x))

Untuk jaringan saraf, perhitungannya tidak tergantung pada hal berikut:

  • Jenis lapisan apa yang digunakan.

  • Jenis aktivasi apa yang digunakan - walaupun banyak aktivasi tidak akan kompatibel dengan perhitungan karena outputnya tidak dapat diartikan sebagai probabilitas (yaitu, outputnya negatif, lebih besar dari 1, atau tidak dijumlahkan ke 1). Softmax sering digunakan untuk klasifikasi multi-kelas karena menjamin fungsi distribusi probabilitas yang berperilaku baik.

Untuk jaringan saraf, Anda biasanya akan melihat persamaan ditulis dalam bentuk di mana y adalah vektor tanah kebenaran dan y^ beberapa nilai lain yang diambil langsung dari output lapisan terakhir) adalah perkiraan. Untuk satu contoh, akan terlihat seperti ini:

L=ylog(y^)

di mana adalah produk titik vektor.

Misalnya Anda ground truth y memberikan semua probabilitas untuk nilai pertama, dan nilai-nilai lain adalah nol, sehingga kita dapat mengabaikan mereka, dan hanya menggunakan istilah yang cocok dari perkiraan Anda yy^

L=(1×log(0.1)+0×log(0.5)+...)

L=log(0.1)2.303

Poin penting dari komentar

Itu berarti, kerugian akan sama tidak peduli jika prediksi yang [0.1,0.5,0.1,0.1,0.2] atau [0.1,0.6,0.1,0.1,0.1] ?

Ya, ini adalah fitur utama dari multiclass logloss, ini memberi hadiah / menghukum probabilitas kelas yang benar saja. Nilai tidak tergantung pada bagaimana probabilitas yang tersisa dibagi antara kelas yang salah.

Anda akan sering melihat persamaan ini dirata-rata untuk semua contoh sebagai fungsi biaya . Ini tidak selalu benar-benar dipatuhi dalam deskripsi, tetapi biasanya fungsi kerugian adalah level yang lebih rendah dan menggambarkan bagaimana satu instance atau komponen menentukan nilai kesalahan, sementara fungsi biaya adalah level yang lebih tinggi dan menggambarkan bagaimana sistem lengkap dievaluasi untuk optimasi. Fungsi biaya berdasarkan hilangnya multikelas log untuk kumpulan data ukuran N mungkin terlihat seperti ini:

J=1N(i=1Nyilog(y^i))

Banyak implementasi yang membutuhkan nilai kebenaran dasar Anda untuk dikodekan satu kali (dengan satu kelas benar), karena itu memungkinkan beberapa optimasi tambahan. Namun, pada prinsipnya kerugian lintas entropi dapat dihitung - dan dioptimalkan - saat ini tidak terjadi.


1
Baik. Itu berarti, kerugiannya akan sama tidak masalah jika prediksi adalah [0,1 0,5 0,1 0,2] atau [0,1 0,6 0,1 0,1]?
Nain

@ Nain: Itu benar untuk contoh Anda. Kehilangan lintas-entropi tidak bergantung pada nilai probabilitas kelas yang salah.
Neil Slater

8

Jawaban dari Neil benar. Namun saya pikir ini penting untuk menunjukkan bahwa sementara kerugian tidak tergantung pada distribusi antara kelas yang salah (hanya distribusi antara kelas yang benar dan yang lainnya), gradien fungsi kerugian ini memang mempengaruhi kelas yang salah secara berbeda tergantung pada bagaimana salah mereka. Jadi ketika Anda menggunakan cross-ent dalam pembelajaran mesin, Anda akan mengubah bobot secara berbeda untuk [0,1 0,5 0,1 0,2] dan [0,1 0,6 0,1 0,1]. Ini karena skor kelas yang benar dinormalisasi oleh skor semua kelas lain untuk mengubahnya menjadi probabilitas.


3
Bisakah Anda menguraikannya dengan contoh yang tepat?
Nain

@Lucas Adams, bisakah Anda memberi contoh?
koryakinp

Turunan dari EACH y_i (softmax output) wrt EACH logit z (atau parameter w itu sendiri) tergantung pada SETIAP y_i. medium.com/@aerinykim/…
Aaron

2

Mari kita lihat bagaimana gradien loss berperilaku ... Kita memiliki cross-entropy sebagai fungsi loss, yang diberikan oleh

H(p,q)=i=1np(xi)log(q(xi))=(p(x1)log(q(x1))++p(xn)log(q(xn))

xi

xiH(p,q)=xip(xi)log(q(xi)).
xiH(p,q)=p(xi)1q(xi)q(xi)xi.

p(xi)

Saya bertanya-tanya bagaimana paket perangkat lunak menangani nilai prediksi 0, sedangkan nilai sebenarnya lebih besar dari nol ... Karena kita membaginya dengan nol dalam hal ini.


Saya pikir yang Anda inginkan adalah mengambil parameter turunan wrt, bukan wrt x_i.
Aaron

1

Mari kita mulai dengan memahami entropi dalam teori informasi: Misalkan Anda ingin mengomunikasikan serangkaian huruf "aaaaaaaa". Anda dapat dengan mudah melakukan itu sebagai 8 * "a". Sekarang ambil string lain "jteikfqa". Apakah ada cara terkompresi untuk mengkomunikasikan string ini? Tidak ada disana. Kita dapat mengatakan bahwa entropi string ke-2 lebih sebagai, untuk mengkomunikasikannya, kita memerlukan lebih banyak "bit" informasi.

log2(n)log2(1/8) yang merupakan 3. Lebih khusus,

-saya=1818log2(18)=3
Entropi ini memberi tahu kita tentang ketidakpastian yang terlibat dengan distribusi probabilitas tertentu; semakin banyak ketidakpastian / variasi dalam distribusi probabilitas, semakin besar entropinya (misalnya untuk 1024 buah, akan menjadi 10).

Dalam "cross" -entropy, seperti namanya, kami fokus pada jumlah bit yang diperlukan untuk menjelaskan perbedaan dalam dua distribusi probabilitas yang berbeda. Skenario kasus terbaik adalah bahwa kedua distribusi identik, dalam hal ini jumlah bit paling sedikit diperlukan yaitu entropi sederhana. Dalam istilah matematika,

H(y,y^)=-sayaysayaloge(y^saya)

Dimana y^ adalah vektor probabilitas yang diprediksi (output Softmax), dan yadalah vektor ground-truth (mis. satu-panas). Alasan kami menggunakan log natural adalah karena mudah untuk membedakan (ref. Gradien penghitungan) dan alasan kami tidak mengambil log dari ground ground vector adalah karena mengandung banyak 0 yang menyederhanakan penjumlahan.

Intinya: Dalam istilah awam, orang bisa menganggap cross-entropy sebagai jarak antara dua distribusi probabilitas dalam hal jumlah informasi (bit) yang diperlukan untuk menjelaskan jarak itu. Ini adalah cara yang rapi untuk mendefinisikan kerugian yang turun ketika vektor probabilitas semakin dekat satu sama lain.


0

Saya tidak setuju dengan Lucas. Nilai-nilai di atas sudah merupakan probabilitas. Perhatikan bahwa posting asli menunjukkan bahwa nilai memiliki aktivasi softmax.

Kesalahan hanya disebarkan kembali pada kelas "panas" dan probabilitas Q (i) tidak berubah jika probabilitas dalam kelas lain bergeser satu sama lain.


2
Lucas benar. Dengan arsitektur yang dijelaskan oleh OP, maka gradien di semua log (sebagai lawan dari output) bukan nol, karena fungsi softmax menghubungkan semuanya. Jadi kesalahan [gradien dari] di kelas "panas" merambat ke semua neuron keluaran.
Neil Slater

+1 untuk Neil dan Lucas
Aaron

-1

Masalahnya adalah bahwa probabilitas datang dari fungsi 'rumit' yang menggabungkan output lain ke dalam nilai yang diberikan. Hasil-hasilnya saling terhubung, jadi dengan cara ini kami tidak memperoleh tentang hasil aktual, tetapi dengan semua input dari fungsi aktivasi terakhir (softmax), untuk setiap hasil.

Saya telah menemukan deskripsi yang sangat bagus di deepnotes.io/softmax-crossentropy di mana penulis menunjukkan bahwa turunan sebenarnya adalahhalsaya-ysaya.

Deskripsi rapi lainnya di gombru.github.io/2018/05/23/cross_entropy_loss .

Saya pikir menggunakan sigmoid sederhana sebagai lapisan aktivasi terakhir akan mengarah ke jawaban yang disetujui, tetapi menggunakan softmax menunjukkan jawaban yang berbeda.


1
Selamat datang di Stack Exchange. Namun apa yang Anda tulis sepertinya bukan jawaban dari pertanyaan OP tentang menghitung kehilangan lintas-entropi.
user12075
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.