Eine superschnelle Einführung in Deep Learning

Eine der aktuell am häufigsten diskutierten Technologietrends ist die künstliche Intelligenz. In den letzten Jahren gab es eine Vielzahl von Innovationen, zahlreiche Artikel und verschiedene Interviews der Elite des Tals, die ein neues Zeitalter der Technologie ankündigten. Dieses Stück wird kein Argument für oder gegen den KI-Hype sein, sondern eher dazu dienen, Sie schnell in die grundlegende Technologie einzuführen, die den Hype derzeit untermauert: Deep Learning .

Die Deep-Learning-Bewegung wurde vor allem durch den Einsatz sogenannter neuronaler Netze vorangetrieben . Entgegen der landläufigen Meinung ahmen sie die Funktionsweise des Gehirns nicht nach. Darüber hinaus wurden viele der Ideen für neuronale Netze in den 90er Jahren entwickelt, aber erst in diesem Jahrzehnt wurden sie vom Mainstream übernommen. Dies liegt daran, dass die differenzierte Leistung neuronaler Netze gegenüber herkömmlichen Algorithmen des maschinellen Lernens nur bei großen Datenmengen sichtbar wird – die wir bis zu diesem Jahrzehnt einfach nicht besaßen oder mit denen wir nicht arbeiten konnten. Mit dem Aufkommen der GPU und der Fähigkeit der Cloud, riesige Datensätze zu speichern, ist es uns jedoch endlich gelungen, neuronale Netze in großem Maßstab für viele Lernaufgaben bereitzustellen. Dies hat dazu geführt, dass Computer die Welt deutlich besser verstehen können – von Bildern und Videos bis hin zu gesprochener und geschriebener Sprache.

Was ist ein neuronales Netzwerk und wie funktioniert es?

Ein dreischichtiges neuronales Netzwerk

Das obige Bild zeigt ein dreischichtiges neuronales Netzwerk (2 versteckte Schichten + 1 Ausgangsschicht). Deep Learning bedeutet im Grunde, dass wir ein neuronales Netzwerk mit mehr als einer verborgenen Schicht implementiert haben.

Jedes neuronale Netzwerk beginnt mit einer Eingabeschicht und endet schließlich mit einer Ausgabeschicht. Die Ebenen dazwischen, die als versteckte Ebenen bezeichnet werden, transformieren nacheinander die Eingabe, bis sie die Ausgabeebene erreicht, die für die endgültige Antwort verantwortlich ist (ein Hauspreis, eine Katze oder ein Hund? Usw.). Das Ziel der Bereitstellung eines neuronalen Netzwerks für eine Lernaufgabe besteht darin, die verborgenen Schichten des Netzwerks dazu zu bringen, die am besten geeigneten und verallgemeinerbaren Transformationen von Eingaben aus früheren Beispielen zu lernen.

Was bedeutet das?

In den einfachsten Fällen sind Eingaben in ein neuronales Netzwerk ein Vektor von Zahlen , bezeichnet als x = [x1, x2,… .xn]. Jede Komponente von x wird wie x1 durch einen einzelnen Kreis in der Eingabeebene im obigen Bild dargestellt. Sie können sich also vorstellen, dass jeder Kreis in der Eingabeebene eine einzelne, eindeutige Zahl von x enthält. Jede dieser Zahlen wird mehreren Kreisen in der ersten verborgenen Ebene, den so genannten versteckten Einheiten (oder künstlichen Neuronen), zugeführt (dargestellt durch den nach vorne zeigenden Pfeil).

Eine einzelne versteckte Einheit macht zwei Dinge:

Zunächst nimmt er jede der ihr zugeführten Eingangskomponenten (z. B. x1, x2 und x3) und multipliziert sie mit den Gewichten (w1, w2, w3), wobei er ergibt: w1 * x1, w2 * x2 und w3 * x3. Dann addiert es einen “Vorspannungs” -Vektor (b1, b2, b3) und erzeugt: (w1 · x1 + b1), (w2 · x2 + b2) und (w3 · x3 + b3). Dann addiert es diese 3 Zahlen zu einem einzigen Ergebnis. Wir bezeichnen dieses Zwischenergebnis mit dem Buchstaben z .

