Funkcja błędu krzyżowej entropii w sieciach neuronowych

115

W MNIST For ML Beginners określają one jako entropię krzyżową

Hy(y):=iyilog(yi)

jest przewidywana wartość prawdopodobieństwa dla klasy í i y ' i jest prawdziwym prawdopodobieństwo dla tej klasy.yiiyi

Pytanie 1

Nie jest to problem, który (w dzienniku ( y í ) ) może być 0? Oznaczałoby to, że mamy naprawdę zły klasyfikator. Ale pomyśl o błędzie w naszym zestawie danych, np. „Oczywistym” oznaczonym jako . Czy po prostu się zawiesi? Czy wybrany przez nas model (aktywacja softmax na końcu) w zasadzie nigdy nie podaje prawdopodobieństwa 0 dla właściwej klasy?yilog(yi)13

pytanie 2

Nauczyłem się, że entropia krzyżowa jest zdefiniowana jako

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

Co jest poprawne? Czy masz jakieś odniesienia do podręczników dla którejkolwiek wersji? Czym różnią się te funkcje pod względem właściwości (jako funkcje błędów w sieciach neuronowych)?

Martin Thoma
źródło
Zobacz także: stats.stackexchange.com/questions/80967/...
Piotr Migdal
Zobacz także: Kullback-Leibler Divergence Explained post na blogu.
Piotr Migdal

Odpowiedzi:

101

Jednym ze sposobów interpretacji entropii krzyżowej jest postrzeganie jej jako (ujemnego) logarytmu prawdopodobieństwa dla danych yi , zgodnie z modelem yi .

Załóżmy, że masz jakiś ustalony model (inaczej „hipoteza”), który przewiduje dla n klas {1,2,,n} ich hipotetyczne prawdopodobieństwo wystąpienia y1,y2,,yn . Załóżmy, że teraz obserwujesz (w rzeczywistości) k1 instancji klasy 1 , k2 instancji klasy 2 , kn instancji klasy n itd. Według twojego modelu prawdopodobieństwo takiego zdarzenia wynosi:

P[data|model]:=y1k1y2k2ynkn.
Biorąc logarytm i zmieniając znak:
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
Jeśli teraz podzielisz sumę po prawej stronie przez liczbę obserwacjiN=k1+k2++kn i oznacz prawdopodobieństwo empiryczne gdyyi=ki/N , otrzymasz entropię krzyżową:
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

Ponadto prawdopodobieństwo logarytmiczne zbioru danych dla danego modelu można interpretować jako miarę „długości kodowania” - liczby bitów, które spodziewasz się wydać, aby zakodować te informacje, jeśli schemat kodowania byłby oparty na twojej hipotezie.

Jest to zgodne z obserwacją, że zdarzenie niezależne z prawdopodobieństwem yi wymaga co najmniej log2yi bity kodować (zakładając skutecznego kodowania), a tym samym ekspresję

iyilog2yi,
dosłownie oczekiwany długość kodowania, gdzie długości kodowania zdarzeń są obliczane przy użyciu rozkładu „hipotetycznego”, podczas gdy oczekiwanie jest przejmowane przez rzeczywiste.

Wreszcie, zamiast mówić „miara oczekiwanej długości kodowania”, naprawdę lubię używać nieformalnego terminu „miara zaskoczenia”. Jeśli potrzebujesz wielu bitów do zakodowania oczekiwanego zdarzenia z dystrybucji, dystrybucja jest dla ciebie „naprawdę zaskakująca”.

