Ich bin sicher, dass viele Leute mit Links zu „Lass mich das für dich googeln“ antworten werden, also möchte ich sagen, dass ich versucht habe, es herauszufinden Bitte verzeihen Sie mir hier mein Unverständnis, aber ich kann nicht herausfinden, wie die praktische Implementierung eines neuronalen Netzwerks tatsächlich funktioniert.

Ich verstehe die Eingabeebene und wie man die Daten normalisiert, ich verstehe auch die Bias-Einheit, aber wenn es um die verborgene Ebene geht, was die tatsächliche Berechnung in dieser Ebene ist und wie sie der Ebene zugeordnet wird Die Ausgabe ist nur ein wenig neblig. Ich habe Diagramme mit Fragezeichen in der verborgenen Ebene gesehen, boolesche Funktionen wie AND / OR / XOR, Aktivierungsfunktionen und Eingabeknoten, die allen verborgenen Einheiten zugeordnet sind, und Eingabeknoten, die jeweils nur wenigen versteckten 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 sie einem Kind erklären würden, fantastisch.

Welche Berechnungen werden in der verborgenen Schicht durchgeführt? ?

Wie werden diese Berechnungen der Ausgabeebene zugeordnet?

Wie funktioniert die Ausgabeebene? De-Normalisierung der Daten aus der verborgenen Ebene?

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

Kommentare

  • Die Leute hier sind nett, ich habe sie noch nie gesehen Eine Antwort „Lass mich das für dich googeln“, aber viele überraschend gründliche und aufschlussreiche Antworten auf zunächst grundlegende Fragen. Leider kann ich dir ‚ nicht helfen, w Mit deiner, aber es scheint ziemlich relevant zu sein, also stimme ich gerne darüber ab.
  • Danke für den Kommentar und die Abstimmung Gael, ich ‚ bin wahrscheinlich ein bisschen erschöpft Die SO-Community, wie wir alle wissen, wie diese Leute kommen können 🙂 Ich bin froh, hier mehr Geist der Zusammenarbeit zu sehen, als zu versuchen, durch Bearbeiten / Schließen von Fragen Abzeichen und Punkte zu verdienen.
  • Ich bin es nicht Experte für neuronale Netze speziell, obwohl ich mich auf ihre 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 sind Auferlegen Ihrer Ausgabe, dh was Sie versuchen zu erreichen. Wenn Sie beispielsweise die Eingabeelemente in gruppierten Gruppen gruppieren möchten, berechnen Sie die Abstände zwischen Elementen in der verborgenen 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.

Antwort

Version mit drei Sätzen:

  • Jede Ebene kann eine beliebige Funktion auf die vorherige Ebene anwenden (normalerweise eine lineare Transformation, gefolgt von einer Squashing-Nichtlinearität).

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

  • Die Ausgabeebene wandelt die Aktivierungen der verborgenen Ebene in einen beliebigen Maßstab um, auf dem Ihre Ausgabe angezeigt werden soll.

Like you „re 5:

Wenn Sie möchten, dass ein Computer Ihnen mitteilt, ob in einem Bild ein Bus vorhanden ist, fällt es dem Computer möglicherweise leichter, wenn er über die richtigen Werkzeuge verfügt.

Ihr Busdetektor besteht also möglicherweise aus einem Raddetektor (um Ihnen zu sagen, dass es sich um ein Fahrzeug handelt), einem Boxdetektor (da der Bus die Form einer großen Box hat) und einem Größendetektor (um es Ihnen mitzuteilen) Es ist zu groß, um ein Auto zu sein. Dies sind die drei Elemente Ihrer verborgenen Ebene: Sie sind nicht Teil des Rohbilds, sondern Werkzeuge, die Sie zur Identifizierung von Bussen entwickelt haben.

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

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


Wie Sie sind Sie ein Erwachsener

