Neuronale Netze - Verlust- und Genauigkeitskorrelation

11

Ich bin etwas verwirrt über die Koexistenz von Verlust- und Genauigkeitsmetriken in neuronalen Netzen. Beide sollen die „Genauigkeit“ des Vergleichs machen y und y , nicht wahr? Ist die Anwendung der beiden in den Trainingsepochen nicht überflüssig? Warum korrelieren sie nicht?y^

Hendrik
quelle

Antworten:

9

Der Protokollverlust hat die nette Eigenschaft, dass es sich um eine differenzierbare Funktion handelt. Die Genauigkeit ist möglicherweise wichtiger und definitiv interpretierbarer, kann jedoch aufgrund des Backpropagation-Algorithmus, bei dem die Verlustfunktion differenzierbar sein muss, nicht direkt für das Training des Netzwerks verwendet werden. Wenn Ihr bevorzugter Verlust nicht direkt optimierbar ist (wie die Genauigkeit), verwenden Sie eine Verlustfunktion, die sich ähnlich verhält wie der Proxy der wahren Metrik. Im Falle einer binären Klassifizierung würden Sie am Ende ein Sigmoid und einen Protokollverlust verwenden, um die Genauigkeit zu approximieren. Sie sind stark korreliert.

Jan van der Vegt
quelle
6

Verlust ist allgemeiner als Genauigkeit. Bei der Klassifizierung können Sie eine Genauigkeit von 100% erreichen, bei der alle Beschriftungen korrekt vorhergesagt werden. Aber was ist mit Regression oder Prognose? Es gibt keine Definition von 0% und 100%

|yhaty|

rilut
quelle
0

Ja, beide messen die Genauigkeit von y und y_hat und ja, sie sind normalerweise korreliert. Manchmal ist die Verlustfunktion möglicherweise nicht genau, aber Sie sind immer noch daran interessiert, die Genauigkeit zu messen, obwohl Sie sie nicht direkt optimieren. Das TensorFlow MNIST-Beispiel von Google minimiert / optimiert den Kreuzentropieverlust, zeigt dem Benutzer jedoch die Genauigkeit an, wenn Ergebnisse gemeldet werden. Dies ist völlig in Ordnung.

Manchmal möchten Sie die Genauigkeit nicht direkt optimieren. Wenn Sie beispielsweise ein schwerwiegendes Klassenungleichgewicht haben, maximiert Ihr Modell die Genauigkeit, indem Sie einfach immer die häufigste Klasse auswählen. Dies wäre jedoch kein nützliches Modell. In diesem Fall wäre Entropie / Log-Verlust eine bessere Verlustfunktion zur Optimierung.

Ryan Zotti
quelle
7
Noch wichtiger ist, dass Genauigkeit keine differenzierbare Funktion ist, sodass Sie sie nicht durchsetzen können.
Jan van der Vegt
@ JanvanderVegt Ja, das ist ein großartiger Punkt
Ryan Zotti
Ich habe gelernt, dass ich in Keras eine "benutzerdefinierte" Bewertungsmetrik (in diesem Fall bedeutet benutzerdefiniert, dass in Keras keine integrierte Implementierung wie AUC oder F1-Score vorhanden ist) in die Kompilierungsfunktion einfügen kann. Ich gehe davon aus, dass in diesem Fall diese "benutzerdefinierten" Metriken anstelle von Genauigkeit überall dort verwendet / angezeigt werden, wo der show_accuracyParameter auf True gesetzt ist (wie bei der Anpassung oder bei der Auswertung). Ist das korrekt?
Hendrik
1
@ Hendrik ja du kannst, erstelle einfach eine def your_own_metric(y_true, y_pred)Funktion und übergebe sie anmodel.compile(..., metrics=[your_own_metric])
rilut