Sensitivitätsanalyse möglich

Haben Sie Fragen zur Bedienung bestimmter Features von MemBrain? Sind Sie nicht sicher, welches Häkchen was bewirkt? Möchten Sie wissen, ob eine bestimmte Funktionalität in MemBrain vorhanden ist oder nicht?

Dann stellen Sie Ihre Fragen hier!
Julian94
Posts: 6
Joined: Mon 26. Jun 2017, 16:55

Sensitivitätsanalyse möglich

Post by Julian94 »

Hallo zusammen,

ich beschäftige mich erst seit kurzer Zeit mit Membrain aber mich würde interessieren, ob es möglich ist, eine Sensitivitätsanalyse dort durchzuführen.
Also ich meine damit, dass man über den Backpropagation-Algorithmus eine Art "Wichtigkeit" der Input-Variablen erhält. (Z.B. könnte man ja ein Neuron im Output-Layer im Backpropagation-Schritt künstlich auf 1 setzen und schauen, wie sich die Werte der Kanten von den Input-Variablen ändern - in einer Vorlesung wurde uns vorgestellt, dass dies unter anderem mit Tensorflow im Bereich der Bildverarbeitung eingesetzt wird.)

Viele Grüße,
Julian
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Sensitivitätsanalyse möglich

Post by TJetter »

Hallo,

man kann zur Sensitivitätsanalyse ein fertig trainiertes Netz nehmen, an alle Eingänge deren jeweiligen Mittelwert anlegen und den Wertebereich des betreffenden, zu untersuchenden Input-Neurons schrittweise abfahren und die Netzreaktion aufzeichnen. Tut man dies für alle Input-Neuronen so erhält man für jeden Input eine Sensitivitätskurve (in genau einem Arbeitspunkt natürlich).
Das dll-VBA Beispiel von der Homepage tut genau dies. Eine fertig eingebaute Funktion in MemBrain gibt es dafür nicht.
Leichter und komfortabler als mit der dll lässt sich das sicerlich in einem MemBrain Skript umsetzen. Bei Gelegenheit werde ich einmal ein solches Skript erstellen und online stellen, wenn nicht jemand anders schneller sein sollte ;-)

Viele Grüße
Thomas Jetter
Julian94
Posts: 6
Joined: Mon 26. Jun 2017, 16:55

Re: Sensitivitätsanalyse möglich

Post by Julian94 »

Super - vielen Dank für die schnelle Antwort.
Ich komme wahrscheinlich doch erst am Montag zum Testen der Methode aber das hört sich doch schonmal gut an :)

Viele Grüße,
Julian
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Sensitivitätsanalyse möglich

Post by TJetter »

Hallo,

das oben erwähnte Script zur Sensitivitätsanalyse staht ab sofort hier im Forum zum Download bereit.
Feedback ist herzlich willkommen!

viewtopic.php?f=13&t=510

Viele Grüße
Thomas Jetter
Julian94
Posts: 6
Joined: Mon 26. Jun 2017, 16:55

Re: Sensitivitätsanalyse möglich

Post by Julian94 »

Hallo,

erstmal super vielen Dank für das Skript, welches ich ohne Probleme auch auf meinen Daten ausführen konnte!
Allerdings hab ich noch ein paar Fragen dazu:

1.) Wie werden die Abfrage-Punkte (deren Anzahl TEST_POINT_COUNT ist) im Skript generiert? Bei mir werden die Input-Neuronen später immer mit 100 gleichverteilten Werten zwischen -1 und 1 "gefüttert". Sollen dafür dann die Daten vorher auf den Bereich [-1,1] normiert werden?

2.) Zu dem am Ende ausgegebenen Diagramm habe ich noch zwei Fragen: In der Überschrift/Legende steht, dass dort eine target und eine current Kurve erscheinen sollten - bei mir erscheint nur die target-Kurve. Kann das an meinen Daten liegen? Außerdem würde mich interessieren wie man die Zahlen auf der y-Achse interpretieren könnte. Ist das die Abweichung im Ergebnis vom Input mit dem Default-Wert?

Viele Grüße und nochmals vielen Dank für deine Mühe :)
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Sensitivitätsanalyse möglich

Post by TJetter »

Das Script holt sich die Wertebereiche aus den Normalisierungseinstellungen der Input-Neuronen. Bei diesen also die Normalization aktivieren und sinnvolle Wertegrenzen eintragen. Danach neu trainieren, dann das Script anwenden.

Target und Actual kann man als Beschriftung der Grafik ignorieren. Der Pattern Error Viewer wird durch das Script zweckentfremdet. Es gibt nur eine Kurve die angezeigt wird. Sie repräsentiert das Ausgangssignal des Netzes in Reaktion auf den entsprechenden Eingang.
Thomas Jetter
Julian94
Posts: 6
Joined: Mon 26. Jun 2017, 16:55

Re: Sensitivitätsanalyse möglich

Post by Julian94 »

Hallo nochmal,

nach recht vielen Tests kann ich sagen, dass das Skript auf jeden Fall gut funktioniert und mir auch sehr weitergeholfen hat. Daher nochmals vielen Dank dafür! :)

Eine Frage, die sich mir dann aber noch anschließt ist, ob ich dieses Skript noch so erweitern kann, dass es auch für nominale Variablen (bzw. i.A. Variablen bei denen die verschiedenen Werte in keiner Ordnung stehen) sinnvolle Ergebnisse liefert. Oder müsste ich da den Ansatz wählen, dass ich immer eine Variable rauslösche und schaue, wie sich die Genauigkeit auf den Testdaten ändert?

