Fungsi cross-entropy error dalam jaringan saraf

115

Dalam MNIST For ML Beginners mereka mendefinisikan cross-entropy sebagai

Hy(y): =-sayaysayacatatan(ysaya)

ysaya adalah nilai probabilitas yang diprediksi untuk kelas dan adalah probabilitas sebenarnya untuk kelas itu.sayaysaya

pertanyaan 1

Bukankah ini masalah (dalam ) bisa 0? Ini berarti bahwa kita memiliki penggolong yang sangat buruk, tentu saja. Tetapi pikirkan kesalahan dalam set data kami, misalnya label "jelas" berlabel . Apakah itu hanya akan crash? Apakah model yang kami pilih (aktivasi softmax di akhir) pada dasarnya tidak pernah memberikan probabilitas 0 untuk kelas yang benar?ysayacatatan(ysaya)13

Pertanyaan 2

Saya telah belajar bahwa lintas-entropi didefinisikan sebagai

Hy(y): =-saya(ysayacatatan(ysaya)+(1-ysaya)catatan(1-ysaya))

Apa yang benar Apakah Anda memiliki referensi buku teks untuk kedua versi? Bagaimana fungsi-fungsi itu berbeda dalam sifat-sifatnya (sebagai fungsi kesalahan untuk jaringan saraf)?

Martin Thoma
sumber
Lihat juga: Kullback-Leibler Divergence Dijelaskan posting blog.
Piotr Migdal

Jawaban:

101

Salah satu cara untuk menginterpretasikan lintas-entropi adalah melihatnya sebagai (minus) log-kemungkinan untuk data , di bawah model .ysayaysaya

Yaitu, anggaplah Anda memiliki beberapa model tetap (alias "hipotesis"), yang memprediksi untuk kelas probabilitas kemunculan hipotetis mereka . Misalkan Anda sekarang mengamati (dalam kenyataan) instance dari kelas , instance dari kelas , instance dari kelas , dll. Menurut model Anda, kemungkinan kejadian ini adalah: Mengambil logaritma dan mengubah tandanya: n{1,2,...,n}1 k 2 2 k n n P [ d a t a | m o d e l ] : = y k 1 1 y k 2 2y k n n . - log P [ d a t a | m o d e l ]y1,y2,...,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
N = k 1 + k 2 + + k n y i = k i / N - 1 Jika Anda sekarang membagi jumlah sebelah kanan dengan jumlah pengamatan , dan menunjukkan probabilitas empiris sebagai , Anda akan mendapatkan entropi silang: N=k1+k2++knyi=ki/N
-1NcatatanP[dSebuahtSebuah|mHaidel]=-1Nsayaksayacatatanysaya=-sayaysayacatatanysaya=:H(y,y)

Lebih lanjut, kemungkinan log dari dataset yang diberikan model dapat diartikan sebagai ukuran "panjang pengkodean" - jumlah bit yang Anda harapkan untuk mengkodekan informasi ini jika skema pengkodean Anda akan didasarkan pada hipotesis Anda.

Ini mengikuti dari pengamatan bahwa peristiwa independen dengan probabilitas membutuhkan setidaknya bit untuk menyandikannya (dengan asumsi pengkodean yang efisien), dan akibatnya ekspresi secara harfiah adalah panjang yang diharapkan dari pengkodean , di mana panjang pengkodean untuk peristiwa dihitung menggunakan distribusi "dihipotesiskan", sementara harapan diambil alih yang sebenarnya.ysaya-catatan2ysaya

-sayaysayacatatan2ysaya,

Akhirnya, alih-alih mengatakan "ukuran panjang pengkodean yang diharapkan", saya benar-benar suka menggunakan istilah informal "ukuran kejutan". Jika Anda membutuhkan banyak bit untuk menyandikan acara yang diharapkan dari suatu distribusi, distribusinya "benar-benar mengejutkan" bagi Anda.

