Yapay sinir ağlarında çapraz entropi hata fonksiyonu


115

Olarak ML başlayanlar için MNIST bunlar çapraz entropi tanımlar

Hy(y):=iyilog(yi)

ı y ' iyi , sınıfı için öngörülen olasılık değeridir ve , bu sınıf için gerçek olasılıktır.iyi

Soru 1

( ) 0 olması sorun değil mi? Bu elbette çok kötü bir sınıflandırıcıya sahip olduğumuz anlamına gelir. Ancak veri kümemizdeki bir hatayı, örneğin "açık" olarak düşünün . Sadece çarpışır mıydı? Seçtiğimiz model (sonunda softmax aktivasyonu) temelde doğru sınıf için 0 olasılık vermez mi?yilog(yi)13

soru 2

Çapraz entropinin tanımlandığını öğrendim.

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

Ne doğru? Her iki sürüm için de ders kitabı referansınız var mı? Bu işlevler özelliklerinde nasıl farklılık gösterir (sinir ağları için hata işlevleri olarak)?



Ayrıca bakınız: Kullback-Leibler Divergence Blog yazısı.
Piotr Migdal

Yanıtlar:


101

Çapraz entropiyi yorumlamanın bir yolu, onu bir modeli altında, verileri için (eksi) log olasılığı olarak .yiyi

Yani, sizin için tahmin (aka "hipotezi") bazı sabit modeli, sahip olduğunu varsayalım sınıfları kendi varsayımsal olay olasılıkları . Şimdi (gerçekte) sınıf , sınıf , sınıf , vb. Örneklerini gözlemlediğinizi varsayalım . Modelinize göre, bu olma olasılığı şudur: Logaritmayı alıp işaretini değiştirmek: n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
N = k 1 + k 2 + + k n Şimdi sağdaki toplamı gözlemlerin sayısına ve ampirik olasılıkları olarak , çapraz entropi elde edersiniz: N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

Ayrıca, bir model verilen veri kümesinin log olasılığı "kodlama uzunluğu" nun bir ölçüsü olarak yorumlanabilir - kodlama şemanız hipotezinize dayanıyorsa bu bilgiyi kodlamak için harcayacağınız bit sayısı.

Bu, olasılığına sahip olan bağımsız bir olayın en azından kodlamasını gerektirmesi (verimli kodlama varsayılır) gerektirdiği ve sonuç olarak kelimenin tam anlamıyla kodlamanın beklenen uzunluğu olduğu eder. Olaylar için kodlama uzunluklarının "varsayımsal" dağılım kullanılarak hesaplandığı ve beklenti gerçek olanın üzerinden alındığı zaman.yilog2yi

iyilog2yi,

Son olarak, "beklenen kodlama uzunluğu ölçüsü" demek yerine, gayri resmi "sürpriz ölçüsü" terimini kullanmayı seviyorum. Bir dağıtımdan beklenen bir olayı kodlamak için çok fazla bit ihtiyacınız varsa, dağıtım sizin için "gerçekten şaşırtıcı" olur.

Bu sezgiler göz önüne alınarak, sorularınızın cevapları şu şekilde görülebilir:

  • Soru 1 . Evet. Karşılık gelen aynı anda sıfıryi bu bir problemdir . Modelinizin bazı sınıfların sıfır olma ihtimaline sahip olduğuna inandığı duruma karşılık gelir, ancak sınıf gerçekte ortaya çıkar. Sonuç olarak, modelinizin “sürprizi” sonsuz derecede harika: modeliniz bu olayı hesaba katmadı ve şimdi kodlamak için sonsuz sayıda bit gerektiriyor. Bu yüzden çapraz entropi olarak sonsuzluğa kavuşuyorsun.

    Bu sorunu önlemek için, modelinizin gerçekleşmesi imkansız olan bir şeyle ilgili döküntü varsayımları yapmadığından emin olmanız gerekir. Gerçekte, insanlar sigmoid veya "softmax" işlevlerini, her seçenek için en azından bir şans bırakacak kadar muhafazakar olan hipotez modelleri olarak kullanırlar.

    Eğer başka bir hipotez modeli kullanıyorsanız, onu sıfırlamak zorunda kalmayacak şekilde hipotez oluşturmayacak şekilde (aka "pürüzsüz") düzenli hale getirmek size kalmıştır .

  • Soru 2 . Bu formülde, genellikle veya olarak kabul , modelin karşılık gelen girdi için olasılık hipotezidir. Yakından bakarsanız, bunun ikilik veriler için sadece bir olduğunu göreceksiniz, bu cevabın ikinci denkleminin bir eşdeğeri.yi01yilogP[data|model]

    Bu nedenle, kesinlikle konuşursak, hala bir günlük olasılık olmasına rağmen, bu sözdizimsel olarak çapraz entropiye eşdeğer değildir. Bazıları, çapraz entropi gibi bir ifadeye atıfta , veri kümesindeki bireysel noktalar için ikili çapraz entropiler üzerinden bir toplam olduğu anlamına gelir : burada ve , karşılık gelen ikili dağılımlar ve .

    iH(yi,yi),
    yiyi(yi,1yi)(yi,1yi)


