Verlustfunktion für Autoencoder

19

Ich experimentiere ein bisschen mit Autoencodern und habe mit Tensorflow ein Modell erstellt, das versucht, den MNIST-Datensatz zu rekonstruieren.

Mein Netzwerk ist sehr einfach: X, e1, e2, d1, Y, wobei e1 und e2 Codierschichten sind, d2 und Y Decodierschichten sind (und Y die rekonstruierte Ausgabe ist).

X hat 784 Einheiten, e1 hat 100, e2 hat 50, d1 hat wieder 100 und Y 784 wieder.

Ich verwende Sigmoide als Aktivierungsfunktionen für die Ebenen e1, e2, d1 und Y. Die Eingänge befinden sich in [0,1] und sollten auch die Ausgänge sein.

Nun, ich habe versucht, die Kreuzentropie als Verlustfunktion zu verwenden, aber die Ausgabe war immer ein Blob, und ich bemerkte, dass die Gewichte von X bis e1 immer zu einer Matrix mit dem Wert Null konvergieren würden.

Andererseits würde die Verwendung von mittleren quadratischen Fehlern als Verlustfunktion ein anständiges Ergebnis ergeben, und ich kann jetzt die Eingaben rekonstruieren.

Warum ist das so? Ich dachte, ich könnte die Werte als Wahrscheinlichkeiten interpretieren und daher Kreuzentropie verwenden, aber offensichtlich mache ich etwas falsch.

AkiRoss
quelle
1
Sie erwähnten die Verwendung von Sigmoid für die Aktivierungsfunktionen in den ersten Schichten. Diese weisen eine "Sättigung" auf, wie in den Anmerkungen zu CS231n ausführlicher erläutert wird . Haben Sie eine andere Aktivierungsfunktion wie ReLUs ausprobiert?
Jerry
Ich kann mich momentan nicht erinnern, ob ich es mit anderen versucht habe, aber danke fürs Teilen!
AkiRoss

Antworten:

17

Ich denke, die beste Antwort darauf ist, dass die Cross-Entropy-Loss-Funktion für diese spezielle Aufgabe einfach nicht gut geeignet ist.

Mit diesem Ansatz sagen Sie im Wesentlichen, dass die wahren MNIST-Daten binär sind und dass Ihre Pixelintensitäten die Wahrscheinlichkeit darstellen, dass jedes Pixel eingeschaltet ist. Wir wissen jedoch, dass dies nicht der Fall ist. Die Unrichtigkeit dieser impliziten Annahme führt dann zu Problemen.

Wir können uns auch die Kostenfunktion ansehen und herausfinden, warum sie möglicherweise unangemessen ist. Angenommen, unser Zielpixelwert ist 0,8. Zeichnen wir den MSE-Verlust und den Kreuzentropie-Verlust (normalisiert dies so, dass das Minimum Null ist), erhalten wir:-[(Ziel)Log(Prognose)+(1-Ziel)Log(1-Prognose)]

Cross-Entropie vs. MSE-Verlust

Wir können sehen, dass der Kreuzentropieverlust asymmetrisch ist. Warum sollten wir das wollen? Ist es wirklich schlimmer, 0,9 für dieses 0,8-Pixel vorherzusagen als 0,7? Ich würde sagen, es ist vielleicht besser, wenn überhaupt.

Wir könnten wahrscheinlich detaillierter darauf eingehen und herausfinden, warum dies zu den spezifischen Flecken führt, die Sie sehen. Ich würde eine Vermutung wagen, dass dies daran liegt, dass die Pixelintensität in der Region, in der Sie den Blob sehen, im Durchschnitt über 0,5 liegt. Im Allgemeinen ist dies jedoch ein Fall von impliziten Modellierungsannahmen, die Sie für die Daten als unangemessen eingestuft haben.

Ich hoffe, das hilft!

nlml
quelle
3
wo Welche Verlustfunktion ist geeignet, wenn der Eingang zwischen 0 und 1 liegt?
Jemshit Iskenderov
Binary Cross Entropy Loss
Torayeff