Ein neuronales Feed-Forward-Netzwerk wendet eine Reihe von Funktionen auf die Daten an. Die genauen Funktionen hängen von dem neuronalen Netzwerk ab, das Sie verwenden: Am häufigsten berechnen diese Funktionen jeweils eine lineare Transformation der vorherigen Schicht, gefolgt von einer Quetsch-Nichtlinearität. Manchmal führen die Funktionen etwas anderes aus (z. B. die Berechnung logischer Funktionen in Ihren Beispielen) oder die Mittelung ü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.

Rufen wir die Eingabe auf Vektor $ x $, die Aktivierungen der verborgenen Ebene $ h $ und die Aktivierung der Ausgabe $ y $. Sie haben eine Funktion $ f $, die von $ x $ auf $ h $ abgebildet wird, und eine andere Funktion $ g $, die von $ h $ abgebildet wird bis $ y $.

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

Warum zwei Funktionen ($ f $ und $ g $) anstelle von nur einer?

Wenn der Komplexitätsgrad pro Funktion begrenzt ist, kann $ g (f (x)) $ Dinge berechnen, die $ f $ und $ g $ nicht einzeln ausführen können.


Ein Beispiel mit logischen Funktionen:

Zum Beispiel, wenn wir nur $ f $ zulassen und $ g $ sind einfache logische Operatoren wie „AND“, „OR“ und „NAND“. Dann können Sie andere Funktionen wie „XOR“ nicht mit nur einer davon berechnen. Andererseits könnten wir „XOR“ berechnen, wenn wir bereit wären, diese Funktionen übereinander zu legen:

Funktionen der ersten Ebene:

  • Stellen Sie sicher, dass mindestens ein Element „TRUE“ ist (mit OR).
  • Stellen Sie sicher, dass nicht alle „TRUE“ sind (mit NAND).

Funktion der zweiten Schicht:

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

Die Netzwerkausgabe ist nur die 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 verfügbar hier als einzelnes Bild – zeigt (eine Möglichkeit zur Visualisierung), wonach die verschiedenen verborgenen Schichten in einem bestimmten neuronalen Netzwerk suchen.

Die erste Ebene sucht nach kurzen Kantenstücken im Bild: Diese sind aus Rohpixeldaten sehr leicht zu finden, aber sie sind für sich genommen nicht sehr nützlich, um Ihnen zu sagen, ob Sie ein Gesicht oder einen Bus betrachten oder ein Elefant.

Die nächste Ebene setzt sich aus den Kanten zusammen: Wenn die Kanten der unteren verborgenen Ebene auf bestimmte Weise zusammenpassen, wird möglicherweise einer der Augenmelder in der Mitte der Spalte ganz links eingeschaltet . Es wäre schwierig, eine einzelne Schicht zu erstellen, die so gut darin ist, aus den Rohpixeln etwas so Spezifisches zu finden: Augendetektoren lassen sich viel einfacher aus Kantendetektoren als aus Rohpixeln aufbauen.

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

Dies ist nützlich, da Gesichtsdetektoren lassen sich leicht aus Augen- und Nasendetektoren aufbauen, aber aus Pixelintensitäten sehr schwer.