Zweitens wirft die versteckte Einheit z einfach in eine Funktion „g“ (im akademischen Sprachgebrauch als Nichtlinearität bezeichnet ), deren Ausgabe g (z) eine Zahl zwischen beispielsweise 0 und 1 oder -1 und 1 ist, abhängig von Wahl von g.

Diese Zahl, die Ausgabe der verborgenen Einheit, wird auf ähnliche Weise als Eingabekomponente einer verborgenen Einheit in der nächsten verborgenen Schicht zugeführt. Dies ist, was ein einzelner Pfeil zwischen ausgeblendeten Einheiten in den Ebenen 1 und 2 des obigen Bildes darstellt.

Wenn wir dies zusammenfassen, beginnen wir im Wesentlichen mit einer Eingabe, die eine Ansammlung von Zahlen ist. → Lassen Sie jede versteckte Einheit die beiden obigen Transformationen auf diese Zahlen anwenden. → Führen Sie jeden ihrer Ausgänge den nächsten versteckten Einheiten zu. Dieser Prozess endet, wenn wir die Ausgabeebene erreichen – die ihr eigenes g (z) berechnet, das uns eine endgültige Antwort gibt. Dieser Zahlenfluss von der Eingabe bis zur Beantwortung über das Netzwerk wird als Vorwärtsausbreitung bezeichnet .

Dies ist die Hälfte der Funktionsweise eines neuronalen Netzwerks! Wie bereits erwähnt, besteht das Ziel des Netzwerks darin, die am besten geeigneten und verallgemeinerbaren Transformationen von Eingaben zu lernen. Dies bedeutet im Grunde, dass wir die besten Gewichte (w1, w2, w3) und Vorspannungszahlen (b1, b2, b3) für jede verborgene Ebene lernen möchten, sodass die Ausgabeebene einen Großteil ihrer Antworten korrekt erhält.

Dazu benötigen wir zunächst einen Datensatz mit Beispielen (dh mit Eingabevektoren x und einer korrekten Antwort für jedes x), aus denen das Netzwerk lernen kann. Dies wird als Trainingssatz bezeichnet . Genauso wichtig ist es, eine quantifizierbare Methode zu haben, um zu bestimmen, wie gut das Netzwerk bei jedem Eingang x funktioniert. Dies geschieht über eine Verlustfunktion .

Eine Verlustfunktion nimmt die von der Ausgabeebene bereitgestellte Antwort und vergleicht sie mit der richtigen Antwort, die vom Trainingssatz für dasselbe x bereitgestellt wird. Je ähnlicher die Antworten sind, desto geringer ist der Verlust und umgekehrt. Stellen Sie es sich als Feedback-Mechanismus für das Netzwerk vor. Grob gesagt besteht das Ziel des Netzwerktrainings darin, die Gewichte (w1, w2, w3) und Vorspannungszahlen (b1, b2, b3) für jede verborgene Schicht so zu ermitteln, dass der Gesamtverlust minimiert wird (dh die Gesamtsumme minimiert wird) Anzahl falscher Antworten), die wir auf unserem Trainingsset haben.

Bildquelle

Bildlich sieht eine Verlustfunktion wie die blaue Kurve im obigen Bild aus. Das Ziel des Netzwerks ist es, Gewichte und Vorspannungen für seine verborgenen Schichten zu finden, so dass sein Gesamtverlust auf dem Trainingssatz bei oder in der Nähe von „Jmin“ liegt – dem Punkt des kleinsten Gesamtverlusts. Denken Sie der Einfachheit halber an Jmin = 0, dh wir möchten 0 Fehler, wenn wir das Netzwerk trainiert haben.

Nehmen wir konkret an, wir haben 10 Trainingsbeispiele. Es sei daran erinnert, dass jedes Trainingsbeispiel aus einem Vektor „x“ und einer korrekten Antwort besteht. Wir werden jedes x über unser Netzwerk weiterleiten und 10 endgültige Antworten erhalten. Wir werden jede dieser Antworten mit der entsprechenden richtigen Antwort vergleichen und berechnen, wie gut wir bei den 10 Beispielen mit dem Gesamtverlust abgeschnitten haben. Dieser Gesamtverlust wird ein Punkt auf der blauen Kurve sein.

