Die Cross-Entropy-Error-Funktion in neuronalen Netzen


115

In der MNIST für ML-Anfänger definieren sie Kreuzentropie als

Hy(y):=iyilog(yi)

i y ' iyi ist der vorhergesagte Wahrscheinlichkeitswert für die Klasse und ist die wahre Wahrscheinlichkeit für diese Klasse.iyi

Frage 1

Ist es nicht ein Problem, dass (in ) 0 sein könnte? Das würde natürlich bedeuten, dass wir einen wirklich schlechten Klassifikator haben. Aber denken Sie an einen Fehler in unserem Datensatz, zB ein „offensichtlich“ markiert , wie . Würde es einfach abstürzen? Gibt das gewählte Modell (Softmax-Aktivierung am Ende) grundsätzlich nie die Wahrscheinlichkeit 0 für die richtige Klasse an? melde mich ( y ich )yilog(yi)13

Frage 2

Ich habe gelernt, dass Kreuzentropie definiert ist als

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

Was ist korrekt? Haben Sie Lehrbuchreferenzen für beide Versionen? Wie unterscheiden sich diese Funktionen in ihren Eigenschaften (als Fehlerfunktionen für neuronale Netze)?



Antworten:


101

Eine Möglichkeit, die Kreuzentropie zu interpretieren, besteht darin, sie als (Minus-) Log-Wahrscheinlichkeit für die Daten unter einem Modell .yiyi

Angenommen, Sie haben ein festes Modell (auch "Hypothese" genannt), das für Klassen ihre hypothetischen Auftrittswahrscheinlichkeiten vorhersagt . Angenommen, Sie beobachten jetzt (in Wirklichkeit) Instanzen der Klasse , Instanzen der Klasse , Instanzen der Klasse usw. Nach Ihrem Modell ist die Wahrscheinlichkeit, dass dies geschieht, wie folgt: Nehmen Sie den Logarithmus und ändern Sie das Vorzeichen: n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
N = k 1 + k 2 + + k n y ' i = k i Wenn Sie nun die rechte Summe durch die Anzahl der Beobachtungen und die empirischen Wahrscheinlichkeiten mit , erhalten Sie die Kreuzentropie: N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

Darüber hinaus kann die Protokollwahrscheinlichkeit eines Datensatzes für ein gegebenes Modell als Maß für die "Codierungslänge" interpretiert werden - die Anzahl der Bits, die Sie zum Codieren dieser Informationen benötigen, wenn Ihr Codierungsschema auf Ihrer Hypothese basieren würde.

Dies folgt aus der Beobachtung, dass ein unabhängiges Ereignis mit der Wahrscheinlichkeit mindestens Bits benötigt, um es zu codieren (unter der Annahme einer effizienten Codierung), und folglich ist der Ausdruck buchstäblich die erwartete Länge der Codierung , wobei die Codierungslängen für die Ereignisse unter Verwendung der "hypothetischen" Verteilung berechnet werden, während die Erwartung die tatsächliche übernimmt.yilog2yi

iyilog2yi,

Anstatt "Maß für die erwartete Codierungslänge" zu sagen, verwende ich am liebsten den informellen Begriff "Maß für die Überraschung". Wenn Sie viele Bits benötigen, um ein erwartetes Ereignis aus einer Distribution zu codieren, ist die Distribution für Sie "wirklich überraschend".

Unter Berücksichtigung dieser Intuitionen können die Antworten auf Ihre Fragen wie folgt angezeigt werden:

  • Frage 1 . Ja. Es ist ein Problem, wenn das entsprechende ungleich Null istyi . Dies entspricht der Situation, in der Ihr Modell davon ausgeht, dass bei einer Klasse die Eintrittswahrscheinlichkeit Null ist, die Klasse jedoch in der Realität auftaucht. Infolgedessen ist die "Überraschung" Ihres Modells unendlich groß: Ihr Modell hat dieses Ereignis nicht berücksichtigt und benötigt nun unendlich viele Bits, um es zu codieren. Deshalb erhalten Sie Unendlich als Ihre Kreuzentropie.

    Um dieses Problem zu vermeiden, müssen Sie sicherstellen, dass Ihr Modell keine vorschnellen Annahmen darüber macht, dass etwas unmöglich ist, solange es passieren kann. In der Realität tendieren Menschen dazu, Sigmoid- oder "Softmax" -Funktionen als ihre Hypothesenmodelle zu verwenden, die konservativ genug sind, um für jede Option zumindest eine Chance zu lassen.

    Wenn Sie ein anderes Hypothesenmodell verwenden, müssen Sie es regulieren (auch als "glatt" bezeichnet), damit es keine Nullen hypothetisch darstellt, bei denen dies nicht der Fall sein sollte.

  • Frage 2 . In dieser Formel nimmt man normalerweise an, dass entweder oder , während die Wahrscheinlichkeitshypothese des Modells für die entsprechende Eingabe ist. Wenn Sie genau hinsehen, werden Sie feststellen, dass es sich lediglich um ein für Binärdaten handelt, ein Äquivalent der zweiten Gleichung in dieser Antwort.yi01yilogP[data|model]

    Streng genommen ist dies also, obwohl es immer noch eine logarithmische Wahrscheinlichkeit ist, nicht syntaktisch äquivalent zu Kreuzentropie. Einige Leute meinen, wenn sie einen solchen Ausdruck als Kreuzentropie bezeichnen, dass es sich tatsächlich um eine Summe über binäre Kreuzentropien für einzelne Punkte im Datensatz handelt: wobei und muss als die entsprechenden Binärverteilungen und interpretiert werden .

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


