Deep Learning: Woher weiß ich, welche Variablen wichtig sind?


20

Wie kann ich in Bezug auf die neuronale Netzsprache (y = Gewicht * x + Voreingenommenheit) wissen, welche Variablen wichtiger sind als andere?

Ich habe ein neuronales Netz mit 10 Eingängen, 1 verborgene Schicht mit 20 Knoten und 1 Ausgangsschicht, die 1 Knoten hat. Ich weiß nicht genau, welche Eingabevariablen einen größeren Einfluss haben als andere Variablen. Ich denke, wenn eine Eingabe wichtig ist, hat sie eine stark gewichtete Verbindung zur ersten Ebene, aber die Gewichtung kann positiv oder negativ sein. Was ich also tun könnte, ist, den absoluten Wert der Gewichtungen der Eingabe zu nehmen und sie zu summieren. Die wichtigeren Eingaben hätten höhere Summen.

Wenn also zum Beispiel die Haarlänge eine der Eingaben ist, sollte sie 1 Verbindung zu jedem der Knoten in der nächsten Ebene haben, also 20 Verbindungen (und damit 20 Gewichte). Kann ich einfach den absoluten Wert jedes Gewichts nehmen und sie zusammenfassen?


3
Sie können das sicherlich tun, aber es ist nicht klar, was es außer "der Summe aller Gewichte für diese Variable über alle Verbindungen" wirklich bedeutet. "Wichtigkeit" zu nennen ist völlig willkürlich.
Matthew Drury

1
Ich möchte nur alle Informationen, die darauf hindeuten, dass eine Variable wichtig ist, und ich denke, dass dies ein guter Weg sein könnte.
user1367204

Antworten:


16

Was Sie beschreiben, ist in der Tat eine Standardmethode zur Quantifizierung der Wichtigkeit von Eingaben in das neuronale Netz. Beachten Sie jedoch, dass die Eingabevariablen auf irgendeine Weise normalisiert werden müssen, damit dies funktioniert. Andernfalls werden Gewichte, die Eingabevariablen entsprechen, die tendenziell größere Werte haben, proportional kleiner. Es gibt verschiedene Normalisierungsschemata, z. B. das Abziehen des Mittelwerts einer Variablen und das Dividieren durch ihre Standardabweichung. Wenn die Variablen nicht an erster Stelle normalisiert wurden, können Sie die Gewichte selbst in der Wichtigkeitsberechnung korrigieren, z. B. mit der Standardabweichung der Variablen multiplizieren.

.Ii=σij=1nhidden|wij|

Hier die Standardabweichung von der ist i - ten Eingang, I i die i - te Eingangs der Bedeutung, w i j wird das Gewicht des Verbindungs i - ten Eingang der j - ten versteckten Knoten in der ersten Schicht und n versteckt ist die Anzahl von versteckten Knoten in der ersten Schicht.σichichichichichwichjichjnversteckt

Eine andere Technik besteht darin, die Ableitung der Abbildung des neuronalen Netzes in Bezug auf die fragliche Eingabe zu verwenden, gemittelt über die Eingaben.

ichich=σich|dydxich|

Hier ist die i- te Eingabe, y ist die Ausgabe, und der Erwartungswert wird in Bezug auf den Vektor der Eingaben x genommen .xichichyx


Würde dies funktionieren, wenn ich nur die Verbindungen zwischen den Eingaben und der ersten ausgeblendeten Ebene verwende (anstatt alle ausgeblendeten Ebenen zu verwenden)?
user1367204

Sie sollten nur die erste ausgeblendete Ebene verwenden. Nach einer Ebene sind die anderen Gewichte nicht mehr an einen Eingang als an einen anderen gebunden. Ich habe die Antwort leicht bearbeitet, um dies zu verdeutlichen.
Sam Marinelli

Ich erinnerte mich an einen anderen Ansatz und fügte ihn der Antwort hinzu.
Sam Marinelli