Da unser Ziel ein Totalverlust von Jmin ist, fangen wir an, unsere Gewichte und Vorspannungen für jede verborgene Schicht zu optimieren (dh den Wert jedes Gewichts und jeder Vorspannung leicht zu ändern), basierend darauf, wie gut wir es gemacht haben, so dass die nächste Wenn wir unsere Trainingsbeispiele weiterleiten, befinden wir uns an einem Punkt auf der blauen Kurve, der näher an Jmin liegt.

Der Prozess der systematischen Anpassung unserer Gewichte und Vorspannungen basierend auf unserer Leistung wird als Gradientenabstieg bezeichnet, und der Prozess, der für jede verborgene Schicht durchgeführt wird, wird als Rückausbreitung bezeichnet

Sobald die Gewichte und Vorspannungen des Netzwerks so sind, dass sie konsistent einen Gesamtverlust nahe 0 verursachen, wird gesagt, dass das Netzwerk trainiert und bereit für die Bereitstellung ist. Wir können dann neue Eingaben akzeptieren x, deren richtige Antwort wir nicht kennen, und darauf vertrauen, dass unser Netzwerk die richtige Antwort findet – ob es ein Bild einer Katze erkennt oder den Preis eines Hauses vorhersagt.

Zusammenfassung

  1. Wir haben einen oft großen Datensatz mit Beispielen (x, Antwort), aus denen das Netzwerk lernen kann.
  2. Wir leiten diese Beispiele über unser Netzwerk weiter, um zu sehen, wie die Antworten des Netzwerks für jedes x mit den richtigen Antworten im Datensatz übereinstimmen.
  3. Wir optimieren die Gewichte und Vorspannungen des Netzwerks für jede verborgene Schicht, sodass wir bei unserer nächsten Iteration der Vorwärtsausbreitung besser abschneiden können
  4. Wir wiederholen die Schritte 2 und 3, bis unser Gesamtverlust so nahe wie möglich bei 0 liegt.
  5. Wir stellen unser Netzwerk auf neuen Eingängen x bereit, um Antworten zu erhalten, die wir noch nicht haben.

Hoffentlich haben Sie eine Vorstellung davon, wie neuronale Netze und folglich tiefes Lernen unter der Haube funktionieren. Für alle, die mit tiefem Lernen vertraut sind, habe ich bestimmte Dinge absichtlich vereinfacht und andere ausgelassen, so dass dieses Stück für diejenigen zugänglich ist, die sich vorher nicht mit dem Thema befasst haben.

Schlussgedanken

Dieses Stück war eine sehr vereinfachte Einführung in das Feld des tiefen Lernens, gab Ihnen aber dennoch einen Einblick in die Kernprozesse, die unter der Haube dieser Technologie ablaufen. Es gibt viele innovative (und viel kompliziertere!) Varianten neuronaler Netze, die von Unternehmen wie Google, Facebook, Amazon usw. eingesetzt werden, um Technologien und Produkte wie selbstfahrende Autos, Alexa und dergleichen herzustellen. Es muss angemerkt werden, dass neuronale Netze meines Wissens noch einen langen Weg vor sich haben, bevor sie die menschliche Intelligenz nachahmen können. Sie sind bei bestimmten Aufgaben besser als Menschen, aber bei weitem nicht annähernd so, wie Menschen die Welt wahrnehmen. Schließlich ist ein großes Anliegen neuronaler Netze (und des tiefen Lernens), dass wir immer noch nicht vollständig verstehen, wie Netze abstrakte Konzepte lernen. Soweit ich weiß, beschränken wir uns darauf, zu erklären, wie ein Netzwerk bestimmte Schlussfolgerungen gezogen hat, um zu einer bestimmten Antwort zu gelangen. Dies ist heute ein interessantes Forschungsgebiet.

Wenn Sie mehr über Deep Learning erfahren möchten, empfehle ich Andrew Ngs 5-Kurs-Spezialisierung auf Deep Learning. Ich habe es kürzlich fertiggestellt und bin von dem Wissen über das Thema zu einem ziemlich guten Verständnis aller Kernideen auf dem Gebiet übergegangen.

Wenn Sie Fragen haben oder über dieses Thema chatten möchten, können Sie sich gerne an uns wenden! Ich bin @anaganath auf Twitter.