Was berechnet die verborgene Schicht in einem neuronalen Netzwerk?

187

Ich bin mir sicher, dass viele Leute mit Links antworten werden, mit denen sie "Lassen Sie mich das für Sie googeln". Deshalb möchte ich sagen, dass ich versucht habe, dies herauszufinden. Bitte verzeihen Sie mir meinen Mangel an Verständnis hier, aber ich kann nicht herausfinden, wie Die praktische Implementierung eines neuronalen Netzwerks funktioniert tatsächlich.

Ich verstehe die Eingabeebene und wie man die Daten normalisiert, ich verstehe auch die Bias-Einheit, aber wenn es um die verborgene Ebene geht, ist die tatsächliche Berechnung in dieser Ebene und die Zuordnung zur Ausgabe nur ein wenig trübe. Ich habe Diagramme mit Fragezeichen in der ausgeblendeten Ebene gesehen, Boolesche Funktionen wie AND / OR / XOR, Aktivierungsfunktionen und Eingabeknoten, die allen ausgeblendeten Einheiten zugeordnet sind, und Eingabeknoten, die jeweils nur wenigen ausgeblendeten Einheiten zugeordnet sind Ich habe nur ein paar Fragen zum praktischen Aspekt. Natürlich wäre eine einfache Erklärung des gesamten neuronalen Netzwerkprozesses, wie Sie es einem Kind erklären würden, fantastisch.

Welche Berechnungen werden in der verborgenen Ebene durchgeführt?

Wie werden diese Berechnungen auf die Ausgabeebene abgebildet?

Wie funktioniert die Ausgabeebene? Daten aus der verborgenen Ebene entnormalisieren?

Warum sind einige Ebenen in der Eingabeebene mit der ausgeblendeten Ebene verbunden und andere nicht?

FAtBalloon
quelle
13
Die Leute hier sind nett, ich habe noch nie eine Antwort auf "Lassen Sie mich das für Sie googeln" gesehen, aber viele überraschend gründliche und aufschlussreiche Antworten auf scheinbar grundlegende Fragen. Leider kann ich dir nicht helfen, aber es scheint ziemlich relevant zu sein, also stimme ich glücklich darüber ab.
Gala
4
Vielen Dank für den Kommentar und das Votum, Gael, ich bin wahrscheinlich ein bisschen verblüfft von der SO-Community, da wir alle wissen, wie diese Leute werden können Punkte durch Bearbeiten / Schließen von Fragen.
FAtBalloon
1
Ich bin kein Experte für neuronale Netze, obwohl ich mich auf deren Anwendungen und Methoden einlasse. Meine vielleicht nicht so hilfreiche Antwort wäre, dass die spezifischen Berechnungen im Verborgenen von der Kostenfunktion abhängen, die Sie Ihrem Ausgang auferlegen, dh von dem, was Sie erreichen wollen. Wenn Sie beispielsweise die Eingabeelemente in Gruppen gruppieren möchten, berechnen Sie die Abstände zwischen den Elementen in der ausgeblendeten Ebene. Dies kann verschiedene Iterationen und Optimierungszyklen innerhalb dieser Ebene durchlaufen, bis Sie ein Fehlerkriterium erfüllen, das es dem Prozess ermöglicht, diese Ebene zu "verlassen".
Lucozade

Antworten:

230

Version mit drei Sätzen:

  • Jede Ebene kann eine beliebige Funktion auf die vorherige Ebene anwenden (normalerweise eine lineare Transformation, gefolgt von einer nichtlinearen Quetschung).

  • Die Aufgabe der ausgeblendeten Ebenen besteht darin, die Eingaben in etwas umzuwandeln, das die Ausgabeebene verwenden kann.

  • Die Ausgabeebene wandelt die Aktivierungen der ausgeblendeten Ebene in den gewünschten Maßstab für die Ausgabe um.

Als wärst du 5:

Wenn Sie möchten, dass ein Computer Sie darüber informiert, ob ein Bus auf einem Bild zu sehen ist, fällt es dem Computer möglicherweise leichter, wenn er über die richtigen Werkzeuge verfügt.