Mając na uwadze te intuicje, odpowiedzi na pytania można zobaczyć w następujący sposób:

  • Pytanie 1 . Tak. Jest to problem, gdy odpowiadające yi jest niezerowe w tym samym czasie . Odpowiada to sytuacji, w której model uważa, że ​​niektóre klasy mają zerowe prawdopodobieństwo wystąpienia, a jednak klasa pojawia się w rzeczywistości. W rezultacie „niespodzianka” twojego modelu jest nieskończenie wielka: twój model nie uwzględnił tego zdarzenia i teraz potrzebuje nieskończenie wielu bitów, aby go zakodować. Właśnie dlatego otrzymujesz nieskończoność jako swoją entropię krzyżową.

    Aby uniknąć tego problemu, musisz upewnić się, że Twój model nie przyjmuje pochopnych założeń, że coś jest niemożliwe, dopóki może się to zdarzyć. W rzeczywistości ludzie używają funkcji sigmoidalnych lub „softmax” jako modeli hipotez, które są wystarczająco zachowawcze, aby pozostawić przynajmniej trochę szansy na każdą opcję.

    Jeśli użyjesz jakiegoś innego modelu hipotezy, to od Ciebie zależy uregulowanie go (inaczej „wygładzenie”), aby nie hipotezowało zer w miejscach, w których nie powinno.

  • Pytanie 2 . W tym wzorze, zwykle przyjmuje się yi być albo 0 albo 1 , a yi prawdopodobieństwo, hipotezę modelu dla odpowiedniego wejścia. Jeśli przyjrzysz się uważnie, zobaczysz, że jest to po prostu logP[data|model] dla danych binarnych, odpowiednik drugiego równania w tej odpowiedzi.

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

KT.
źródło
1
yi=kiN
1
W samouczku MNIST TensorFlow definiują go również w kategoriach wektorów jednogrzanych.
Lenar Hoyt
N=1ki/N
„niezależne wydarzenie wymaga ... zakodowania go” - czy mógłbyś wyjaśnić ten fragment?
Alex
@Alex Może to wymagać dłuższego wyjaśnienia, aby poprawnie zrozumieć - przeczytaj o kodach Shannona-Fano i relacji optymalnego kodowania do równania entropii Shannona. Aby ogłuszyć sprawę, jeśli zdarzenie ma prawdopodobieństwo 1/2, najlepiej postawić kod za pomocą jednego bitu. Jeśli ma prawdopodobieństwo 1/4, powinieneś wydać 2 bity, aby go zakodować itp. Ogólnie, jeśli twój zestaw zdarzeń ma prawdopodobieństwo postaci 1/2 1/2 k, powinieneś dać im długości k - w ten sposób twój kod będzie zbliżyć się do optymalnej długości Shannona.
KT.
22

iyi

Oznacza to, że formuła wychwytuje błąd tylko w klasie docelowej. Odrzuca wszelkie pojęcia błędów, które można uznać za „fałszywie dodatnie”, i nie ma znaczenia, w jaki sposób rozkładane są przewidywane prawdopodobieństwa inne niż przewidywane prawdopodobieństwo prawdziwej klasy.

iyi=1

Pytanie 1

yilog(yi)

0log(yi)yi=0log( max( y_predict, 1e-15 ) )

pytanie 2

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

ii

Jeśli zmodyfikujesz taką sieć, aby mieć dwa przeciwstawne wyjścia i użyjesz softmax plus pierwsza definicja loglossa, wtedy zobaczysz, że w rzeczywistości jest to ten sam pomiar błędu, ale składany wskaźnik błędu dla dwóch klas w jedno wyjście.

Jeśli istnieje więcej niż jedna klasa do przewidzenia przynależności, a klasy niewyłączne, tj. Przykładem może być jedna lub wszystkie klasy w tym samym czasie, wówczas będziesz musiał użyć tego drugiego sformułowania. W przypadku rozpoznawania cyfr nie ma to miejsca (cyfra pisana powinna mieć tylko jedną „prawdziwą” klasę)

Neil Slater
źródło
i
log(yi)=0yi=0log(yi)
@NeilSlater, jeśli klasy nie wykluczają się wzajemnie, wektor wyjściowy dla każdego wejścia może zawierać więcej niż jeden 1, czy powinniśmy użyć drugiej formuły?
Media
1
@Media: Niezupełnie. Chcesz jednak patrzeć na takie rzeczy, jak hierarchiczna klasyfikacja. . .
Neil Slater
1
yiyiyi
11

ytrueypredictytrue

Pierwsze pytanie:

Powyższa odpowiedź wyjaśniła tło twojej pierwszej formuły, entropię krzyżową zdefiniowaną w teorii informacji.