Dengan intuisi tersebut, jawaban atas pertanyaan Anda dapat dilihat sebagai berikut:

  • Pertanyaan 1 . Iya. Ini adalah masalah setiap kali sesuai bukan nol pada saat yang samaysaya . Ini sesuai dengan situasi di mana model Anda percaya bahwa beberapa kelas memiliki probabilitas nol terjadinya, namun kelas muncul dalam kenyataan. Akibatnya, "kejutan" model Anda sangat luar biasa: model Anda tidak memperhitungkan peristiwa itu dan sekarang membutuhkan banyak bit untuk mengkodekannya. Itulah sebabnya Anda mendapatkan ketidakterbatasan sebagai entropi silang Anda.

    Untuk menghindari masalah ini, Anda perlu memastikan bahwa model Anda tidak membuat asumsi terburu-buru tentang sesuatu yang mustahil sementara itu bisa terjadi. Pada kenyataannya, orang cenderung menggunakan fungsi sigmoid atau "softmax" sebagai model hipotesis mereka, yang cukup konservatif untuk meninggalkan setidaknya beberapa peluang untuk setiap opsi.

    Jika Anda menggunakan beberapa model hipotesis lain, terserah Anda untuk mengatur (alias "halus") sehingga tidak membuat hipotesis nol di mana seharusnya tidak.

  • Pertanyaan 2 . Dalam rumus ini, orang biasanya mengasumsikan menjadi atau , sedangkan adalah hipotesis probabilitas model untuk input yang sesuai. Jika Anda melihat lebih dekat, Anda akan melihat bahwa itu hanyalah untuk data biner, yang setara dengan persamaan kedua dalam jawaban ini.ysaya01ysaya-catatanP[dSebuahtSebuah|mHaidel]

    Oleh karena itu, sebenarnya, meskipun masih log-kemungkinan, ini tidak secara sintaksis setara dengan lintas-entropi. Apa yang dimaksud beberapa orang ketika merujuk pada ekspresi seperti cross-entropy adalah bahwa, pada kenyataannya, jumlah lebih dari binary cross-entropies untuk masing-masing poin dalam dataset: mana dan harus ditafsirkan sebagai distribusi biner yang sesuai dan .

    sayaH(ysaya,ysaya),
    ysayaysaya(yi,1yi)(yi,1yi)

KT.
sumber
1
Bisakah Anda memberikan sumber untuk mendefinisikan ? Di sini mereka mendefinisikannya sebagai distribusi satu-panas untuk label kelas saat ini. Apa bedanya? yi=kiN
Lenar Hoyt
1
Dalam tutorial MNIST TensorFlow mereka mendefinisikannya dalam hal vektor satu-panas juga.
Lenar Hoyt
@LenarHoyt Ketika , akan setara dengan satu-panas. Anda dapat menganggap one-hot sebagai pengkodean satu item berdasarkan probabilitas kategorisnya (nyata). N=1ksaya/N
THN
'acara independen memerlukan ... untuk menyandikannya' - bisakah Anda menjelaskan sedikit ini?
Alex
@Alex Ini mungkin perlu penjelasan lebih lama untuk dipahami dengan benar - baca kode Shannon-Fano dan hubungan pengkodean optimal dengan persamaan entropi Shannon. Untuk membodohi hal-hal, jika suatu kejadian memiliki probabilitas 1/2, taruhan terbaik Anda adalah kode itu menggunakan bit tunggal. Jika memiliki probabilitas 1/4, Anda harus menghabiskan 2 bit untuk menyandikannya, dll. Secara umum, jika rangkaian acara Anda memiliki probabilitas bentuk 1/2 ^ k, Anda harus memberi mereka panjang k - dengan cara ini kode Anda akan mendekati panjang optimal Shannon.
KT.
22

Rumus logloss pertama yang Anda gunakan adalah untuk hilangnya log multi-kelas, di mana subscript menyebutkan kelas-kelas yang berbeda dalam sebuah contoh. Rumus ini mengasumsikan bahwa satu dalam setiap contoh adalah 1, dan sisanya adalah 0.sayaysaya

Itu berarti rumus hanya menangkap kesalahan pada kelas target. Ini membuang segala kesalahan yang Anda anggap "false positive" dan tidak peduli bagaimana probabilitas yang diprediksi didistribusikan selain probabilitas yang diprediksi dari kelas sebenarnya.

Asumsi lain adalah bahwa untuk prediksi masing-masing contoh. Lapisan softmax melakukan ini secara otomatis - jika Anda menggunakan sesuatu yang berbeda, Anda perlu mengukur output untuk memenuhi kendala itu.sayaysaya=1

pertanyaan 1

Bukankah ini masalah (dalam ) bisa 0?ysayalHaig(ysaya)

Ya itu bisa menjadi masalah, tetapi biasanya bukan yang praktis. Lapisan softmax yang diinisialisasi secara acak sangat tidak mungkin untuk menghasilkan yang tepat 0di kelas mana pun. Tapi itu mungkin, sangat layak untuk itu. Pertama, jangan mengevaluasi untuk setiap , karena kelas negatif selalu berkontribusi 0 pada kesalahan. Kedua, dalam kode praktis Anda dapat membatasi nilainya seperti untuk stabilitas numerik - dalam banyak kasus tidak diperlukan, tetapi ini adalah pemrograman defensif yang masuk akal.lHaig(ysaya)ysaya=0log( max( y_predict, 1e-15 ) )