Ihr Busdetektor kann also aus einem Raddetektor (um Ihnen zu sagen, dass es sich um ein Fahrzeug handelt) und einem Boxdetektor (da der Bus wie eine große Box geformt ist) und einem Größendetektor (um Ihnen zu sagen, dass es zu groß ist, um ein Auto zu sein) bestehen ). Dies sind die drei Elemente Ihrer verborgenen Ebene: Sie sind nicht Teil des Rohbilds, sondern Tools, die Sie zur Identifizierung von Bussen entwickelt haben.

Wenn alle drei Melder eingeschaltet sind (oder wenn sie besonders aktiv sind), besteht eine gute Chance, dass Sie einen Bus vor sich haben.

Neuronale Netze sind nützlich, weil es gute Werkzeuge (wie Backpropagation) gibt, um viele Detektoren zu bauen und zusammenzusetzen.


Als wärst du ein Erwachsener

Ein neuronales Vorwärtskopplungsnetz wendet eine Reihe von Funktionen auf die Daten an. Die genauen Funktionen hängen vom verwendeten neuronalen Netzwerk ab: Am häufigsten berechnen diese Funktionen jeweils eine lineare Transformation der vorherigen Ebene, gefolgt von einer nichtlinearen Quetschung. Manchmal bewirken die Funktionen etwas anderes (wie das Berechnen logischer Funktionen in Ihren Beispielen oder das Mitteln über benachbarte Pixel in einem Bild). Die Rollen der verschiedenen Ebenen könnten also davon abhängen, welche Funktionen berechnet werden, aber ich werde versuchen, sehr allgemein zu sein.

Nennen wir den Eingabevektor , die Aktivierungen für ausgeblendete Ebenen und die Ausgabeaktivierung . Sie haben eine Funktion , die von nach abbildet , und eine andere Funktion , die von nach abbildet . h y f x h g h yxhyfxhghy

Die Aktivierung der verborgenen Schicht ist also und die Ausgabe des Netzwerks ist .g ( f ( x ) )f(x)g(f(x))

Warum haben Sie zwei Funktionen ( und ) anstelle von nur einer?gfg

Wenn der Komplexitätsgrad pro Funktion begrenzt ist, kann Dinge berechnen, die und nicht einzeln können. f gg(f(x))fg


Ein Beispiel mit logischen Funktionen:

Wenn wir zum Beispiel nur zulassen, dass und einfache logische Operatoren wie "AND", "OR" und "NAND" sind, können Sie andere Funktionen wie "XOR" nicht mit nur einer von ihnen berechnen. Andererseits könnten wir "XOR" berechnen, wenn wir bereit wären, diese Funktionen übereinander zu legen:gfg

Funktionen der ersten Schicht:

  • Stellen Sie sicher, dass mindestens ein Element "TRUE" ist (mit OR)
  • Stellen Sie sicher, dass sie nicht alle "TRUE" sind (mit NAND)

Zweite schicht funktion:

  • Stellen Sie sicher, dass beide Kriterien der ersten Ebene erfüllt sind (mit AND).

Die Netzwerkausgabe ist nur das Ergebnis dieser zweiten Funktion. Die erste Schicht wandelt die Eingaben in etwas um, das die zweite Schicht verwenden kann, damit das gesamte Netzwerk XOR ausführen kann.


Ein Beispiel mit Bildern:

Folie 61 aus diesem Vortrag - auch hier als Einzelbild verfügbar - zeigt (auf eine Art und Weise), wonach die verschiedenen verborgenen Ebenen in einem bestimmten neuronalen Netzwerk suchen.

Die erste Ebene sucht nach kurzen Kanten im Bild: Diese sind aus rohen Pixeldaten sehr leicht zu finden, aber für sich genommen nicht sehr nützlich, um Ihnen mitzuteilen, ob Sie ein Gesicht, einen Bus oder einen Elefanten betrachten .