1
tanımladıkları bir kaynak bulabilir misiniz ? Burada mevcut sınıf etiketi için tek bir sıcak dağıtım olarak tanımlarlar. Fark ne? yi=kiN
Lenar Hoyt

1
MNIST TensorFlow eğitiminde, onu bir sıcak vektör olarak da tanımlarlar.
Lenar Hoyt

@ LenarHoyt , bir sıcaklığa eşit olacaktır. Bir ateşli maddeyi, deneysel (gerçek) kategorik olasılığına dayanarak bir maddenin kodlaması olarak düşünebilirsiniz. k i / KN=1ki/N
THN,

'bağımsız olay ... kodlamayı gerektiriyor' - bu kısmı açıklar mısınız?
Alex,

@Alex Düzgün bir şekilde anlaşılması için daha uzun bir açıklama yapılması gerekebilir - Shannon-Fano kodları ve optimum kodlamanın Shannon entropi denklemi ile ilişkisi. Olayları kısmak için, eğer bir olayın olasılığı 1/2 ise, en iyi bahis, tek bir bit kullanarak kodlamaktır. Eğer 1/4 olasılık varsa, onu kodlamak için 2 bit harcamalısınız vs. Shannon optimal uzunluğuna yaklaşın.
KT.

22

Kullanmakta olduğunuz ilk logloss formülü, alt diziliminin bir örnekte farklı sınıfları numaralandırdığı çoklu sınıf günlük kaybı içindir . Formül , her örnekte tek bir nin 1 olduğunu ve geri kalanının hepsinin 0 olduğunu varsayar .iyi

Bu, formülün yalnızca hedef sınıftaki hatayı yakaladığı anlamına gelir. "Yanlış pozitif" olarak kabul edebileceğiniz herhangi bir hata fikrini atar ve öngörülen olasılıkların, gerçek sınıfın öngörülen olasılıkları dışında nasıl dağıldığını önemsemez.

Başka bir varsayım, her örneğin tahminleri için . Softmax katmanı bunu otomatik olarak yapar - farklı bir şey kullanırsanız, çıktıları bu kısıtlamayı karşılamak için ölçeklendirmeniz gerekecektir.iyi=1

Soru 1

( ) 0 olması problem değil mi?yilog(yi)

Evet, bu bir sorun olabilir, ancak genellikle pratik değildir. Rastgele başlatılmış bir softmax katmanının 0herhangi bir sınıfta kesin bir sonuç vermesi son derece olası değildir . Ancak bu mümkün, buna izin vermeye değer. İlk olarak, herhangi bir için değerlendirmeyin , çünkü negatif sınıflar her zaman hataya 0 katkıda bulunur. İkincisi, pratik kodda, değeri sayısal stabilite gibi bir değerle sınırlayabilirsiniz - çoğu durumda gerekli değildir, ancak bu mantıklı bir savunma programlamasıdır.log(yi)yi=0log( max( y_predict, 1e-15 ) )

soru 2

Çapraz entropininHy(y):=i(yilog(yi)+(1yi)log(1yi))