Also Mit jeder Ebene kommen Sie immer weiter von den Rohpixeln entfernt und Ihrem endgültigen Ziel näher (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 als „Bias“ -Knoten bezeichnet. Es gibt hier eine wirklich nette Erklärung . Die kurze Antwort lautet, dass sie Intercept-Begriffe in der Regression mögen.

„Wo stammen die „Augenmelder“ -Bilder im Bildbeispiel? „

Ich habe die spezifischen Bilder, mit denen ich verknüpft habe, nicht doppelt überprüft, aber im Allgemeinen zeigen diese Visualisierungen den Satz von Pixel in der Eingabeebene, die die Aktivität des entsprechenden Neurons maximieren. Wenn wir das Neuron also als Augendetektor betrachten, ist dies das Bild, das das Neuron als am augenähnlichsten betrachtet. Leute finden diese Pixelsätze normalerweise mit einer Optimierung (Bergsteigen) -Verfahren.

In dieses Papiers von einigen Google-Leuten mit einem der größten neuronalen Netze der Welt zeigen sie ein „Gesichtsdetektor“ -Neuron und ein „Katzendetektor“ -Neuron auf diese Weise sowie eine zweite Möglichkeit: Sie zeigen auch die tatsächlichen Bilder , die das Neuron am stärksten aktivieren (Abbildung 3, Abbildung 16). Der zweite Ansatz ist nett, weil er zeigt, wie flexibel und nichtlinear das Netzwerk ist – diese „Detektoren“ auf hoher Ebene reagieren empfindlich auf all diese Bilder, obwohl sie auf Pixelebene nicht besonders ähnlich aussehen.


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

Kommentare

  • Es ist also nur eine definiert Der Algorithmus für jeden einzelnen Knoten auf einer bestimmten Ebene und die Gewichte machen die Ausgaben unterschiedlich. Oder können Sie jeden Knoten auf der Ebene so programmieren, dass er anders ist?
  • @GeorgeMcDowd Dies ist das Hauptproblem: Betrachten Pixel und das Identifizieren von Bussen ist schwierig, wie Sie vorgeschlagen haben. Glücklicherweise ist es einfach, Pixel zu betrachten und Kanten zu finden – das ist ‚ alles, was die erste verborgene Ebene versucht. Die nächste Ebene versucht es Schlussfolgerungen basierend auf Kanten zu ziehen, was viel einfacher ist, als dies anhand von Pixeln zu versuchen.
  • SO sollte Ihnen eine andere Belohnung (als nur Punkte) für die Zeit und Mühe geben, die Sie in diese Antwort gesteckt haben!
  • @JoshuaEnfield Ich denke, die Logik im Jahr 1980 ‚ s war eine Kombination aus Ähnlichkeit damit, wie die Leute dachten, 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 lineare Einheit „) häufig funktioniert besser, obwohl es ‚ nicht viele dieser Eigenschaften hat.
  • Das Busbeispiel und die Funktionskette haben es gerade geschafft. Verstehen Sie ‚ nicht, warum Lehrbücher ‚ nicht so beschreibend sein können.

Antwort

Ich werde versuchen, die intuitive Betriebsbeschreibung zu ergänzen …

Eine gute intuitive Art, über ein neuronales Netzwerk nachzudenken, ist das Denken Informationen darüber, was ein lineares Regressionsmodell zu tun versucht. Eine lineare Regression nimmt einige Eingaben entgegen und liefert ein lineares Modell, das jeden Eingabewert mal einige optimale Gewichtungskoeffizienten des Modells verwendet und versucht, die Summe dieser Ergebnisse so genau auf eine Ausgabeantwort abzubilden Die Koeffizienten werden bestimmt, indem die Werte ermittelt werden, die eine Fehlermetrik zwischen dem gewünschten Ausgabewert und dem vom Modell gelernten Wert minimieren. Eine andere Möglichkeit besteht darin, dass das lineare Modell versucht, Koeffizientenmultiplikatoren zu erstellen für jeden Eingang und summieren Sie alle, um zu versuchen, die Beziehung zwischen dem (Mehrfach-) Eingangs- und dem (normalerweise einzelnen) Ausgangswert zu bestimmen ues. Das gleiche Modell kann fast als Grundbaustein eines neuronalen Netzwerks angesehen werden. ein Perzeptron mit einer Einheit.

Das Perzeptron mit einer Einheit hat jedoch noch ein Stück, das die Summe der gewichteten Daten nichtlinear verarbeitet. Dazu wird normalerweise eine Quetschfunktion (Sigmoid oder Tanh) verwendet. Sie haben also die Grundeinheit der verborgenen Schicht, bei der es sich um einen Block handelt, der eine Reihe gewichteter Eingaben summiert. Anschließend wird die summierte Antwort an eine nichtlineare Funktion übergeben, um eine Ausgangsknotenantwort (versteckte Schicht) zu erstellen. Die Vorspannungseinheit ist genau wie bei der linearen Regression ein konstanter Versatz, der zu jedem zu verarbeitenden Knoten hinzugefügt wird. Aufgrund des nichtlinearen Verarbeitungsblocks sind Sie nicht mehr nur auf lineare Antworten beschränkt (wie im linearen Regressionsmodell).

