Wie erkennt das neuronale Netzwerk Bilder?


25

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?


1
Wenn ich das richtig verstehe, ist ein neuronales Netzwerk nur eine mehrdimensionale Fläche in einem abstrakten Raum, wobei lokale Extreme zu möglichen Entscheidungen führen. Das Lehren eines neuronalen Netzwerks ist nur das Anpassen dieser abstrakten Oberfläche an ihre Aufgabe. Es ist mein noobistisches Verständnis.

Sie möchten also Erklärungen ODER Ressourcen, um mit NNs zu arbeiten? Es wäre schön zu klären.

2
Es gibt (derzeit) einen schönen kostenlosen Kurs über Coursera, der sich Ihrer Frage widmet. coursera.org/course/neuralnets
Pat

Die Coursera NN-Klasse scheint fortgeschritten zu sein und ist nicht so gut wie eine Einführung. Andrew Ng hat einige sanftere Einführungen, die Sie zum Beispiel auf Youtube finden können.
Douglas Zare

Eigentlich ist der Coursera-Kurs fortgeschritten, aber er baut sich definitiv auf und würde die Frage des OP ziemlich gut beantworten. Es gibt auch viele Beispiele für die Ziffernerkennung.
Chris A.

Antworten:


24

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.

  • es kann in der Lage sein, etwas zu lernen, was noch niemand herausgefunden hat
  • Bei großen Problemen kann eine Bank von Computern, die neuronale Netze verarbeiten, sehr viel schneller als ein Team von Leuten (zu sehr viel geringeren Kosten) wirklich gute Lösungen finden.
  • Einmal trainierte NNs liefern konsistente Ergebnisse mit den Eingaben, an denen sie trainiert wurden, und sollten gut verallgemeinern, wenn sie richtig angepasst wurden
  • NN wird nie langweilig oder abgelenkt

1
+1 für den Absatz darüber, wie die letzte Ebene die logistische Regression über die Feature-Auswahl der ausgeblendeten Ebene ausführt. Das ist eine schöne Art, über NNs nachzudenken.
Jlund3

Danke, aber ich sollte klarstellen, dass ich nicht genau sage, dass die letzte Schicht jedes ANN tatsächlich eine logistische Regressionsschicht ist, sondern nur, dass dies eine mögliche Konfiguration ist, die viele Probleme lösen könnte. Aufgrund der meist zufälligen Art und Weise, wie wir ANNs am wahrscheinlichsten trainieren, wird eine resultierende Regression auf sehr zufällige Weise über viele Knoten und Ebenen verteilt. Man könnte Teilnetzwerke trainieren, um auf bestimmte Arten zu reagieren, und dann die Ausgabe dieser Netzwerke in eine Regressionsschicht pumpen, um spezialisierte Netzwerke für bestimmte Probleme zu entwickeln. Eine ANN in Gedächtnis und Geschwindigkeit hocheffizient machen.
Mcstar

1
Diese Antwort wird immer wieder aufgerufen. Daher habe ich mir gedacht, dass sie über 5 Jahre alt ist und nur die Vorwärtskopplung von vollständig verbundenen Netzwerken berücksichtigt. Obwohl die konzeptuellen Einsichten hier immer noch gültig sind, geben sie dem Praktiker nicht genug, um tiefe NN-Konzepte zu verstehen, die im letzten Jahrzehnt zum Standard geworden sind. Das CNN (Convolution Neural Network) ist eine sehr wichtige moderne Adaption, die Deep Networks Superkräften verleiht, indem es ihnen ermöglicht, Kanten, Kontrast, Schärfe, Farbräume, Schatten und mehr zu lokalisieren und den Kontext von Features auf niedriger Ebene zu bestimmen.
Mcstar

10

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.

Ein dreischichtiges Perceptron-Netz, mit dem aus Wikipedia ausgeliehene XOR-Werte berechnet werden können.

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 ...


Vielen Dank für all die Zeit und Mühe, all diese Worte und Gedanken zusammenzufügen. Ich interessiere mich besonders für Convolutional NN zur Bilderkennung. Ich habe das Gesichtserkennungsbeispiel in der OpenCV-Bibliothek ausprobiert, aber festgestellt, dass es nur für starre Objekte geeignet ist. Hat das Neuronale Netz eine ähnliche Grenze für die Mustererkennung, dh nur für starre Objekte?
user1731927

Es gibt keinen theoretischen Grund, warum der NN (oder auch der CNN) eine Grenze für die Mustererkennung haben würde, aber wie Sie bereits festgestellt haben, sind bestimmte Probleme leichter zu erlernen als andere. Wie bei vielen Problemen beim maschinellen Lernen müssen Sie Ihr Modell wahrscheinlich ein wenig optimieren, damit es für die jeweilige Art von Problem, die Sie lösen möchten, eine gute Leistung erbringt, und NNs sind keine Ausnahme.
Jlund3

1
Hier ist ein interessantes Papier darüber, wie man NNs besser strukturieren kann, um 2D-Gitterprobleme wie die Bildklassifizierung zu lösen. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3 10.10.12

1
Tangential betrachtet ist die Schwierigkeit, "nicht starre" visuelle Objekte oder auf andere Weise Objekte, deren Kanten keine klaren Linien aufweisen, korrekt zu klassifizieren, genau der Grund, warum selbst die Natur festgestellt hat, dass Tarnung eine ausgezeichnete Ausweichstrategie ist. Denkanstoß.
mcstar

2

Das ist es, was dich verwirrt

wie es erfährt, was in einem Bild ist.

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.


1

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.

  1. Diese Bilder werden zuerst verarbeitet und einige Funktionen werden aus Bildern extrahiert (viele mögliche Bildfeatures wie SIFT, Bag of WORDS), wie Sie Pixel und ihre Werte verwenden.
  2. Geben Sie diese Bilder mit entsprechenden Merkmalsvektoren an Ihren ML-Algorithmus (Neuronales Netz, SVM oder andere).
  3. Lerne ein Modell
  4. Verwenden Sie dieses Modell, um Objekte zu erkennen, die auf den Trainingsdaten ausreichend zu sehen sind.

Wenn Sie mehr als eine Sache erkennen möchten, verwenden Sie jeweils mehrere Klassifikatoren.


1

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).


0

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.

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.