Es gibt mehrere, voneinander abweichende Definitionen, aber die folgende trifft es ganz gut:
Die Definition erfordert selbst nähere Erklärung:
Abstraktion setzt voraus, dass sich Eingangs- und Ausgangsgrößen signifikant unterscheiden. Ergebnisse können z.B. Bildklassifikation, Verhaltensvorhersage oder sogar Übersetzungen sein. Abstraktion bedeutet, dass es zwischen Eingangs- und Ausgangsgrößen keine einfache Beziehung gibt, sondern die Beziehung unbekannt ist, eine so genannte ‘Black Box’.
Modellierung bedeutet, dass ein Szenario erstellt wird, das eine realistische Klassifizierung oder ein realistisches Ergebnis ausgibt.
Wenn man von umfangreichen Trainingsmengen spricht, bedeutet das, dass die Eingangsdaten eine große Variabilität aufweisen. Normalerweise impliziert 'Deep Learning' oder 'Maschinelles Lernen', dass in dem Lernprozess die wichtigen Eigenschaften erkannt werden.
Viele Begriffe in diesem Dokument stammen aus der Literatur zu neuronalen Netzen und sind daher eine gute Basis für dieses White Paper. Ein neuronales Netz ist eine Art Software- oder Hardwaremodell des Gehirns, bei dem Entscheidungs- und Logikeinheiten (Neuronen, Perzeptronen) Eingangs- und Ausgangsgrößen sowie einfache Entscheidungen zu einem komplexen System (Gehirn, Netz) verknüpfen, das komplexe Entscheidungen trifft.
Ursprünglich wurden sie als künstliche neuronale Netze (KNN) bezeichnet, um sie von biologischen Systemen zu unterscheiden. Bei ihnen gibt es üblicherweise eine bestimmte Anzahl von Eingangs- und Ausgangsgrößen, eine enge Vernetzung zwischen Neuronen und mehrere Zwischenschichten. Ohne Zwischenschichten oder mit nur wenigen Zwischenschichten kann das System nur relativ simple Probleme bearbeiten. Die Anzahl der verdeckten Schichten (hidden layer) an Neuronen ist hier ein entscheidender Punkt, da Daten in diesen Zwischenneuronen verknüpft werden können und so komplexe Entscheidungen möglich werden. Das Netz bekommt also 'Tiefe', es können nicht-triviale Konzepte gelernt werden. Genau das bedeutet 'Deep'.
Im Beispiel oben gibt es drei Eingangsgrößen, eine Ausgangsgröße und zwei verdeckte Schichten. Die Neuronen sind 'stark vernetzt', ein wichtiges Merkmal neuronaler Netze. Dies erlaubt komplexe Beziehungen, Funktionen oder Entscheidungen. Ohne sie wären die Beziehungen zwischen Input- und Output relativ simpel. Intention ist nicht die Schaffung eines exakten Modells des Gehirns, sondern es sollen dessen Lernfähigkeit und die Fähigkeit zur Erkennung komplexer Zusammenhänge repliziert werden. Ein Mensch hat rund 100 Milliarden Neuronen mit einer Taktrate von etwa 1kHz, eine moderne CPU etwa 2 Milliarden Transistoren mit 3GHz.
Bevor ein neuronales Netz zur gewünschten Lösung kommen kann, muss eine Reihe von Voraussetzungen definiert werden. Ein Einfaches „fang mal an zu lernen und irgendwann gibt es ein Ergebnis“ reicht nicht aus. Im Beispiel des obigen Links ist die größte Schwierigkeit die Klassifizierung in einer Spirale, für die die Voraussetzungen extrem wichtig sind.
Was genau ein künstliches Neuron ist wurde bislang nicht spezifiziert. In einer CPU besteht eine Logik-Schaltung aus Transistoren – ein „fest verdrahtetes“ neuronales Netz wäre ebenfalls möglich, aber eigentlich soll es ja „lernfähig“ sein. Das heißt, die Antwort eines einzelnen Neurons auf bestimmte Eingangsgrößen muss sich ändern, wenn es lernt. Das bezeichnet man als „Gewichtung“ – ein Neuron bewertet (gewichtet) verschiedene Eingangsgrößen, um die gewünschte Ausgangsgröße zu erhalten. Das lässt sich per Software wesentlich leichter erreichen als per Hardware, daher sind Neuronen üblicherweise mathematische Funktionen, die Eingangs- und Ausgangsgrößen miteinander verknüpfen.
In der Lernphase ändern die Neuronen ihr Gewichtungsverhalten und nehmen eine Feineinstellung der Ausgangsgrößen in Abhängigkeit von den Eingangsgrößen vor. Es muss also ein Feedback des Gesamtergebnisses geben, das einzelne Neuronen beeinflusst. Man kann also sagen, dass Ein- und Ausgangsgrößen eines neuronalen Netzwerks bekannt sind, nicht aber die Werte der Neuronen, besonders in den verdeckten Schichten. Eine „Black Box“ also.
Ein untrainiertes neuronales Netz „weiß“ also nichts und erzeugt aus Sicht des Anwenders nur zufällige, chaotische Ergebnisse. Erst ein „trainiertes“ neuronales Netz liefert das gewünschte Ergebnis. Einfache Probleme können mit einem einfacheren Programm gelöst werden, das einfacher zu debuggen ist. Neuronale Netze werden üblicherweise für komplexe Probleme eingesetzt, da sie große Trainingsmengen benötigen. Einzelne Neuronen können komplexe Ausgangsgrößen liefern und linear oder nicht-linear auf Eingangsgrößen reagieren. Das ist ein sehr subtiler Punkt – die Neuronen müssen alle möglichen Situationen meistern können, um ein gutes Ergebnis zu liefern. Der Programmierer des neuronalen Netzes muss also entweder eine Ahnung von den internen Zusammenhängen haben oder das Netz so komplex konzipieren, dass es „alle“ Möglichkeiten abdeckt.
Neuronale Netze werden üblicherweise für Probleme genutzt, die gewisse Schwankungen aufweisen, wie z.B. die Reaktion eines Menschen auf ein reales Bild. Der Mensch identifiziert Objekte auf einem Bild aus seiner erlernten „Erfahrung“ heraus – einer Vielzahl von ähnlichen Daten mit entsprechendem Feedback, ob die Entscheidung korrekt war. Dasselbe passiert bei künstlichen neuronalen Netzen. Google hat Zugriff auf riesige Datenbestände an Bildern, Übersetzungen u.ä. und Zugang zu einer enormen Rechenleistung. Ende 2016 hat Google bekanntgegeben, dass für Google Translate maschinelles Lernen getestet wurde.
Google hat dabei festgestellt, dass neuronale Netze mit relativ kleinen Datenmengen ähnliche Übersetzungsresultate liefern wie die bis dahin genutzten Übersetzungen auf der Basis von Wörterbüchern und syntaktischen Regeln. Durch weitere Tests und unüberwachtes Lernen (unsupervised learning) konnten Übersetzungsfehler um 55-85% reduziert werden. Google hat sein internes SDK ‘TensorFlow’ auch als Open-Source-Software der Öffentlichkeit zugänglich gemacht.
Es gibt einige Abkürzungen, z.B. das Erzeugen synthetischer Daten aus echten Trainingsdaten (durch Modifikation dieser Daten durch Skalieren oder Rotation), oder die Festlegung sinnvoller Ausgangspunkte (z.B. der Anzahl der Eigenschaften, auf die Neuronen achten sollen oder der Anzahl der verdeckten Schichten des Netzes).
Neuronale Netze sind nicht die einzigen Algorithmen für maschinelles Lernen, aber die verbreitetsten. Dieses Kapitel beschreibt einige andere Methoden. Das Kapitel bezieht sich zum Teil auf diese praktische Anleitung., Empfehlenswert für eine Einführung in maschinelles Lernen und eine Übersicht über erhältliche Freeware ist auch diese YouTube Playlist von Google-Entwicklern.
Überwachtes Lernen nutzt beschriftete Bilder, aus denen der Algorithmus dann eine Funktion erzeugen soll, die das gewünschte Ergebnis liefert. Jedoch erlaubt es keine dieser Methoden zu sagen, welche Eingangsgrößen für die Programmierung des Algorithmus zu verwenden sind! Es wird also oft vor dem eigentlichen „Lernen“ ein iterativer Lern-Ansatz verfolgt, um erst einmal ein Gefühl für die „Brauchbarkeit“ der Ergebnisse zu bekommen.
Im Gegensatz zu den oben genannten Regressionsmethoden ist diese Methode für Fälle gedacht, in denen es keine perfekten Informationen gibt – ein so genanntes schlecht gestelltes Problem. Im Gegensatz zu neuronalen Netzen sind auch nur wenige Trainingsdaten verfügbar. Das heißt, aus den Trainingsdaten ergibt sich keine oder keine zufriedenstellende Gerade oder Kurve, die die Daten ausreichend klassifiziert. Die Anwendung einer der o.g. Methoden auf das Problem würde zu Unteranpassung führen (schlechte Klassifizierung). Es ist also eine Verallgemeinerung erforderlich.
Bei dieser Methode wird der passende Algorithmus „regularisiert“ (modifiziert), sodass das gewünschte Ergebnis eine neue Qualität hat – eine simplere Berechnung oder glattere Ergebniskurve. Diese Regularisierung ist eine Tikhonov-Matrix (deren Inhalt vom gewünschten Ergebnis abhängt). Um die Tikhonov-Matrix zu finden (z.B. durch Lernen oder Programmieren des Algorithmus) sind einige Annahmen zu den Eingangsdaten erforderlich. Solche Annahmen können zum Beispiel sein, dass die Daten eine Normalverteilung (Gaußverteilung) aufweisen und genügend Abweichungen enthalten, um Mittlere Abweichung und Standardabweichung grob bestimmen zu können oder dass alle Variablen dieselbe Standardabweichung haben.
CVB Polimago nutzt diese Art Algorithmus. Damit kann Polimago als Suchwerkzeug für variable Objekte genutzt werden, oder als Klassifikator im Fall von Abweichungen in den Klassen – in beiden Fällen sind die Klassen nicht komplett definiert, es findet also eine gewisse Verallgemeinerung statt. Grenzfälle sind zum Einlernen des Algorithmus hilfreich, um die Klassen voneinander abzugrenzen.
In einfachen Fällen ist das ein Plot von Merkmalen (Variablen), deren Koordinaten „Stützvektoren“ genannt werden. Eine Support Vector Machine (SVM) trennt die Klassen, indem sie eine Linie mit maximalem Abstand zu jeder Klasse ermittelt. Die Art der SVM definiert den Linientyp – linear, polynomial, logarithmisch. CVB Manto ist ein Beispiel für eine SVM.
Die folgenden Grafiken zeigen, dass die Klassen mit verschiedenen Linien komplett voneinander getrennt werden können. Indem Grenzen für die erlaubten Lösungen festgelegt werden (z.B. Glattheit der Entscheidungsoberfläche), können die Charakteristika der Lösung ändern – z.B. Verallgemeinerung vs. Genauigkeit.
„Bayes“ verweist auf Wahrscheinlichkeit. In diesem Fall gibt es die Annahme, dass eine Klasse eine Anzahl unabhängiger Merkmale hat (Farbe, Form, Größe ...) und ein Wert für eine bestimmte Klasse mit einer gewissen Wahrscheinlichkeit von den Werten einer idealen Menge abhängig ist. Durch Kombination dieser Wahrscheinlichkeiten erhält man die Wahrscheinlichkeit, mit der ein gemessener Wert für Farbe, Form oder Größe zu einer bestimmten Klasse gehört. Ein einfaches Beispiel – ein weißes, rundes Objekt mit 250mm Durchmesser ergibt einen guten Treffer für die Klasse „Fußball“. Das ändern einer der Deskriptoren würde die Wahrscheinlichkeit reduzieren, dass das Objekt als Fußball erkannt wird.
Das ist eine Erweiterung des Entscheidungsbaums mit vielen Bäumen. Hier gibt die Anzahl der Bäume, die über ein Ergebnis abstimmen, die statistische Wahrscheinlichkeit an, mit der eine Eingangsgröße in Beziehung zu einer Ausgangsgröße steht. In komplexeren Wäldern können die internen Algorithmen alle oben genannten sein! So wird es eine Abstimmungsmethode basierend auf der Annahme, dass „die meisten Methoden die meiste Zeit richtig sind“. Im Gegensatz zu Entscheidungsbäumen sind Random Forests weniger anfällig für eine Überanpassung an Trainingsdaten.
Überwachtes Lernen heißt, dass die Trainingsmenge bereits eine Wissensbasis enthält und eine Funktion erstellt werden soll, die die Beziehung zwischen Eingangs- und Ausgangsgrößen beschreibt. Auswahl und Kombination der Merkmale beeinflussen den Erfolg dieses Prozesses. Sie sind somit unerlässlich.
Unüberwachtes Lernen heißt, dass es kein vorhandenes Wissen gibt und alles Wissen im Trainingsprozess gewonnen wird. Das impliziert eine Clusterbildung von Datenpunkten im Merkmalsraum, was aber nur möglich ist, wenn Merkmale und potentielle Funktionen korrekt gewählt werden. Unüberwachtes Lernen kann also in zwei Fällen erfolgreich sein:
eine sinnvolle Antwort wird bereits vorgegeben (was Vorwissen impliziert, wodurch es eine Art überwachtes Lernen wird) oder
es gibt so viele Datensätze und Möglichkeiten, dass man mit statistischen Methoden arbeiten kann. Es sind eine Menge Erfahrung und viele Fehlversuche nötig, dahin zu kommen. Bei der Bildverarbeitung kann es bei einem Tool für unüberwachtes Lernen sinnvoll sein, alle Pixel unter einer Graustufe von 10 in einer Klasse zu gruppieren, wenn das Grundrauschen der Kamera in diesem Bereich liegt. Hierbei handelt es sich um eine rein logische Gruppierung.
Das größte Problem ist immer, mögliche Lösungen (Zuordnungen) zu bilden und die Komplexität (Anzahl verdeckter Schichten) festzulegen, damit Merkmale herausgefiltert und gruppiert werden können. Der Algorithmus allein ist noch keine Lösung.