11

Eine etwas brachiale, aber effektive Lösung:

Versuchen Sie, eine Eingabe zu löschen, indem Sie eine Konstante für eine Ihrer Eingabefunktionen verwenden. Trainieren Sie dann das Netzwerk für jeden der möglichen Fälle und sehen Sie, wie Ihre Genauigkeit sinkt. Wichtige Eingaben bieten den größten Vorteil für die Gesamtgenauigkeit.


Das ist sicherlich eine Möglichkeit.
SmallChess

6
Es gibt jedoch eine Tücke: Auch wenn ein Merkmal extrem wichtig ist, wird keines von Ihren Kriterien als wichtig angesehen (das Fehlen des ersten wird durch das Vorhandensein des letzteren kompensiert, während es weniger informativ ist, aber Weitere "einzigartige" Funktionen werden auf diese Weise wichtiger)
Firebug

Dies wird manchmal als Ablationstest (genauer
Mikroablationstest

7

105

Für ein flaches Netzwerk ist dies ein Beispiel für die Definition der variablen Wichtigkeit.

Für ein wirklich tiefes Netzwerk reden die Leute nicht zu viel über variable Wichtigkeit. Da es sich bei den Eingaben um unformatierte Features handelt, z. B. um Pixel in einem Bild.


Ich habe meinen Kommentar bearbeitet, um zu reflektieren, was ich meinte. Ich wollte sagen, 20 Knoten in der ersten Schicht, nicht 5 Knoten. Großer Anteil und vielen Dank für die Unterscheidung von flachen / tiefen Netzen.
user1367204

9
@ hxd1011 nicht umständlich zu sein, aber tief bedeutet mehr schichten nicht tausende von versteckten einheiten :).
Rafael

3

Die meisten , die dazu gefunden ive ist aufwendig auf aufgelistet dieser Seite genauer Sie betrachten können dies . Wenn Sie nur über lineare Modelle sprechen, müssen Sie die Gewichte normalisieren, um sie interpretierbar zu machen, aber selbst dies kann auf dem erwähnten Link mehr irreführend sein. Einige Leute haben versucht, komplexe Funktionen von Gewichten zu erstellen, um die Wichtigkeit von Eingaben zu interpretieren (Garsons, Gedeons und Milnes), aber selbst dies kann irreführend sein. Im Allgemeinen würde ich raten, die Ergebnisse mit einem Körnchen Salz zu interpretieren.

Ich stimme der Antwort von @ rhadar zu, möchte aber hinzufügen, dass anstelle eines konstanten Versuchs der Mittelwert für diesen Eingang verwendet wird, und das Netzwerk nicht umgeschult werden muss.

PS: Entschuldigung, konnte nicht mehr Links posten oder kommentieren. Habe nicht viel Reputation.


1

Vorausgesetzt, Sie haben:

  1. Eine Klassifizierungsaufgabe
  2. Ein trainiertes Modell
  3. Normalisierte Features (zwischen 0 und 1)

Hat jemand versucht:

  1. Die Vorurteile ausräumen
  2. Übergeben Sie jedes Mal als Features einen One-Hot-Vector, bei dem alle Features mit Ausnahme von One gleich Null sind.
  3. Untersuchen Sie die Ausgabe.

In diesem Fall ist der Ausgang meiner Meinung nach eine Zahl, die die "Wichtigkeit" des Merkmals angibt, da dieser Ausgang auch den Ausgang des Pfads dieses 1-Signals innerhalb des Netzwerks darstellt.

Es ist, als würde man nur eine Glühbirne in einem Labyrinth anzünden und das Licht messen, das am Ausgang austritt.


Ich denke nicht, dass das viel helfen würde. Was Sie bewerten möchten, ist, wie stark die Variation dieser Eingabe die Ausgabe beeinflussen würde (für sich oder in Kombination mit anderen Funktionen)
Elachell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.