Die nächste Ebene setzt sich aus den Rändern zusammen: Wenn die Ränder der unteren ausgeblendeten Ebene auf eine bestimmte Weise zusammenpassen, schaltet sich möglicherweise einer der Augendetektoren in der Mitte der Spalte ganz links ein. Es wäre schwierig, eine einzelne Ebene zu erstellen, die so gut darin war, aus den Rohpixeln etwas so Spezifisches zu finden: Augendetektoren lassen sich viel einfacher aus Kantendetektoren als aus Rohpixeln zusammensetzen.

Die nächste Schicht setzt die Augendetektoren und die Nasendetektoren zu Gesichtern zusammen. Mit anderen Worten, diese leuchten auf, wenn die Augendetektoren und Nasendetektoren der vorherigen Ebene mit den richtigen Mustern eingeschaltet werden. Diese sind sehr gut für die Suche nach bestimmten Arten von Gesichtern geeignet: Wenn eines oder mehrere von ihnen aufleuchten, sollte Ihre Ausgabeebene melden, dass ein Gesicht vorhanden ist.

Dies ist nützlich, da Gesichtsdetektoren leicht aus Augendetektoren und Nasendetektoren aufgebaut werden können, aber wirklich schwer aus Pixelintensitäten.

Jede Ebene bringt Sie also immer weiter von den Rohpixeln entfernt und näher an Ihr Endziel (z. B. Gesichtserkennung oder Buserkennung).


Antworten auf verschiedene andere Fragen

"Warum sind einige Ebenen in der Eingabeebene mit der verborgenen Ebene verbunden und andere nicht?"

Die getrennten Knoten im Netzwerk werden "Bias" -Knoten genannt. Es ist eine wirklich schöne Erklärung hier . Die kurze Antwort ist, dass sie wie Intercept Terms in der Regression sind.

"Woher kommen die" Augendetektor "-Bilder im Bildbeispiel?"

Ich habe die spezifischen Bilder, mit denen ich verknüpft bin, nicht zweimal überprüft, aber im Allgemeinen zeigen diese Visualisierungen die Menge der Pixel in der Eingabeebene, die die Aktivität des entsprechenden Neurons maximieren. Wenn wir das Neuron also als einen Augendetektor betrachten, ist dies das Bild, das das Neuron als am augenähnlichsten ansieht. Leute finden diese Pixelsätze normalerweise mit einem Optimierungsverfahren (Hill-Climbing-Verfahren).

In diesem Artikel zeigen einige Google-Leute mit einem der weltweit größten neuronalen Netze ein "Gesichtsdetektor" -Neuron und ein "Katzendetektor" -Neuron auf diese Art und Weise sowie eine zweite Art und Weise: Sie zeigen auch die tatsächlichen Bilder , die das aktivieren am stärksten (Abbildung 3, Abbildung 16). Der zweite Ansatz ist schön, weil er zeigt, wie flexibel und nichtlinear das Netzwerk ist - diese "Detektoren" auf hoher Ebene sind für all diese Bilder empfindlich, obwohl sie auf Pixelebene nicht besonders ähnlich aussehen.


Lassen Sie mich wissen, wenn hier etwas unklar ist oder wenn Sie weitere Fragen haben.

David J. Harris
quelle
2
Gibt es also nur einen definierten Algorithmus für jeden einzelnen Knoten auf einer bestimmten Ebene und die Gewichte unterscheiden die Ausgaben? Oder können Sie jeden Knoten auf der Ebene anders programmieren?
FAtBalloon
3
@GeorgeMcDowd Das kommt zum Kernproblem: Wie Sie vorgeschlagen haben, ist es schwierig, Pixel zu betrachten und Busse zu identifizieren. Zum Glück ist es einfach, Pixel zu betrachten und Kanten zu finden - das ist alles, was die erste verborgene Ebene versucht. In der nächsten Ebene wird versucht, Schlussfolgerungen anhand von Kanten zu ziehen. Dies ist viel einfacher als anhand von Pixeln.
David J. Harris
4
SO sollten Sie eine andere Belohnung (als nur Punkte) für die Zeit und Mühe geben, die Sie in diese Antwort stecken!
Samsamara
1
@JoshuaEnfield Ich denke, die Logik in den 1980er Jahren war eine Kombination aus Ähnlichkeit mit der Meinung der Leute, dass das Gehirn funktioniert, dass es überall differenzierbar ist und dass die Werte wie von Ihnen erwähnt begrenzt sind. Seitdem haben die Leute festgestellt, dass f(x) = max(x, 0)(die "gleichgerichtete Lineareinheit") oft besser funktioniert, obwohl es nicht viele dieser Eigenschaften hat.
David J. Harris
2
Das Busbeispiel und die Funktionskette haben es einfach genagelt. Verstehe nicht, warum Lehrbücher nicht so beschreibend sein können.
Drecute
12