Pertanyaan 2

Saya telah belajar bahwa cross-entropy didefinisikan sebagaiHy(y):=i(yilog(yi)+(1yi)log(1yi))

Formulasi ini sering digunakan untuk jaringan dengan satu output yang memprediksi dua kelas (biasanya keanggotaan kelas positif untuk 1 dan negatif untuk 0 output). Dalam hal ini mungkin hanya memiliki satu nilai - Anda dapat kehilangan jumlah lebih dari .isaya

Jika Anda memodifikasi jaringan seperti itu untuk memiliki dua output yang berlawanan dan menggunakan softmax plus definisi logloss pertama, maka Anda dapat melihat bahwa sebenarnya itu adalah pengukuran kesalahan yang sama tetapi melipat metrik kesalahan untuk dua kelas menjadi satu output tunggal.

Jika ada lebih dari satu kelas untuk memprediksi keanggotaan, dan kelas-kelas tersebut tidak eksklusif yaitu contohnya bisa salah satu atau semua kelas pada saat yang sama, maka Anda perlu menggunakan formulasi kedua ini. Untuk pengenalan digit yang tidak demikian (digit tertulis seharusnya hanya memiliki satu kelas "benar")

Neil Slater
sumber
Perhatikan ada beberapa ambiguitas dalam penyajian rumus kedua - secara teori bisa mengasumsikan hanya satu kelas dan kemudian akan menyebutkan contoh. saya
Neil Slater
Maaf, saya sudah menanyakan sesuatu yang berbeda dari yang ingin saya ketahui. Saya tidak melihat masalah di , tetapi di , karena . Bisakah Anda sesuaikan jawaban Anda dengan itu? catatan(ysaya)=0ysaya=0catatan(ysaya)
Martin Thoma
@NeilSlater jika kelas tidak saling eksklusif, vektor output untuk setiap input dapat berisi lebih dari satu 1, haruskah kita menggunakan rumus kedua?
Media
1
@ Media: Tidak juga. Anda ingin melihat hal-hal seperti klasifikasi hierarkis. . .
Neil Slater
1
@Javi: Dalam pertanyaan OP, adalah kebenaran dasar, dengan demikian biasanya 0 atau 1. itulah output softmax. Namun dapat berakhir nol dalam praktik karena pembulatan titik mengambang. Ini benar-benar terjadi. ysayay iysayaysaya
Neil Slater
11

Mengingat , Anda ingin mengoptimalkan metode pembelajaran mesin Anda untuk mendapatkan sedekat mungkin dengan . y p r e d i c t y t r u eytrkamueyhalredsayactytrkamue

Pertanyaan pertama:

Jawaban di atas telah menjelaskan latar belakang rumus pertama Anda, entropi silang yang didefinisikan dalam teori informasi.

Dari pendapat selain teori informasi:

Anda dapat memeriksa diri Anda sendiri bahwa formula pertama tidak memiliki hukuman pada false-positiveness (kebenaran itu salah tetapi model Anda memperkirakan bahwa itu benar), sedangkan yang kedua memiliki penalti pada false-positive. Karenanya, pilihan rumus pertama atau kedua, akan memengaruhi metrik Anda (alias jumlah statistik apa yang ingin Anda gunakan untuk mengevaluasi model Anda).

Dalam kata awam:

Jika Anda ingin menerima hampir semua orang baik untuk menjadi teman Anda tetapi bersedia menerima beberapa orang jahat menjadi teman Anda, maka gunakan formula pertama untuk kriteria.

Jika Anda ingin menghukum diri Anda menerima beberapa orang jahat untuk menjadi teman Anda, tetapi pada saat yang sama orang yang menerima orang baik Anda mungkin lebih rendah dari kondisi pertama, maka gunakan formula kedua.

Sementara, saya kira sebagian besar dari kita adalah kritis dan ingin memilih yang kedua (sehingga banyak paket ML menganggap apa itu cross entropy).

Pertanyaan kedua:

Entropi silang per sampel per kelas:

-ytrkamuecatatan(yhalredsayact)

Entropi silang untuk seluruh kumpulan data seluruh kelas:

sayankK-ytrkamue(k)catatan(yhalredsayact(k))

Jadi, ketika hanya ada dua kelas (K = 2), Anda akan memiliki rumus kedua.

Kecerdasan Buatan
sumber
5

Masalah-masalah tersebut ditangani oleh penggunaan tutorial softmax.