1
Können Sie eine Quelle , in der ? Hier definieren sie es als One-Hot-Distribution für das aktuelle Klassenlabel. Was ist der Unterschied? yi=kiN
Lenar Hoyt

1
Im MNIST TensorFlow-Tutorial definieren sie es auch in Bezug auf One-Hot-Vektoren.
Lenar Hoyt

@LenarHoyt Wenn , wäre k i / N gleich eins heiß. Sie können sich One-Hot als die Kodierung eines Elements aufgrund seiner empirischen (realen) kategorialen Wahrscheinlichkeit vorstellen. N=1ki/N
Donnerstag,

'Independent Event erfordert ... um es zu kodieren' - könntest du dieses Bit bitte erklären?
Alex

@Alex Möglicherweise ist eine längere Erklärung erforderlich, um die Shannon-Fano-Codes und die Beziehung der optimalen Codierung zur Shannon-Entropie-Gleichung richtig zu verstehen. Wenn ein Ereignis die Wahrscheinlichkeit 1/2 hat, ist es die beste Wahl, es mit einem einzelnen Bit zu codieren. Wenn es eine Wahrscheinlichkeit von 1/4 hat, sollten Sie 2 Bits für die Codierung usw. ausgeben. Wenn Ihre Ereignismenge Wahrscheinlichkeiten der Form 1/2 ^ k hat, sollten Sie ihnen die Länge k geben - auf diese Weise wird Ihr Code Annäherung an die Shannon optimale Länge.
KT.

22

iyi

Das heißt, die Formel erfasst nur Fehler in der Zielklasse. Dabei wird jede Vorstellung von Fehlern verworfen, die Sie als "falsch positiv" betrachten könnten, und es spielt keine Rolle, wie die vorhergesagten Wahrscheinlichkeiten verteilt sind, außer der vorhergesagten Wahrscheinlichkeit der wahren Klasse.

iyi=1

Frage 1

yilog(yi)

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

Frage 2

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

ii

Wenn Sie ein solches Netzwerk so modifizieren, dass es zwei entgegengesetzte Ausgaben hat und Softmax plus die erste Logloss-Definition verwenden, können Sie sehen, dass es sich tatsächlich um die gleiche Fehlermessung handelt, aber die Fehlermetrik für zwei Klassen in eine einzige Ausgabe faltet.

Wenn es mehr als eine Klasse gibt, deren Zugehörigkeit vorhergesagt werden kann, und die Klassen nicht exklusiv sind, dh ein Beispiel könnte eine oder alle Klassen gleichzeitig sein, müssen Sie diese zweite Formulierung verwenden. Für die Ziffernerkennung ist das nicht der Fall (eine geschriebene Ziffer sollte nur eine "wahre" Klasse haben)


Beachten Sie, dass die Darstellung der zweiten Formel mehrdeutig ist - theoretisch könnte nur eine Klasse angenommen werden, und würde dann die Beispiele aufzählen. i
Neil Slater

Es tut mir leid, ich habe etwas anderes gefragt, als ich wissen wollte. Ich sehe kein Problem in , aber in , wegen . Könnten Sie bitte Ihre Antwort darauf anpassen? y i = 0 log ( y i )log(yi)=0yi=0log(yi)
Martin Thoma

@NeilSlater Wenn sich die Klassen nicht gegenseitig ausschließen, kann der Ausgabevektor für jede Eingabe mehr als eine 1 enthalten. Sollten wir die zweite Formel verwenden?
Medien