Ich werde versuchen, die intuitive Funktionsbeschreibung zu ergänzen ...

Eine gute intuitive Möglichkeit, über ein neuronales Netzwerk nachzudenken, besteht darin, darüber nachzudenken, was ein lineares Regressionsmodell versucht. Eine lineare Regression benötigt einige Eingaben und liefert ein lineares Modell, das jeden Eingabewert mit einigen modelloptimalen Gewichtungskoeffizienten multipliziert und versucht, die Summe dieser Ergebnisse auf eine Ausgabeantwort abzubilden, die der tatsächlichen Ausgabe genau entspricht. Die Koeffizienten werden durch Finden der Werte bestimmt, die eine Fehlermetrik zwischen dem gewünschten Ausgabewert und dem vom Modell gelernten Wert minimieren. Eine andere Art zu sagen ist, dass das lineare Modell versucht, Koeffizientenmultiplikatoren für jede Eingabe zu erstellen und alle zu summieren, um die Beziehung zwischen den (mehrfachen) Eingabe- und (typischerweise einzelnen) Ausgabewerten zu bestimmen. Dasselbe Modell kann fast als Grundbaustein eines neuronalen Netzwerks angesehen werden.

Das einzelne Perzeptron hat jedoch noch ein Stück, das die Summe der gewichteten Daten nichtlinear verarbeitet. In der Regel wird eine Squashing-Funktion (Sigmoid oder Tanh) verwendet, um dies zu erreichen. Sie haben also die Grundeinheit der verborgenen Ebene, die ein Block ist, der einen Satz gewichteter Eingaben summiert. Anschließend übergibt er die summierte Antwort an eine nichtlineare Funktion, um eine Antwort des Ausgabeknotens (verborgene Ebene) zu erstellen. Die Bias-Einheit ist wie bei der linearen Regression ein konstanter Offset, der zu jedem zu verarbeitenden Knoten addiert wird. Aufgrund des nichtlinearen Verarbeitungsblocks sind Sie nicht mehr nur auf lineare Antworten beschränkt (wie im linearen Regressionsmodell).

Okay, aber wenn viele der einzelnen Perceptron-Einheiten zusammenarbeiten, kann jede über unterschiedliche Eingabegewichtsmultiplikatoren und unterschiedliche Antworten verfügen (obwohl ALL denselben Satz von Eingaben mit demselben zuvor beschriebenen nichtlinearen Block verarbeitet). Was die Reaktionen unterscheidet, ist, dass jede unterschiedliche Koeffizientengewichte aufweist, die vom neuronalen Netzwerk durch Training gelernt werden (einige Formen umfassen Gradientenabstieg). Das Ergebnis aller Perceptrons wird dann erneut verarbeitet und an eine Ausgabeebene übergeben, so wie die einzelnen Blöcke verarbeitet wurden. Die Frage ist dann, wie für alle Blöcke die richtigen Gewichte ermittelt werden.

