Ich versuche zu lernen, wie das Neuronale Netz bei der Bilderkennung funktioniert. Ich habe einige Beispiele gesehen und bin noch verwirrter geworden. Im Beispiel der Buchstabenerkennung eines 20x20-Bildes werden die Werte jedes Pixels zur Eingabeebene. Also 400 Neuronen. Dann eine versteckte Schicht von Neuronen und 26 Ausgangsneuronen. Dann trainiere das Netzwerk, und dann funktioniert es, nicht perfekt.
Was mich am Neuronalen Netz verwirrt hat, ist, wie es erfährt, was in einem Bild enthalten ist. Sie müssen keine Schwellenwerte, Segmentierungen oder Messungen vornehmen. Das Netzwerk lernt auf diese Weise, Bilder zu vergleichen und zu erkennen. Es ist jetzt wie Magie für mich. Wo fange ich an, neuronales Netzwerk zu lernen?
machine-learning
neural-networks
image-processing
user1731927
quelle
quelle
Antworten:
Während ich die Arbeit von Professor Kunihiko Fukushima über das Neokognitieren in den 1980er Jahren studierte, erhielt ich einen wichtigen Einblick, wie ein neuronales Netzwerk lernen kann, etwas so Komplexes wie Bilddaten anhand von Beispielen und richtigen Antworten zu klassifizieren. Anstatt seinem Netzwerk nur eine Reihe von Bildern zu zeigen und die Rückübertragung zu verwenden, um die Dinge selbst zu bestimmen, verfolgte er einen anderen Ansatz und trainierte sein Netzwerk Schicht für Schicht und sogar Knoten für Knoten. Er analysierte die Leistung und den Betrieb jedes einzelnen Knotens des Netzwerks und änderte diese Teile absichtlich, damit sie auf die beabsichtigte Weise reagieren.
Er wollte zum Beispiel, dass das Netzwerk Linien erkennen kann, und trainierte daher bestimmte Ebenen und Knoten, um horizontale Linien mit drei Pixeln, vertikale Linien mit drei Pixeln und bestimmte Variationen von diagonalen Linien in allen Winkeln zu erkennen. Auf diese Weise wusste er genau, auf welche Teile des Netzwerks gezählt werden konnte, wenn die gewünschten Muster existierten. Da dann jede Schicht eng miteinander verbunden ist, kann das gesamte Neocognitron als Ganzes jeden der im Bild vorhandenen zusammengesetzten Teile identifizieren, unabhängig davon, wo sie physikalisch vorhanden sind. Wenn also irgendwo im Bild ein bestimmtes Liniensegment vorhanden war, gab es immer einen bestimmten Knoten, der ausgelöst wurde.
Wenn Sie dieses Bild immer aktuell halten, betrachten Sie eine lineare Regression, bei der einfach eine Formel (oder eine Linie) über die Summe der quadratischen Fehler ermittelt wird, die Ihre Daten am besten durchläuft. Dies ist leicht zu verstehen. Um gekrümmte "Linien" zu finden, können wir die gleiche Summe von Produktberechnungen durchführen, außer dass wir jetzt einige Parameter von x ^ 2 oder x ^ 3 oder sogar Polynomen höherer Ordnung hinzufügen. Jetzt haben Sie einen logistischen Regressionsklassifikator. Dieser Klassifizierer kann Beziehungen finden, die nicht linearer Natur sind. Tatsächlich kann eine logistische Regression Beziehungen ausdrücken, die willkürlich komplex sind, Sie müssen jedoch immer noch die richtige Anzahl von Leistungsmerkmalen manuell auswählen, um die Daten gut vorhersagen zu können.
Eine Möglichkeit, sich das neuronale Netzwerk vorzustellen, besteht darin, die letzte Ebene als logistischen Regressionsklassifikator zu betrachten , und die verborgenen Ebenen können dann als automatische "Merkmalsauswahl" angesehen werden . Dadurch entfällt die manuelle Auswahl der richtigen Anzahl und Leistung der Eingabemerkmale. Auf diese Weise wird der NN zu einem automatischen Leistungsmerkmalselektor und kann eine beliebige lineare oder nichtlineare Beziehung finden oder als Klassifikator für beliebig komplexe Mengen dienen ** (dies setzt nur voraus, dass genügend verborgene Schichten und Verbindungen vorhanden sind, um die Komplexität von darzustellen das Modell, das es lernen muss). Letztendlich wird von einem gut funktionierenden NN erwartet, dass er nicht nur "die Beziehung" zwischen Input und Output lernt, sondern stattdessen nach einer Abstraktion oder einem Modell strebt, das dies ermöglichtverallgemeinert gut.
Als Faustregel gilt, dass das neuronale Netzwerk nichts lernen kann, was ein einigermaßen intelligenter Mensch theoretisch nicht lernen kann, wenn er genügend Zeit für dieselben Daten hat.
quelle
Sie haben vielleicht gehört, dass neuronale Netze " universelle Funktionsapproximatoren " sind. Im Wesentlichen besagt das Cybenko-Theorem, dass Sie für jede Funktionszuordnung von Real zu Real einen Näherungswert für ein neuronales Netzwerk mit Sigmoid-Aktivierungsfunktionen angeben können. Tatsächlich stellt sich heraus, dass Sie mit neuronalen Netzen jede Funktion berechnen können, die von einer Turing-Maschine berechnet werden kann (dh alles, was Sie für die Berechnung in einen Algorithmus schreiben können). Leider besagen diese Beweise nur, dass Sie für einige endliche Konfigurationen von Neuronen und Gewichten jede Funktion approximieren können.
Die Theorie ist alles schön und gut, aber Ihre Frage scheint eher dahingehend zu lauten, wie man die Berechnung einer Funktion in eine Reihe von Neuronen und Gewichten umwandelt. Betrachten Sie zur Veranschaulichung ein einfaches Beispiel - das Exklusiv-Oder. Das XOR nimmt zwei Eingaben entgegen und leitet diese Eingaben weiter. Wenn nur einer der Eingänge aktiviert ist, ist der Ausgangsknoten aktiviert. Wenn beide oder keiner der Eingänge aktiviert sind, ist der Ausgangsknoten nicht aktiviert.
Beachten Sie, dass die drei versteckten Knoten unterschiedliche Aufgaben ausführen. Die am weitesten links und am weitesten rechts befindlichen Knoten durchlaufen einfach die entsprechenden Eingangsknotenaktivierungen. Das mittlere Neuron nimmt die beiden Eingänge und negiert sie irgendwie, wenn beide eingeschaltet sind. Durch diese geschickte Kombination und Rekombination von Eingaben wird im Wesentlichen die Arbeit in einem neuronalen Netzwerk erledigt.
Natürlich muss für komplexere Funktionen das Kombinieren und Rekombinieren auf cleverere und kompliziertere Weise erfolgen, aber dies ist im Wesentlichen das, was auf einer niedrigen Ebene geschieht. Das Verrückte ist, dass dies wirklich alles ist, was Sie brauchen, um eine berechenbare Funktion zu berechnen! Aber auch Turingmaschinen erweisen sich als täuschend einfach ...
Das Problem ist, dass wir nicht wirklich eine Möglichkeit haben, das neuronale Netzwerk, das eine willkürliche Funktion berechnet, auf magische Weise zu erzeugen. Die Beweise sagen uns nur, dass es ein Netzwerk gibt, das dies tun könnte. Wenn wir unsere neuronalen Netze trainieren, versuchen wir einfach, ein Netzwerk zu finden, das ziemlich nah ist.
Im Zusammenhang mit der Bilderkennung können Sie sich vorstellen, Muster in das Netzwerk zu kodieren. Um beispielsweise die Zahl "1" zu erkennen, könnten Sie sich versteckte Knoten vorstellen, bei denen erwartet wird, dass eine Pixelspalte größtenteils oder vollständig aktiviert ist und benachbarte Pixel ausgeschaltet sind. Dieser versteckte Knoten kann ziemlich gut eine gerade Linie in dieser bestimmten Spalte erkennen. Fügen Sie genug davon zusammen, und schon bald haben Sie eine Reihe von Knoten, die dies an genügend Stellen in Ihrem Bild tun, sodass, wenn ich dem Netzwerk eine Eins zeige, genügend gerade ausgeblendete Knoten aktiviert werden, die eine '1' anzeigen. Das Problem wird natürlich, das Netzwerk zu verallgemeinern, so dass es eine Vielzahl von Eingaben erkennen kann.
Hoffentlich hilft dies Ihnen dabei, mehr oder weniger die Konzepte zu verstehen, wie ein neuronales Netzwerk Berechnungen durchführen kann. Sie sind jedoch auf einen Punkt gestoßen, der für neuronale Netzwerke ziemlich wichtig ist: Im Allgemeinen ist es bestenfalls schwierig zu verstehen, warum das Netzwerk eine bestimmte Ausgabe ausgibt, insbesondere wenn Sie bedenken, dass es sich bei den Netzwerken um Netzwerke handelt, die im Allgemeinen um eine Bilderkennung handeln groß genug, dass es Menschen schwer fällt, die einzelnen beweglichen Teile der Maschine zu verstehen. Erschwerend kommt hinzu, dass die meisten neuronalen Netze im Allgemeinen nicht für jedes kleine Merkmal, das das Netz über die Daten erfahren könnte, einen einzigen versteckten Knoten haben. Stattdessen würde das Erkennen einer geraden Linie zum Klassifizieren der Zahl "1" auf nicht zentralisierte Weise über viele versteckte Knoten erfolgen. Andere Algorithmen,
Wenn Sie mehr lesen möchten, empfehle ich dringend, dieses Tutorial bei ai junkie durchzulesen. Es führt Sie durch die Grundlagen der Funktionsweise eines neuronalen Netzwerks und gibt sogar ein einfaches Codebeispiel, mit dem Sie neuronale Netzwerke dazu bringen, einen Panzer in Richtung eines Ziels zu steuern. Das Tutorial behandelt jedoch nicht die Backpropagation, die bei weitem die häufigste Methode zum Trainieren neuronaler Netze ist, sondern verwendet einen einfachen genetischen Algorithmus. Sobald er anfängt, über Genetik zu sprechen, können Sie wahrscheinlich aufhören zu lesen ...
quelle
Das ist es, was dich verwirrt
Was sich in einem Bild befindet, wird digital durch die Werte in den Pixeln des Bildes dargestellt. Wenn Sie ein Beispiel für Farbe im Bild nehmen. Das Pixel kann drei Werte für die drei Hauptfarben Rot, Grün und Blau (
RGB
) haben. Ein Pixel mit (10,50,100
) bedeutet, dass es weniger blaue Farbelemente als ein Pixel mit (40,50,100
) enthält. Somit repräsentiert in dem Bild das erste Pixel einen Bereich mit weniger Farbe Blau. Dies sind die Informationen, die das neuronale Netzwerk von einem Ort / einer Region des Bildes zum anderen lernt und am Ende "weiß", was sich im Bild befindet. Das gleiche Prinzip gilt für andere Bildmerkmale (außer Farbe), die als Eingabe für das neuronale Netzwerk verwendet werden können. Sehen Sie sich dies und das für grundlegende Bildkonzepte an und gehen Sie dann zu diesen über um zu lernen, wie ein neuronales Netzwerk funktioniert.quelle
Alle maschinellen Lernprobleme sind gleich. Sie verfügen über einige Zugdaten, lernen ein Modell, das diese Daten darstellt, und haben die Fähigkeit, dieses Wissen so zu verallgemeinern, dass Sie mit verschiedenen Algorithmen gruppieren, klassifizieren und lernen.
In der Bilderkennung haben Sie wieder eine Reihe von Bildern, die Sie kennenlernen möchten.
Wenn Sie mehr als eine Sache erkennen möchten, verwenden Sie jeweils mehrere Klassifikatoren.
quelle
Ich möchte auch sehr beliebt für die Bilderkennung Faltungs neuronale Netze erwähnen. Hier ist ein Link zur vereinfachten Erklärung eines CNN .
Kurz gesagt, in CNN wird das Bild zunächst in Merkmale wie Kanten, Formen und Formensammlungen aufgeteilt. Dann werden diese Merkmale in ein "reguläres", vollständig verbundenes, mehrschichtiges neuronales Netzwerk (mehrschichtiges Perzeptron) "eingespeist".
Im Einzelnen wird eine Reihe von Filtern angewendet, um Features in Form einer Feature-Map zu extrahieren. Ein Filter ist nur eine Matrix (anfangs zufällig), die auf das Originalbild angewendet wird, sodass das Skalarprodukt aus Originalbildmatrix und Filtermatrix berechnet und das Ergebnis aufsummiert wird. Der Filter bewegt sich jeweils um ein Pixel (den Schritt) entlang des Originalbilds, und die Matrix der Feature-Map wird gefüllt. Für jeden Filter wird eine Feature-Map erstellt. Dann wird die Nichtlinearität mit RELU (Rectified Linear Unit) für jedes Pixel in jeder Feature-Map eingeführt. Das Pooling erfolgt nach der Faltung durch Anwendung von max (), sum () oder average (). Schließlich sehen auf diese Weise extrahierte Features wie vergrößerte Teile des Originalbilds aus. Diese Merkmale werden in ein vollständig verbundenes (alle Einheiten sind verbunden) neuronales Netzwerk eingegeben und die Wahrscheinlichkeiten für jedes Bild (sagen wir, wir haben unser Netzwerk auf Bilder von Autos, Bäumen und Booten trainiert) werden nach jedem Feedforward-Durchgang durch das Netzwerk berechnet. Das Netzwerk wird trainiert, dh die Parameter (Gewichte) und Filtermatrizen werden durch Backpropagation (Minimierung von Fehlklassifizierungen) optimiert. Wenn ein neues Bild in das trainierte Netzwerk eingegeben wird, ist nur Feedforward erforderlich, um das Bild zu identifizieren (vorausgesetzt, das Netzwerk ist genau genug, dh wir haben es mit genügend Beispielen usw. trainiert). Dies bedeutet, dass die Parameter (Gewichte) und Filtermatrizen durch Backpropagation (Minimierung von Fehlklassifizierungen) optimiert werden. Wenn ein neues Bild in das trainierte Netzwerk eingegeben wird, ist nur Feedforward erforderlich, um das Bild zu identifizieren (vorausgesetzt, das Netzwerk ist genau genug, dh wir haben es mit genügend Beispielen usw. trainiert). Dies bedeutet, dass die Parameter (Gewichte) und Filtermatrizen durch Backpropagation (Minimierung von Fehlklassifizierungen) optimiert werden. Wenn ein neues Bild in das trainierte Netzwerk eingegeben wird, ist nur Feedforward erforderlich, um das Bild zu identifizieren (vorausgesetzt, das Netzwerk ist genau genug, dh wir haben es mit genügend Beispielen usw. trainiert).
quelle
Es ist gut zu wissen, dass ANN für diese Angelegenheit jede Funktion f (x) oder f (x, y, z, ..) oder eine beliebige Multifunktion erstellen kann. Es ist aber auch wichtig zu wissen, dass Funktionen Grenzen für die Klassifizierung von Daten haben. Es gibt komplexere Relationen von Teilmengen von Potenzen von Objekten, die für die Klassifizierung wichtig sind und von solchen Funktionen nicht auf elegante oder natürliche Weise beschrieben werden. aber sind wichtig in der Sprache und Klassifizierung von Objekten. Dies kann ANN aber auch.
quelle