Z opinii innej niż teoria informacji:

możesz sprawdzić, czy pierwsza formuła nie ma kary za fałszywą pozytywność (prawda jest fałszywa, ale twój model przewiduje, że ma rację), podczas gdy druga ma karę za fałszywą pozytywność. Dlatego wybór pierwszej formuły lub drugiej wpłynie na twoje metryki (czyli także, jakiej wielkości statystycznej chcesz użyć do oceny modelu).

Jednym słowem:

Jeśli chcesz zaakceptować prawie wszystkich dobrych ludzi jako przyjaciół, ale chcesz zaakceptować, że niektórzy źli ludzie staną się Twoimi przyjaciółmi, użyj pierwszej formuły jako kryterium.

Jeśli chcesz ukarać siebie za akceptowanie złych ludzi na swoich przyjaciół, ale jednocześnie wskaźnik dobrych ludzi akceptujących może być niższy niż pierwszy warunek, użyj drugiej formuły.

Chociaż wydaje mi się, że większość z nas jest krytyczna i chciałaby wybrać drugą (tak wiele pakietów ML zakłada, że ​​jest to entropia krzyżowa).

Drugie Pytanie:

ytruelog(ypredict)

inkKytrue(k)log(ypredict(k))

Zatem, gdy są tylko dwie klasy (K = 2), będziesz miał drugą formułę.

Sztuczna inteligencja
źródło
5

Te problemy rozwiązuje użycie softmax w tutorialu.

Dla 1) masz rację, że softmax gwarantuje niezerowe wyjście, ponieważ potęguje jego wejście. W przypadku aktywacji, które nie dają tej gwarancji (jak relu), wystarczy dodać bardzo mały dodatni termin do każdego wyjścia, aby uniknąć tego problemu.

Jeśli chodzi o 2), nie są one oczywiście takie same, ale ja załatwiona przeze mnie formuła softmax zajmuje się tym problemem. Jeśli nie użyjesz softmax, spowoduje to, że nauczysz się ogromnych terminów stronniczości, które odgadują 1 dla każdej klasy dla dowolnego wkładu. Ale ponieważ znormalizują softmax we wszystkich klasach, jedynym sposobem na maksymalizację wyniku prawidłowej klasy jest to, aby była ona duża w stosunku do niepoprawnych klas.

jamesmf
źródło
„masz rację, że softmax gwarantuje niezerowe wyjście” - wiem, że tak jest teoretycznie. Czy w rzeczywistości może się zdarzyć, że (z powodu problemów numerycznych) będzie to 0?
Martin Thoma,
Dobre pytanie. Zakładam, że jest całkowicie możliwe, aby funkcja wykładnicza generowała wartość 0,0, jeśli dane wejściowe są zbyt małe, aby uzyskać precyzję liczby zmiennoprzecinkowej. Jednak sądzę, że większość implementacji dodaje niewielki dodatni termin, aby zagwarantować niezerowe dane wejściowe.
jamesmf,
0

yilog(yi)

log(0)log(yi+ϵ)


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

(a) jest poprawne w przypadku prognoz wieloklasowych (w rzeczywistości jest to podwójne sumowanie), (b) jest takie samo jak (a) w przypadku prognoz dwuklasowych. Oba są entropijne.

Przykład:

xici{0,1}ci[0,1]

cici

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

yiyi

  • yik:=1ci=k:=0

  • yik:=p(k|xi)xik

(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])}

Zarówno (a), jak i (b) oblicza się jako:

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

Pochodzenie:

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)

yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim)

Ostateczna formuła obejmująca wszystkie punkty treningowe to:

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

yi0=1yi1yi0=1yi1

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

który jest taki sam jak (b).

Entropia krzyżowa (a) ponad klasami (jedno sumowanie)

Cross-entropia (a) ponad klasami to:

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

Ta wersja nie może być używana do zadania klasyfikacji. Pozwala ponownie wykorzystać dane z poprzedniego przykładu:

(ci,ci)={(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

y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

(0,0.8)(1,0.2)y0y1


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

y0y0=3/5

E-mail
źródło