Ein üblicher Weg, um die richtigen Gewichte zu lernen, besteht darin, mit zufälligen Gewichten zu beginnen und die Fehlerreaktion zwischen der tatsächlichen Ausgabe und der gelernten Modellausgabe zu messen. Der Fehler wird in der Regel rückwärts durch das Netzwerk geleitet, und der Feedback-Algorithmus erhöht oder verringert diese Gewichte individuell um einen gewissen Anteil des Fehlers. Das Netzwerk wird wiederholt iterieren, indem es weiterleitet, die Ausgangsantwort misst, dann aktualisiert (Gewichtseinstellungen rückwärts übergibt) und die Gewichte korrigiert, bis eine zufriedenstellende Fehlerstufe erreicht ist. Zu diesem Zeitpunkt haben Sie ein Regressionsmodell, das flexibler sein kann als ein lineares Regressionsmodell. Es wird allgemein als universeller Funktionsapproximator bezeichnet.

Eine der Methoden, mit denen ich wirklich lernen konnte, wie ein neuronales Netzwerk wirklich funktioniert, besteht darin, den Code einer Implementierung eines neuronalen Netzwerks zu studieren und zu erstellen. Eine der besten Erklärungen für den Basiscode finden Sie im Kapitel über neuronale Netze in (dem frei erhältlichen) "Leitfaden für Wissenschaftler und Ingenieure zu DSP", Kap. 26. Es ist größtenteils in einer sehr einfachen Sprache geschrieben (ich glaube, es war Fortran), die Ihnen wirklich hilft, zu sehen, was los ist.

klopfen
quelle
12

Ich werde meine Sichtweise dazu in zwei Schritten beschreiben: dem Schritt von der Eingabe bis zur Ausgabe und dem Schritt von der versteckten bis zur Ausgabe. Ich werde zuerst den Schritt ausführen, bei dem die Ausgabe ausgeblendet wird, da er (für mich) weniger interessant erscheint.

Versteckt zum Ausgeben

Die Ausgabe der verborgenen Ebene kann unterschiedlich sein, aber nehmen wir vorerst an, dass sie aus sigmoidalen Aktivierungsfunktionen stammt. Sie sind also Werte zwischen 0 und 1, und für viele Eingaben können sie nur 0en und 1en sein.

Ich stelle mir die Transformation zwischen den Ausgaben dieser verborgenen Neuronen und der Ausgabeschicht nur als eine Übersetzung vor (im sprachlichen Sinne, nicht im geometrischen Sinne). Dies ist sicher richtig, wenn die Transformation invertierbar ist und wenn nicht, dann ist etwas bei der Übersetzung verloren gegangen. Aber Sie haben im Grunde nur die Ausgänge der versteckten Neuronen aus einer anderen Perspektive gesehen.

Input-to-Hidden

Angenommen, Sie haben 3 Eingangsneuronen (damit ich hier leicht einige Gleichungen schreiben kann) und einige versteckte Neuronen. Jedes versteckte Neuron erhält als Eingabe eine gewichtete Summe von Eingaben, zum Beispiel vielleicht

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Dies bedeutet, dass der Wert von hidden_1sehr empfindlich auf den Wert von input_1, überhaupt nicht empfindlich auf input_2und nur geringfügig empfindlich auf ist input_3.

Man könnte also sagen, dass dies hidden_1ein bestimmter Aspekt der Eingabe ist, den man als " input_1ist wichtig" bezeichnen könnte.

Die Ausgabe von hidden_1wird normalerweise gebildet, indem die Eingabe durch eine Funktion geleitet wird. Nehmen wir also an, Sie verwenden eine Sigmoid- Funktion. Diese Funktion nimmt Werte zwischen 0 und 1 an; Stellen Sie es sich als einen Schalter vor, der besagt, dass entweder input_1wichtig ist oder nicht.

Das macht also die versteckte Ebene! Es extrahiert Aspekte oder Merkmale des Eingaberaums.

Jetzt können Gewichte auch negativ sein! Was bedeutet, dass Sie Aspekte wie " input_1ist wichtig, aber input_2nimmt auch diese Bedeutung" erhalten können:

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

oder input_1und input_3Wichtigkeit "geteilt" haben:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Mehr Geometrie

Wenn Sie eine lineare Algebra kennen, können Sie geometrisch denken, indem Sie entlang bestimmter Richtungen projizieren. Im obigen Beispiel projizierte ich entlang der input_1Richtung.