Bu formülasyon genellikle iki sınıfı öngören bir çıktısı olan bir ağ için kullanılır (genellikle 1 için pozitif sınıf üyeliği ve 0 çıkış için negatif). Bu durumda yalnızca bir değere sahip olabilir - Buraya toplamı kaybedebilir .ii

Eğer böyle bir ağı iki karşıt çıktısı olacak şekilde değiştirir ve softmax artı ilk logloss tanımını kullanırsanız, bunun aslında aynı hata ölçümü olduğunu ancak iki sınıf için hata ölçüsünü tek bir çıktıya katladığını görebilirsiniz.

Üyeliğini tahmin etmek için birden fazla sınıf varsa ve sınıflar münhasır değilse, örneğin bir örnek aynı anda sınıfların herhangi biri veya tümü olabilirse, bu ikinci formülasyonu kullanmanız gerekecektir. Durum olmayan rakam tanıma için (yazılı bir rakam sadece bir "gerçek" sınıfa sahip olmalıdır)


İkinci formülün sunumunda bazı belirsizlikler mevcuttur Not - bu teoride sadece bir sınıf üstlenebileceğini ve daha sonra örneklerini numaralandırmak olacaktır. i
Neil Slater,

Üzgünüm, bilmek istediğimden farklı bir şey sordum. bir sorun görmüyorum , ancak nedeniyle . Lütfen cevabınızı buna göre ayarlayabilir misiniz? log(yi)=0yi=0log(yi)
Martin Thoma

@NeilSlater, sınıflar birbirini dışlayan değilse, her giriş için çıktı vektörü birden fazla 1 içerebilir, ikinci formülü kullanmalı mıyız?
Medya

1
@Media: Pek değil. Yine de hiyerarşik sınıflandırma gibi şeylere bakmak istiyorsunuz. . .
Neil Slater,

1
@Javi: OP'ın soruda zemin gerçektir, dolayısıyla genellikle 0 veya 1 Öyle SoftMax çıkıştır. Ancak , kayan nokta yuvarlama nedeniyle pratikte sıfıra . Bu aslında olur. yiyiyi
Neil Slater

11

göz önüne alındığında , makine öğrenim yönteminizi , mümkün olduğunca yakın olması için ı optimize etmek istiyorsunuz .ytrueypredictytrue

İlk soru:

Cevabın üstünde ilk formülünüzün, bilgi teorisinde tanımlanan çapraz entropinin arka planı açıklanmıştır.

Bilgi teorisi dışındaki bir görüşe göre:

kendinizi ilk formülün yanlış pozitiflikten cezalandırılmadığını (gerçek yanlıştır ancak modelinizin doğru olduğunu tahmin etmesini), ikincisinin yanlış pozitifliği cezalandırdığını görebilirsiniz. Bu nedenle, ilk formülün veya saniyenin seçimi, ölçümlerinizi etkileyecektir (diğer bir deyişle, modelinizi değerlendirmek için hangi istatistik miktarı kullanmak istiyorsunuz?).

Layman kelimesinde:

Neredeyse tüm iyi insanları arkadaşınız olarak kabul etmek, ancak bazı kötü insanları kabul etmek isteyen arkadaşınız olmak istiyorsanız, ölçüt için ilk formülü kullanın.

Bazı kötü insanları arkadaşın olarak kabul etmeyi kendin cezalandırmak istiyorsan, ama aynı zamanda iyi insanların kabul etme oranın ilk koşuldan düşük olabilir, o zaman ikinci formülü kullan.

Bununla birlikte, çoğumuzun kritik olduğunu ve ikincisini seçmek istediğimizi düşünüyorum (birçok ML paketi çapraz entropinin ne olduğunu varsayar).

İkinci soru:

Her sınıf için örnek başına entropi:

ytruelog(ypredict)

Bütün sınıflar için bütün sınıflar için entropi:

inkKytrue(k)log(ypredict(k))

Böylece, sadece iki sınıf olduğunda (K = 2), ikinci formüle sahip olacaksın.


5

Bu konular, öğretici softmax kullanımı tarafından ele alınmaktadır.

1) softmax'in sıfır olmayan bir çıktı garanti ettiğini doğru söylüyorsunuz, çünkü bu girdiyi açıklıyor. Bu garantiyi vermeyen aktiviteler için (relu gibi), bu sorunu önlemek için her çıktıya çok küçük bir pozitif terim eklemek kolaydır.