Ok, aber wenn viele der einzelnen Perzeptroneinheiten zusammenarbeiten kann unterschiedliche Eingangsgewichtsmultiplikatoren und unterschiedliche Antworten haben (obwohl ALLE denselben Satz von Eingaben mit demselben zuvor beschriebenen nichtlinearen Block verarbeiten). Was die Antworten unterschiedlich macht, ist, dass jedes unterschiedliche Koeffizientengewichte hat, die vom neuronalen Netzwerk durch Training gelernt werden (einige Formen umfassen Gradientenabstieg). Das Ergebnis aller Perzeptrone wird dann erneut verarbeitet und an eine Ausgabeschicht übergeben, so wie die einzelnen Blöcke verarbeitet wurden. Die Frage ist dann, wie die richtigen Gewichte für alle Blöcke bestimmt werden.

Ein üblicher Weg, um die richtigen Gewichte zu lernen, besteht darin, mit zufälligen Gewichten zu beginnen und die Fehlerantwort zwischen der tatsächlichen tatsächlichen Ausgabe und der gelernten zu messen Modellausgabe. Der Fehler wird normalerweise rückwärts durch das Netzwerk geleitet, und der Rückkopplungsalgorithmus erhöht oder verringert diese Gewichte individuell um ein gewisses Verhältnis zum Fehler. Das Netzwerk wird wiederholt iterieren, indem es vorwärts geht, die Ausgangsantwort misst, dann aktualisiert (Gewichtsanpassungen rückwärts durchläuft) und die Gewichte korrigiert, bis ein zufriedenstellendes Fehlerniveau erreicht ist. Zu diesem Zeitpunkt haben Sie ein Regressionsmodell, das flexibler sein kann als ein lineares Regressionsmodell. Es wird üblicherweise als universeller Funktionsapproximator bezeichnet.

Eine der Möglichkeiten, die mir wirklich geholfen haben, zu lernen, wie ein neuronales Netzwerk wirklich funktioniert, besteht darin, den Code einer Implementierung eines neuronalen Netzwerks zu studieren und ihn zu erstellen. Eine der besten grundlegenden Code-Erklärungen finden Sie im Kapitel über das neuronale Netzwerk von (dem frei verfügbaren) „Der Leitfaden für Wissenschaftler und Ingenieure zu DSP“ Kap. 26. Es ist meistens in einer sehr einfachen Sprache geschrieben (ich denke, es war fortran), die Ihnen wirklich hilft, zu sehen, was los ist.

Antwort

Ich werde meine Ansicht dazu in zwei Schritten beschreiben: Der Schritt von Eingabe zu versteckt und der Schritt von versteckt zu ausgegeben. Ich werde zuerst den Hidden-to-Output-Schritt ausführen, da er (für mich) weniger interessant erscheint.

Hidden-to-Output

Die Ausgabe der verborgenen Ebene kann verschiedene Dinge sein, aber nehmen wir zunächst an, dass sie aus stammen sigmoidale Aktivierungsfunktionen. Sie sind also Werte zwischen 0 und 1, und für viele Eingaben können sie nur 0 „s und 1“ s sein.

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

Input-to-Hidden

Nehmen wir an, Sie haben 3 Eingangsneuronen (nur damit ich es einfach kann Schreiben Sie hier einige Gleichungen) und einige versteckte Neuronen. Jedes versteckte Neuron erhält als Eingabe eine gewichtete Summe von Eingaben, also vielleicht zum Beispiel

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

Dies bedeutet, dass der Wert von hidden_1 sehr empfindlich auf den Wert von , überhaupt nicht empfindlich gegenüber input_2 und nur geringfügig empfindlich gegenüber input_3.

