Ich versuche, ein neuronales Netzwerk für die Klassifizierung zu trainieren, aber die Beschriftungen, die ich habe, sind ziemlich laut (ungefähr 30% der Beschriftungen sind falsch).
Der Kreuzentropieverlust funktioniert zwar, aber ich habe mich gefragt, ob es in diesem Fall Alternativen gibt, die effektiver sind. oder ist der Kreuzentropieverlust das Optimum?
Ich bin mir nicht sicher, aber ich denke darüber nach, den Kreuzentropieverlust etwas zu "beschneiden", so dass der Verlust für einen Datenpunkt nicht größer als eine Obergrenze ist. Funktioniert das?
Vielen Dank!
Update
Nach Lucas 'Antwort habe ich für die Ableitungen für die Vorhersageausgabe und die Eingabe der Softmax-Funktion Folgendes erhalten . Ich denke also, dass es im Wesentlichen einen Glättungsterm zu den Ableitungen hinzufügt .
Ableitungen für den ursprünglichen Kreuzentropieverlust:
Update
Ich habe gerade einen Artikel von Google gelesen , der dieselbe Formel wie in Lucas 'Antwort verwendet, jedoch unterschiedliche Interpretationen aufweist.
In Abschnitt 7 Modellregularisierung über Label Smoothing
Dies (der Kreuzentropieverlust) kann jedoch zwei Probleme verursachen. Erstens kann dies zu einer Überanpassung führen: Wenn das Modell lernt, dem Groundtruth-Label für jedes Trainingsbeispiel die volle Wahrscheinlichkeit zuzuweisen, kann keine Verallgemeinerung garantiert werden. Zweitens werden die Unterschiede zwischen dem größten Logit und allen anderen groß, und dies verringert in Kombination mit dem begrenzten Gradienten die Anpassungsfähigkeit des Modells. Intuitiv geschieht dies, weil das Modell hinsichtlich seiner Vorhersagen zu sicher wird.
Aber anstatt den Vorhersagen den Glättungsbegriff hinzuzufügen, fügten sie ihn der Grundwahrheit hinzu , was sich als hilfreich herausstellte.
In unseren ImageNet-Experimenten mit K = 1000 Klassen haben wir u (k) = 1/1000 und = 0,1 verwendet. Für ILSVRC 2012 haben wir eine konsistente Verbesserung von etwa 0,2% absolut sowohl für den Top-1-Fehler als auch für den Top-5-Fehler festgestellt.
Antworten:
Das Richtige hier ist, das Modell zu ändern, nicht den Verlust. Ihr Ziel ist es immer noch, so viele Datenpunkte wie möglich korrekt zu klassifizieren (was den Verlust bestimmt), aber Ihre Annahmen über die Daten haben sich geändert (die in einem statistischen Modell , in diesem Fall dem neuronalen Netzwerk, codiert sind ).
Sei ein Vektor von Klassenwahrscheinlichkeiten, die vom neuronalen Netzwerk erzeugt werden, und der Kreuzentropieverlust für das Label . Um explizit die Annahme zu berücksichtigen, dass 30% der Etiketten Rauschen sind (als gleichmäßig zufällig angenommen), könnten wir unser Modell ändern, um es zu produzierenpt ℓ(yt,pt) yt
stattdessen und optimieren
Dabei ist die Anzahl der Klassen. Dies wird sich tatsächlich etwas entsprechend Ihrer Intuition verhalten und den Verlust auf endlich begrenzen.N
quelle
Ich erkenne, dass dies ein Statistikforum ist und die Erwartung einen Schwerpunkt auf mathematische Ableitungen legt. Wenn dies jedoch hilfreich sein kann und Sie Python verwenden, gibt es ein Paket zur Klassifizierung mit verrauschten Bezeichnungen mit dem Namen
cleanlab
: https://github.com/ cgnorthcutt / cleanlab / .Das
cleanlab
Python-Paket,pip install cleanlab
für das ich Autor bin, findet Beschriftungsfehler in Datensätzen und unterstützt die Klassifizierung / das Lernen mit verrauschten Beschriftungen. Es funktioniert mit Scikit-Learn, PyTorch, Tensorflow, FastText usw.Zum Lernen mit lauten Etiketten.
So finden Sie Beschriftungsfehler in Ihrem Datensatz.
Einige Beispiele mit FastText (NLP) und PyTorch (MNIST AlexNet).
Dokumentation: https://l7.curtisnorthcutt.com/cleanlab-python-package
quelle