2) gelince, açıkça aynı değiller, ama ben verdikleri softmax formülasyonu konuyla ilgileniyor. Softmax kullanmadıysanız, bu, herhangi bir girdi için her sınıf için 1 olduğunu tahmin eden büyük önyargı terimlerini öğrenmenize neden olur. Ancak softmax'ı tüm sınıflar arasında normalleştirdikleri için, doğru sınıfın çıktısını maksimize etmenin tek yolu, yanlış sınıflara göre daha büyük olması.


"softmax'ın sıfır olmayan bir çıktıyı garanti ettiğini haklısın" - teorik olarak bunun böyle olduğunu biliyorum. Gerçekte, (sayısal sorunlar nedeniyle) bunun 0 olacağı olabilir mi?
Martin Thoma

İyi soru. Girişinizin floatınızın hassasiyeti için çok küçük olması durumunda üs üs işlevinin 0.0 çıktısının mükemmel bir şekilde mümkün olduğunu varsayıyorum. Ancak, çoğu uygulamanın sıfır olmayan girişi garanti etmek için küçük pozitif terim eklediğini tahmin ediyorum.
jamesmf

0

( ) 0 olması sorun değil mi?yilog(yi)

Evet, çünkü tanımsızdır, fakat kullanmaktan kaçınılmalıdır .log(0)log(yi+ϵ)

Ne doğru?
(a) veya (b) ?Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) çok sınıflı tahmin için doğrudur (gerçekte çift toplamdır), (b) iki sınıflı tahmin için (a) ile aynıdır. Her ikisi de çapraz entropidir.

Örnek:

Her eğitim verileri varsayalım etiketi vardır ve model tahmin .xici{0,1}ci[0,1]

5 veri noktası için, gerçek etiketi ve model tahmini : cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)} (1),

Vektörleri tanımlar ve olarak yiyi

  • yik:=1 , ise ve , ci=k:=0

  • yik:=p(k|xi) , model tarafından tahmin edilen sınıfına ait olasılığıdır .xik

Örnek (1) notasyonu dönüşür: (yi,yi)

(yi,yi)={([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])} ,

(A) ve (b) nin her ikisi de şöyle hesaplanır:

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

derivasyon:

Birden sınıflar vardır varsayalım için . Eğitim noktası için , , eşdeğerdir; ki bu, pozisyonunda 1 ve diğer yerlerde 0'dır. Ne zaman , biz modelin çıkış istediğiniz Dolayısıyla 1'e yakın olmak, kaybı olarak tanımlanabilir , . Tüm sınıflardaki kayıplar aşağıdaki gibi birleştirilebilir:1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik) .

Tüm , ve diğer tüm sınıfları kaybı olarak devre dışı , örneğin gerçek etiket yani , kayıp olur be:yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim) .

Tüm eğitim noktalarındaki son formül:

Hy(y)=(xi,yi)k=1Kyiklog(yik) .

İkili sınıflandırma için, (gerçek etiketler) var ve (model tahminleri), bu nedenle (a) şu şekilde yeniden yazılabilir:yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

(b) ile aynıdır.

Sınıflar arası çapraz entropi (a) (bir toplama)

Sınıflar arası çapraz entropi (a):

Hy(y)=k=1Kyklog(yk) ,

Bu sürüm sınıflandırma görevi için kullanılamaz. Önceki örnekteki verileri tekrar kullanalım:

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

Ampirik sınıf olasılıkları: ve ,y0=3/5=0.6y1=0.4

Modele göre tahmin edilen sınıf olasılıkları: vey0=3/5=0.6y1=0.4

(a) şu şekilde hesaplanmaktadır: .y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

İki veri noktası ve sınıflandırılmıştır ancak ve doğru tahmin edilmektedir!(0,0.8)(1,0.2)y0y1

5 noktanın tümü doğru olarak sınıflandırıldığında: ,
(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

(a) yine aynı kalır, çünkü , olarak tekrar tahmin edilir .y0y0=3/5

Licensed under cc by-sa 3.0 with attribution required.