Man könnte also sagen, dass hidden_1 einen bestimmten Aspekt der Eingabe erfasst, den Sie als „input_1 ist ein wichtiger Aspekt.

Die Ausgabe von hidden_1 wird normalerweise gebildet, indem die Eingabe über eine Funktion geleitet wird Nehmen wir an, Sie verwenden eine Sigmoid -Funktion. Diese Funktion nimmt Werte zwischen 0 und 1 an; Stellen Sie sich das als einen Schalter vor, der besagt, dass entweder input_1 wichtig ist oder nicht „t.

Das ist also, was die verborgene Ebene tut! Es extrahiert Aspekte oder Merkmale des Eingabebereichs.

Jetzt können auch Gewichte negativ sein! Was bedeutet, dass Sie Aspekte wie „input_1 erhalten können, ist wichtig, ABER AUCH input_2 nimmt diese Bedeutung weg“:

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

oder input_1 und input_3 haben „gemeinsame“ Bedeutung:

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

Weitere Geometrie

Wenn Sie welche kennen In der linearen Algebra können Sie geometrisch denken, indem Sie in bestimmte Richtungen projizieren. Im obigen Beispiel habe ich entlang der input_1 -Richtung projiziert.

Schauen wir uns hidden_1 noch einmal von an oben. Sobald der Wert bei input_1 groß genug ist, bleibt die Ausgabe der Sigmoid-Aktivierungsfunktion nur bei 1, sie wird nicht größer . Mit anderen Worten, immer mehr input_1 machen keinen Unterschied für die Ausgabe. In ähnlicher Weise wird die Ausgabe nach einem Punkt nicht beeinflusst, wenn sie sich in die entgegengesetzte (d. H. Negative) Richtung bewegt.

Ok, gut. Angenommen, wir möchten keine Empfindlichkeit in Richtung Unendlichkeit in einer bestimmten Richtung, und wir möchten, dass sie nur für einen bestimmten Bereich auf einer Linie aktiviert wird. Für sehr negative Werte gibt es keine Auswirkung und für sehr positive Werte gibt es keine Auswirkung, aber für Werte zwischen 5 und 16 möchten Sie, dass es aufwacht. Hier würden Sie eine radiale Basisfunktion für Ihre Aktivierungsfunktion.

Zusammenfassung

Die verborgene Ebene extrahiert Merkmale des Eingaberaums und die Ausgabeschicht übersetzt sie in den gewünschten Kontext. Es kann viel mehr als das sein, was mit mehrschichtigen Netzwerken und dergleichen zu tun hat, aber das verstehe ich bisher.

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

Kommentare

  • Wie beim OP bin ich ‚ etwas verwirrt über die verborgene Ebene in neuronalen Netzen. Wie findet 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, konvergieren die Gewichte nicht ‚ zu derselben Lösung?

Antwort

Nehmen wir den Fall der Klassifizierung. Die Ausgabeschicht versucht, die bedingte Wahrscheinlichkeit zu schätzen, dass Ihre Stichprobe zu einer bestimmten Klasse gehört, d. H. Wie wahrscheinlich es ist, dass diese Stichprobe zu einer bestimmten Klasse gehört. In geometrischer Hinsicht ermöglicht das nichtlineare Kombinieren von Schichten über die Schwellenwertfunktionen den neuronalen Netzen, nicht konvexe Probleme (Spracherkennung, Objekterkennung usw.) zu lösen, die am interessantesten sind. Mit anderen Worten, die Ausgabeeinheiten können nicht konvexe Entscheidungsfunktionen wie die hier dargestellten erzeugen.

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

Im Allgemeinen die Bedeutung der Ausgaben von Ausgabe und Versteckte Ebenen hängen von dem Problem ab, das Sie lösen möchten (Regression, Klassifizierung) und der von Ihnen verwendeten Verlustfunktion (Kreuzentropie, Fehler im kleinsten Quadrat, …).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.