Viele Grüße,
Julian
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Sensitivitätsanalyse möglich

Post by TJetter »

Julian94 wrote:dass es auch für nominale Variablen (bzw. i.A. Variablen bei denen die verschiedenen Werte in keiner Ordnung stehen)
Was ist denn mit 'nominalen Variablen' gemeint? Vielleicht ein Beispiel? Auch 'in keiner Ordnung stehen' verstehe ich nicht ganz.
Julian94 wrote:dass ich immer eine Variable rauslösche und schaue, wie sich die Genauigkeit auf den Testdaten ändert?
Auch hier ist mir 'rauslöschen' nicht ganz klar. Was man machen kann: Alle output-Links eines Input-Neurons weglöschen, dann kann der Input-Datensatz unverändert beibehalten werden, der Input wird ignoriert, da er ja nicht in die Berechnung des Netzes eingehen kann. Nach dem Löschen muss aber neu trainiert werden!
Output-Links löschen geht ganz einfach so: Input-Neuron(en) markieren, die Taste 'Pfeil-Nach-Unten' auf der Tastatur drücken (alternativ <Extras><Select output links> über das Menü) und ENTF drücken.
Thomas Jetter
Julian94
Posts: 6
Joined: Mon 26. Jun 2017, 16:55

Re: Sensitivitätsanalyse möglich

Post by Julian94 »

Mit nominalen Variablen meine ich z.B. codierte Bundesländer (1=Baden-Württemberg, 2=Bayern, 3=Berlin, ...) oder bei Personen der Familienstand (1=ledig, 2=verheiratet, 3=geschieden)
Auf den Variablen kann man insofern keine Ordnung herstellen, dass man nicht sagen kann, dass ein Objekt A aus Bundesland 5 besser oder schlechter ist als ein Objekt B aus Bundesland 3.
Daher ist es schlecht, dort den Durchschnitt anzulegen, da man für die Sensitivitätsanalyse bei allen Input-Variablen (außer der Variable Bundesland selbst) annimmt, dass das Objekt aus Bundesland x kommt.
Auch die Methode den ersten Datensatz der Lesson als Default-Input zu benutzen erscheint mir hier nicht ausreichend zu sein, da man wieder nur Objekte aus einem Bundesland betrachtet.
Mir ist auch klar, dass solche Variablen bei Neuronalen Netzen eher unüblich sind und evtl. auch statistisch nicht 100%ig korrekt wären. Allerdings liefert das Neuronale Netz auch mit solchen Variablen gute bis sehr gute Ergebnisse ^^

Genau das meinte ich mit "rauslöschen" :) Vielen Dank schonmal für den Tipp mit dem Links entfernen. :)
Die aus dem Netzwerk mit dem abgetrennten Input-Neuron resultierende Genauigkeit auf dem Testdatensatz könnte man dann durch die Genauigkeit teilen, die man raushatte als man alle Variablen ins Netz geschmissen hatte.
Macht man das für alle Variablen, bekäme man für alle Variablen eine relative Genauigkeit raus. Ordnet man diese Genauigkeiten nun an, hätte man eine Rangfolge der Wichtigkeit der Input-Variablen.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Sensitivitätsanalyse möglich

Post by TJetter »

OK, verstehe.
Julian94 wrote:Mir ist auch klar, dass solche Variablen bei Neuronalen Netzen eher unüblich sind und evtl. auch statistisch nicht 100%ig korrekt wären.
Ganz und gar nicht, das ist sogar sehr üblich. Manche Inputs lassen sich nur binär codieren, das ist 100 %ig in Ordnung so.
Julian94 wrote:Auch die Methode den ersten Datensatz der Lesson als Default-Input zu benutzen erscheint mir hier nicht ausreichend zu sein
Kleine Korrektur: Das Skript kopiert sich die momentanen Aktivitäten aller Inputs vom Netz, nicht aus der Lesson, wenn die Konstante 'USE_CURRENT_INPUT_ACTICATIONS_AS_DEFAULT' auf 'true' gesetzt wird.
Von der Bedeutung her aber richtig: Damit lässt sich nur eine Default-Konfiguration als Basis nehmen, alle anderen Codierungen bleiben außen vor. Allerdings ist das auch ein prinzipielles Problem: Möchte man Inputs variieren, solange alle anderen Inputs konstant bleiben, dann muss jeder Input nur ein einziges Mal abgescannt werden. Möchte man das Ganze noch mit variierenden anderen Inputs machen, so ergibt sich natürlich ein Problem mit sehr vielen Permutationen.
Vielleicht ist es dann tatsächlich am sinnvollsten, alle Inputs bis auf einen abzukoppeln, dann zu trainieren und sich die Genauigkeit anzuschauen. Das dann dann wiederum für jeden Input.
Übrigens lässt sich das Editieren von Netzen (und damit auch das Abkoppeln von Inputs) auch über Skript automatisieren. Ist eben etwas mehr Aufwand. Auch das Wieder-Verknüpfen kann man über Skript machen. Einfacher und schneller ist es aber bestimmt, das Originalnetz mit allen Verknüpfungen immer wieder neu zu laden und dann alle Inputs außer dem zu testenden abzukoppeln.
Thomas Jetter
Post Reply