1
@Media: Nicht wirklich. Sie möchten sich aber mit Dingen wie der hierarchischen Klassifizierung befassen. . .
Neil Slater

1
@Javi: In der Frage des OP ist die Grundwahrheit, also normalerweise 0 oder 1. Es ist , das der Softmax-Ausgang ist. In der Praxis kann jedoch aufgrund von Gleitkomma-Rundungen zu Null werden. Das passiert tatsächlich. y i y iyiyiyi
Neil Slater

11

ytrueypredictytrue

Erste Frage:

Die obige Antwort hat den Hintergrund Ihrer ersten Formel erklärt, die in der Informationstheorie definierte Kreuzentropie.

Aus einer anderen Sicht als der Informationstheorie:

Sie können sich selbst davon überzeugen, dass die erste Formel keine Strafe für die Falsch-Positivität hat (die Wahrheit ist falsch, aber Ihr Modell sagt voraus, dass sie richtig ist), während die zweite Formel eine Strafe für die Falsch-Positivität hat. Daher wirkt sich die Wahl der ersten oder zweiten Formel auf Ihre Metriken aus (auch bekannt als die statistische Größe, die Sie zur Bewertung Ihres Modells verwenden möchten).

Im Laienwort:

Wenn Sie akzeptieren möchten, dass fast alle guten Menschen Ihr Freund sind, aber bereit sind, einige schlechte Menschen als Freund zu akzeptieren, verwenden Sie die erste Formel als Kriterium.

Wenn Sie sich selbst bestrafen möchten, indem Sie einige schlechte Menschen als Freund akzeptieren, gleichzeitig aber die Akzeptanzrate für gute Menschen unter der ersten Bedingung liegt, verwenden Sie die zweite Formel.

Ich denke, die meisten von uns sind kritisch und würden gerne die zweite wählen (so wie viele ML-Pakete annehmen, was Kreuzentropie ist).

Zweite Frage:

ytruelog(ypredict)

inkKytrue(k)log(ypredict(k))

Wenn es also nur zwei Klassen gibt (K = 2), haben Sie die zweite Formel.


5

Diese Probleme werden durch die Verwendung von Softmax im Lernprogramm behoben.

Zu 1) Sie haben Recht, dass softmax eine Ausgabe ungleich Null garantiert, da es die Eingabe potenziert. Bei Aktivierungen, bei denen diese Garantie nicht gegeben ist (z. B. relu), kann jeder Ausgabe einfach ein sehr kleiner positiver Term hinzugefügt werden, um dieses Problem zu vermeiden.

Was 2) betrifft, sind sie offensichtlich nicht die gleichen, aber ich habe die Softmax-Formulierung, die sie gegeben haben, verwendet, um das Problem zu lösen. Wenn Sie Softmax nicht verwenden, werden Sie zu großen Verzerrungsfaktoren veranlasst, die für jede Klasse eine 1 für jede Eingabe erraten. Da sie jedoch den Softmax über alle Klassen hinweg normalisieren, besteht die einzige Möglichkeit, die Ausgabe der richtigen Klasse zu maximieren, darin, dass sie relativ zu den falschen Klassen groß ist.


"Sie haben Recht, dass softmax eine Ausgabe ungleich Null garantiert" - ich weiß, dass dies theoretisch der Fall ist. Kann es in der Realität passieren, dass (aufgrund numerischer Probleme) dies zu 0 wird?
Martin Thoma

Gute Frage. Ich gehe davon aus, dass es durchaus möglich ist, dass die Exponentiationsfunktion 0.0 ausgibt, wenn Ihre Eingabe für die Genauigkeit Ihres Floats zu klein ist. Ich würde jedoch vermuten, dass die meisten Implementierungen den winzigen positiven Term hinzufügen, um eine Eingabe ungleich Null zu gewährleisten.
Jamesmf

0

yilog(yi)

log(0)log(yi+ϵ)


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

(a) ist für die Mehrklassenvorhersage korrekt (es ist tatsächlich eine Doppelsummierung), (b) ist dasselbe wie (a) für die Zweiklassenvorhersage. Beide sind Kreuzentropie.

Beispiel:

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

Sowohl (a) als auch (b) werden wie folgt berechnet:

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

Ableitung:

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)

Die endgültige Formel für alle Trainingspunkte lautet:

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)

das ist das gleiche wie (b).

Kreuzentropie (a) über Klassen (eine Summe)

Cross-Entropie (a) über Klassen ist:

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

Diese Version kann nicht für die Klassifizierungsaufgabe verwendet werden. Lasst uns die Daten aus dem vorherigen Beispiel wiederverwenden:

(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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.