Schauen wir uns noch hidden_1einmal von oben an. Sobald der Wert bei input_1groß genug ist, bleibt der Ausgang der Sigmoid-Aktivierungsfunktion bei 1 und wird nicht größer . Mit anderen Worten, mehr und mehr input_1machen keinen Unterschied für die Ausgabe. Wenn es sich in die entgegengesetzte (dh negative) Richtung bewegt, wird die Ausgabe nach einem Punkt nicht beeinflusst.

Ok gut Angenommen, wir möchten keine Empfindlichkeit in Richtung unendlich in einer bestimmten Richtung, und wir möchten, dass sie nur für einen bestimmten Bereich auf einer Linie aktiviert wird. Dies bedeutet, dass bei sehr negativen Werten keine Auswirkung vorliegt und bei sehr positiven Werten keine Auswirkung vorliegt. Bei Werten zwischen beispielsweise 5 und 16 soll die Funktion jedoch aktiviert werden. Hier würden Sie eine radiale Basisfunktion für Ihre Aktivierungsfunktion verwenden.

Zusammenfassung

Die ausgeblendete Ebene extrahiert Merkmale des Eingaberaums und die Ausgabeebene übersetzt sie in den gewünschten Kontext. Es mag viel mehr als das geben, was mit Mehrschichtnetzen und dergleichen zu tun hat, aber das ist es, was ich bisher verstehe.

BEARBEITEN: Diese Seite mit ihren wunderbaren interaktiven Grafiken leistet einen besseren Job, als es meine lange und umständliche Antwort jemals tun könnte: http://neuralnetworksanddeeplearning.com/chap4.html

Rohit Chatterjee
quelle
1
Wie beim OP bin ich ein bisschen verwirrt über die verborgene Schicht in neuronalen Netzen. Wie ermittelt der NN-Algorithmus in Ihrem Beispiel die Gewichte für die Neuronen hidden_1, hidden_2 und hidden_3? Und da hidden_1, hidden_2 und hidden_3 von denselben Eingabevariablen abgeleitet sind, würden die Gewichtungen dann nicht zur selben Lösung konvergieren?
RobertF
5

Nehmen wir den Fall der Klassifikation. Die Ausgabeebene versucht, die bedingte Wahrscheinlichkeit abzuschätzen, mit der Ihr Sample zu einer bestimmten Klasse gehört, dh wie wahrscheinlich es ist, dass dieses Sample zu einer bestimmten Klasse gehört. In geometrischer Hinsicht können die neuronalen Netze nichtkonvexe Probleme (Spracherkennung, Objekterkennung usw.), die am interessantesten sind, lösen, wenn Schichten nichtlinear über die Schwellenwertfunktionen kombiniert werden. Mit anderen Worten, die Ausgabeeinheiten können nicht konvexe Entscheidungsfunktionen erzeugen, wie sie hier dargestellt sind .

Man kann die Einheiten in ausgeblendeten Ebenen als Lernen komplexer Merkmale aus Daten betrachten, die es der Ausgabeebene ermöglichen, eine Klasse besser von einer anderen zu unterscheiden und genauere Entscheidungsgrenzen zu generieren. Zum Beispiel lernen bei der Gesichtserkennung Einheiten in den ersten Schichten kantenähnliche Merkmale (Kanten an bestimmten Ausrichtungen und Positionen erkennen) und höhere Schichten lernen, diese zu Detektoren für Gesichtsmerkmale wie Nase, Mund oder Augen zu kombinieren. Die Gewichte jeder verborgenen Einheit stellen diese Merkmale dar, und die Ausgabe (vorausgesetzt, es handelt sich um ein Sigmoid) gibt die Wahrscheinlichkeit an, mit der dieses Merkmal in Ihrer Stichprobe vorhanden ist.

Im Allgemeinen hängt die Bedeutung der Ausgabe von Ausgabe- und ausgeblendeten Ebenen von dem zu lösenden Problem (Regression, Klassifizierung) und der von Ihnen verwendeten Verlustfunktion (Kreuzentropie, Fehler der kleinsten Fehlerquadrate, ...) ab.

jpmuc
quelle