Untuk 1) Anda benar bahwa softmax menjamin output yang tidak nol karena itu eksponensial inputnya. Untuk aktivasi yang tidak memberikan jaminan ini (seperti relu), mudah untuk menambahkan istilah positif yang sangat kecil untuk setiap output untuk menghindari masalah itu.

Adapun 2), mereka tidak sama jelas, tetapi saya formulasi softmax yang mereka berikan menangani masalah ini. Jika Anda tidak menggunakan softmax, ini akan menyebabkan Anda mempelajari istilah bias besar yang menebak 1 untuk setiap kelas untuk input apa pun. Tetapi karena mereka menormalkan softmax di semua kelas, satu-satunya cara untuk memaksimalkan output dari kelas yang benar adalah untuk itu menjadi relatif besar ke kelas yang salah.

jamesmf
sumber
"Anda benar bahwa softmax menjamin output yang tidak nol" - Saya tahu bahwa ini secara teoretis terjadi. Pada kenyataannya, dapatkah itu terjadi (karena masalah numerik) ini menjadi 0?
Martin Thoma
Pertanyaan bagus. Saya berasumsi sangat mungkin untuk fungsi eksponensial untuk menghasilkan 0,0 jika input Anda terlalu kecil untuk ketepatan float Anda. Namun saya kira sebagian besar implementasi menambahkan istilah positif kecil untuk menjamin input tidak nol.
jamesmf
0

ysayacatatan(ysaya)

catatan(0)catatan(ysaya+ϵ)


Hy(y): =-sayaysayacatatan(ysaya)
Hy(y): =-saya(ysayacatatan(ysaya)+(1-ysaya)catatan(1-ysaya))

(a) benar untuk prediksi multi-kelas (sebenarnya merupakan penjumlahan ganda), (b) sama dengan (a) untuk prediksi dua-kelas. Keduanya saling entropi.

Contoh:

xsayacsaya{0,1}csaya[0,1]

csayacsaya

(csaya,csaya)={(0,0,1),(0,0,4),(0,0.8),(1,0.8),(1,0,2)}

ysayaysaya

  • ysayak: =1csaya=k: =0

  • ysayak: =hal(k|xsaya)xsayak

(ysaya,ysaya)

(ysaya,ysaya)={([1,0],[0,9,0,1]), ([1,0],[0,6,0,4]), ([1,0],[0,2,0.8]), ([0,1],[0,2,0.8]), ([0,1],[0.8,0,2])}

Baik (a) dan (b) dihitung sebagai:

Hy(y)=-1/5([lHaig(0,9)+lHaig(0,6)+lHaig(0,2)]csaya=0+[lHaig(0.8)+lHaig(0,2)]csaya=1)=0,352

Penurunan:

1K
(xsaya,csaya)csaya=kysaya=[0,..,1,0,..]kthysayak=1ysayak=hal(k|xsaya)(xsaya,k)-lHaig(ysayak)ysayak1-lHaig(ysayak)0

L.(ysaya,ysaya)=-k=1KysayaklHaig(ysayak)

ysayak=1kk0lHaig(ysayak)=0ysayam=1

L.(ysaya,ysaya)=-lHaig(ysayam)

Formula akhir untuk semua poin pelatihan adalah:

Hy(y)=-(xsaya,ysaya)k=1KysayaklHaig(ysayak)

ysaya0=1-ysaya1ysaya0=1-ysaya1

Hy(y)=-(xsaya,ysaya)ysaya1lHaig(ysaya1)+ysaya0lHaig(ysaya0)=-(xsaya,ysaya)ysaya1lHaig(ysaya1)+(1-ysaya1)lHaig(1-ysaya1)

yang sama dengan (b).

Cross-entropy (a) atas kelas (satu penjumlahan)

Cross-entropy (a) atas kelas adalah:

Hy(y)=-k=1KyklHaig(yk)

Versi ini tidak dapat digunakan untuk tugas klasifikasi. Mari kita gunakan kembali data dari contoh sebelumnya:

(csaya,csaya)={(0,0,1),(0,0,4),(0,0.8),(1,0.8),(1,0,2)}

y0=3/5=0,6y1=0,4

y0=3/5=0,6y1=0,4

-y0lHaigy0-y1lHaigy1=-0,6lHaig(0,6)-0,4lHaig(0,4)=0,292

(0,0.8)(1,0,2)y0y1


(csaya,csaya)={(0,0,1),(0,0,4),(0,0,2),(1,0.8),(1,0.8)}

y0y0=3/5

Orang Esma
sumber