Wie kann Unsicherheit in die Vorhersage eines neuronalen Netzwerks übertragen werden?

8

Ich habe Eingaben , die Unsicherheiten gekannt haben . Ich benutze sie, um die Ausgaben in einem trainierten neuronalen Netzwerk vorherzusagen . Wie kann ich 1 Unsicherheiten bei meinen Vorhersagen erhalten?x1xn1σϵ1ϵny1ymσ

Meine Idee ist es, jeden Eingang zufällig mit normalem Rauschen mit dem Mittelwert 0 und der Standardabweichung mehrmals zu stören (z. B. 10000) und dann den Median und die Standardabweichung jeder Vorhersage . Funktioniert das?xiϵiyi

Ich befürchte, dass dies nur den "zufälligen" Fehler (aus den Messungen) und nicht den "systematischen" Fehler (aus dem Netzwerk) berücksichtigt, dh jede Vorhersage weist von Natur aus einen Fehler auf, der bei diesem Ansatz nicht berücksichtigt wird. Wie kann ich Fehlerbalken für meine Vorhersagen richtig erhalten ?1σ

Rhombidodekaeder
quelle
Siehe auch
naught101
Vielleicht können Sie eine fehler-dedizierte Bibliothek wie 'Fehler' auf R ausprobieren. Soweit ich weiß, fügt sie vektorisierten Daten ein Attribut hinzu (bitte korrigieren mich R-Liebhaber, wenn ich falsch liege), und möglicherweise wird es an die Ausgabe weitergegeben. cran.r-project.org/package=errors Viel Glück!
SantiagoRodriguez
Was meinst du mit "systematischem" Fehler (aus dem Netzwerk) ? Es gibt also keinen systematischen Fehler bei den Messungen? Meinen Sie einen vom Netzwerk verursachten Fehler, da er selbst nicht perfekt ist?
Mayou36
@ Mayou36 Ja, letzteres. Angenommen, die Kreuzvalidierung zeigt, dass die Vorhersagen im Durchschnitt eine Genauigkeit von 95% haben. Wir wissen daher, dass das Netzwerk nicht perfekt ist. Normalerweise geben Sie beim Messen nicht nur die Messung an, sondern auch die Unsicherheit der Messung. Wie erhält man die Unsicherheit einer Vorhersage aus einem neuronalen Netzwerk?
Rhombidodekaeder
Die Daten zu "stören" bedeutet wahrscheinlich, Beobachtungen aus einer bestimmten Verteilung zu generieren, oder? Ich denke, der Fehler hängt stark davon ab, aus welcher Verteilung Sie simulieren möchten. Wenn Sie ein einfaches neuronales MLP-Netzwerk erstellen, warum nicht einfach ein Bayes'sches neuronales Netzwerk aufbauen und glaubwürdige Intervalle für die Vorhersagen erhalten? PyMC3 hat ein Notizbuch, um genau dies zu tun.
Demetri Pananos

Antworten:

2

Ich persönlich bevorzuge den Monte-Carlo-Ansatz wegen seiner Leichtigkeit. Es gibt Alternativen (z. B. die nicht parfümierte Transformation), aber diese sind sicherlich voreingenommen.

Lassen Sie mich Ihr Problem ein wenig formalisieren. Sie verwenden ein neuronales Netzwerk, um eine bedingte Wahrscheinlichkeitsverteilung über die Ausgänge zu implementieren, die Eingänge angeben , wobei die Gewichte in gesammelt werden :yxθ

pθ(y  x).

Lassen Sie uns nicht darauf achten, wie Sie die Gewichte wahrscheinlich eine Art Backprop - und behandeln Sie dies einfach als eine Black Box, die uns übergeben wurde.θ

Als zusätzliche Eigenschaft Ihres Problems nehmen Sie an, dass Sie nur Zugriff auf eine "verrauschte Version" der tatsächlichen Eingabe , wobei mit nach einer gewissen Verteilung, zB Gauß. Beachten Sie, dass Sie dann schreiben können, wobeiWas Sie dann wollen, ist die Verteilung dh die Verteilung über die Ausgänge angesichts des verrauschten Eingangs und eines Modells sauberer Eingänge zu Ausgängen.x~x

x~=x+ϵ
ϵ
p(x~x)=N(x~|x,σϵ2)
ϵN(0,σϵ2).
p(yx~)=p(yx)p(xx~)dx,

Wenn Sie nun invertieren können , um (was Sie im Fall einer Gaußschen Zufallsvariablen und anderer können), können Sie die approximieren oben mit einfacher Monte-Carlo-Integration durch Stichproben:p(x~x)p(xx~)

p(yx~)ip(yxi),xip(xx~).

Beachten Sie, dass dies auch verwendet werden kann, um alle anderen Arten von Erwartungen an Funktionen von zu berechnen :fy

f(x~)if(yi),xip(xx~),yip(yxi).

Ohne weitere Annahmen gibt es nur voreingenommene Näherungen.

bayerj
quelle
0

Dies hängt davon ab, welche Art von Fehler Sie ermitteln möchten.

Trainingsdaten vs. Anwenden von Datenunterschieden

Eine Technik, die verwendet wird, um die Fehler in den Vorhersagen abzuschätzen, besteht darin, mehrere Algorithmen unter Verwendung verschiedener zufälliger Startwerte zu trainieren. Bei den meisten Algorithmen führt dies zu unterschiedlichen Vorhersagen: Die Abweichung kann zu einer Schätzung führen.

Klassifizierungsspezifisch

Um den Klassifizierungsfehler zu bestimmen, gibt es ungefähr zwei Methoden:

Ereignis für Ereignis :
Sie können einfach die Vorhersagen betrachten, (zum Beispiel) Bins erstellen und Label 1 durch Label 0 teilen. Da 100 Ereignisse von Label 1 mit einer Vorhersage zwischen 0,6-0,65 und 50 mit Label 0 mit einer Vorhersage in der Der gleiche Bereich ergibt einfach eine 2/3 Chance für ein Ereignis der Klasse 1. Mit anderen Worten, mit einer Änderung von 1/3 sind Ihre Ereignisse in diesem Bin nicht Klasse 1.

Totale Effizienz :
Dieser Ansatz ist derjenige, der verwendet werden muss, wenn er zu Ihrem Fall passt. Er ist spezifischer. Sie bestimmen zunächst, wo Sie Ihren Schnitt anwenden (dh: Wie hoch ist der Schwellenwert für die Vorhersagen für ein Ereignis der Klasse 1 oder 0; dies ist normalerweise nicht 0,5, sondern eine optimierte Gütezahl). Angenommen, Sie schneiden auf 0,9 (also <0,9 -> Klasse 0, sonst Klasse 1). Dann können Sie zählen:

  • Wie viele Ereignisse der Klasse 1 gehen verloren (niedriger als 0,9)?
  • Wie viele Ereignisse der Klasse 0 befinden sich noch in der Stichprobe?

Dies gibt Ihnen eine Schätzung des Fehlers in der Ausgabe Ihres Klassifikators.

Regressionsspezifisch

Tag-and-Probe :
Sie können bekannte Werte verwenden, sie eingeben und ihren Fehler erhalten. Dann können Sie annehmen, dass Werte zwischen zwei davon ungefähr den durchschnittlichen Fehler haben. Mit anderen Worten, Sie extrapolieren den Fehler aus bekannten Werten.

Einfacher Durchschnitt : Nehmen Sie einfach den Durchschnitt der Fehler. Wenn sie ungefähr gleich verteilt sind, ist dies ein guter Weg.

Mayou36
quelle
Wie wäre es mit einem Regressionsfehler?
Rhombidodekaeder