Was ist Machine Learning?

Ein wichtiges Merkmal von Systemen mit künstlicher Intelligenz ist die Fähigkeit, selbständig zu lernen. Klassische Software funktioniert so: Die Probleme und Fragen werden auf Basis von vorher festgelegten Regeln abgearbeitet. Selbstlernende Machine Learning Algorithmen können im Unterschied dazu die besten Regeln für die Lösung bestimmter Aufgaben selber lernen. Hierbei spielen die bereits beschriebenen Neuronalen Netze eine zentrale Rolle. Ein künstliches neuronales Netz besteht aus vielen einzelnen Neuronen, die meistens in mehreren miteinander verbundenen Schichten (Layern) angeordnet sind. Die Zahl der Layer bestimmt unter anderem den Grad der Komplexität, den ein künstliches neuronales Netz abbilden kann. Viele Layer machen ein neuronales Netz „tief“ – deswegen wird in diesem Zusammenhang auch vom Deep Learning als einer Unterkategorie des Machine Learning gesprochen.

Wie geht maschinelles Lernen vor sich?

Wichtig beim sogenannten überwachten maschinellen Lernen ist die Tatsache, dass in diesem Verfahren das richtige Ergebnis für uns Menschen bekannt ist, weil wir die Eingangsdaten kennen, die in die Maschine bzw. das neuroyale Netz eingegeben werden. Eingangsdaten können zum Beispiel Zahlen sein oder Objekte oder Wörter. Das Netz oder die Maschine „kennt“ das richtige Ergebnis aber nicht, ist sozusagen blank und soll es jetzt eben „lernen“. Das Lernen funktioniert dann auf folgende Weise: Nachdem die Netz-Struktur aufgebaut wurde, erhält jedes Neuron ein zufälliges Anfangs-Gewicht. Dann werden die Eingangs-Daten in das Netz gegeben, und jedes Neuron gewichtet die Eingangs-Signale mit seinem Gewicht und gibt das Ergebnis weiter an die Neuronen der nächsten Schicht (Layer). Am letzten und abschließenden Output-Layer des Netzes wird schließlich das Gesamt-Ergebnis berechnet. Dieses wird in der Regel wenig mit dem bekannten tatsächlichen Ergebnis zu tun haben, da ja alle Neuronen ein zufälliges Anfangsgewicht haben. Man kann jedoch die Größe des Fehlers berechnen, und den Anteil, den jedes Neuron an diesem Fehler hatte, und dann das Gewicht jedes Neurons ein kleines bisschen in die Richtung verändern, die den Fehler minimiert. Dann erfolgt der nächste Durchlauf, eine erneute Messung des Fehlers und Anpassung der Gewichte und so weiter. So „lernt“ ein neuronales Netz langsam aber sicher, von den Input-Daten auf die bekannten Output-Daten zu schließen.

Auf der einen Seite des neuronalen Netzes werden die Input-Daten eingespeist. Dabei wird jedes Input Signal an jedes einzelne Neuron des ersten Layers verteilt. Jedes Neuron gewichtet dann das ankommenden Signal mit einem Input-spezifischen Gewicht, das zu Beginn zufällig vergeben wurde, addiert einen sogenannten Neuron-spezifischen Bias-Term hinzu und summiert alle in dem Maße gewichteten Input Daten zum Output dieses einen Neurons. Oft wird der Output dabei noch durch eine nicht lineare Aktivierungsfunktion geleitet, um zum Beispiel einen bestimmten Wertebereich des Outputs zu erzwingen. Meist werden hierfür Sigmoid- oder Tanh-Funktionen verwendet. Der Output jedes Neurons wird dann als Input an alle Neuronen des folgenden Layers weitergegeben. Dieser Prozess setzt sich fort, bis der Output-Layer erreicht wird, der das Ergebnis aller Berechnungen liefert.
Bisher hat also noch kein Lernprozess stattgefunden. Da alle Gewichte bei der Initialisierung eines neuronalen Netzes zufällig innerhalb eines vorgegebenen Wertebereichs gewählt werden (z.B. zwischen -1 und 1), wird das Ergebnis ein komplett zufälliger Wert sein.
Hier kommen die Anfangs bereits erwähnten bekannten „richtigen“ Ergebnisse oder auch Beispiele ins Spiel. Ein Beispiel bedeutet in diesem Fall eine Kombination von echten Input-Output Datenpaaren. Diese Beispiele werden im Rahmen des Trainings von künstlichen neuronalen Netzen verwendet, um alle Gewichte und Bias Terms optimal einzustellen, sodass das Netz am Ende des Trainings für alle Input Daten und auch für bisher noch nicht gesehene neue Input Daten das korrekte Ergebnis berechnen kann.

Für einen Satz von Input-Daten (auch Features genannt) errechnet das noch untrainierte neuronale Netz jeweils ein Ergebnis. Dieses Ergebnis wird dann mit den bekannten Ergebnissen des Beispiel-Datensatzes (auch Targets oder Label genannt) verglichen, anschließend wird die Größe der Abweichung beziehungsweise des Fehlers berechnet.
Jetzt beginnt das eigentliche „Lernen“: Der gemessene Fehler wird rückwärts zurück in das künstliche Neuronale Netz geleitet (der sog. Backward Pass oder Backward Propagation), und jedes Gewicht und jeder Bias Term wird ein kleines Stückchen in die Richtung angepasst, die den Fehler kleiner macht. Die Größe dieser Anpassung wird zum Einen über den Anteil, den ein bestimmtes Neuronen-Gewicht am Ergebnis hatte (d.h. über sein aktuelles Gewicht) berechnet, und zum Anderen über die sogenannte Learning Rate, die zu den wichtigsten Einstellgrößen (Hyperparameter) von neuronalen Netzen gehört.
Gängige Learning Rates sind z.B. 0,001 oder 0,01. Das bedeutet: Lediglich ein Hundertstel bis ein Tausendstel des errechneten Fehlers wird pro Durchlauf korrigiert. Ist die Anpassung pro Durchlauf zu groß, kann es dazu kommen, dass das Minimum der Fehlerkurve verfehlt wird und die Abweichnungen immer größer statt kleiner werden. Dann spricht man von „Overshooting“. Manchmal wird die Learning Rate daher während des Trainings zunehmend verkleinert, um das Minimum der Fehlerfunktion besser zu bestimmen.
Nachdem alle Gewichte angepasst sind, erfolgt ein erneuter Durchlauf aller Input-Daten und die erneute Messung des Fehlers sowie die Back-Propagation dieses Fehlers zur erneuten Anpassung der Gewichte. Ein kompletter Durchlauf aller Input-Daten wird dabei jeweils als Epoche bezeichnet. Dabei können die Input-Daten je nach Größe des Datensatzes auch in gleich große Gruppen (Batches) eingeteilt werden, und das Training kann jeweils pro Batch durchgeführt werden. Dies kann z.B. sinnvoll sein, um ein künstliches neuronales Netz schneller lernen zu lassen, oder um Begrenzungen der Rechenkapazität des ausführenden Computers einzuhalten.

Je mehr Beispiele ein künstliches neuronales Netz für das Training bekommt und je öfter es diese gesehen hat, desto kleiner wird der Fehler bei den Ergebnissen. Eine Gefahr gibt es dabei: Wenn ein Neuronales Netz während des Trainings alle bekannten Daten sehr oft gesehen hat, kann es dazu kommen, dass das künstliche neuronale Netz diese Daten eher auswendig lernt, statt ein abstraktes Konzept zu lernen. Dieses Problem wird auch als Overfitting bezeichnet. Da neuronale Netze auch hochkomplexe Funktionen abbilden können, besteht die Gefahr, dass sie irgendwann die perfekte Funktion für jeden bekannten Datenpunkt gefunden haben, diese Funktion aber für neue Daten nicht gut funktioniert.
Um sicherzustellen, dass ein neuronales Netz von bekannten Beispieldaten abstrahieren und auch korrekte Ergebnisse für bisher nicht gelernte Input-Daten liefern kann, werden die Beispieldaten vor dem Training unterteilt in Trainingsdaten, Testdaten und Blind-Testdaten, z.B. im Verhältnis 70 / 20 / 10.
Während des Trainings werden dann nur die Trainingsdaten verwendet, und die Fehlerquote wird jeweils sowohl für die Trainingsdaten, als auch für die Test-Daten gemessen. Der gemessene Fehler der Test-Daten wird jedoch nicht in das Netz zurück gespeist. Dann wird das neuronale Netz durch Anpassungen aller Variablen so verbessert, dass es die maximale Performance in Bezug auf Trainings- und Test-Daten erreicht.
Erst wenn das Netz vermeintlich vollständig trainiert ist, kommen die Blind-Testdaten zum Einsatz. Wenn das künstliche neuronale Netz auch im Blind-Test gut abschneidet, ist die Wahrscheinlichkeit hoch, dass es ein abstraktes Konzept gut gelernt hat.

Wie können wir Machine Learning für uns nutzen?

Wenn das künstliche neuronale Netz fertig trainiert ist, werden alle Gewichte und Verzerrungen als sogenannter „Checkpoint“ gespeichert. Das neuronale Netz kann dann jederzeit mit diesen erneut gestartet werden. Der eigentliche Betrieb eines trainierten neuronalen Netzes ist deutlich einfacher und schneller als der Lernprozess vorher und kann deshalb beispielsweise auch auf Mobilgeräten oder normalen Rechnern nahezu in Echtzeit erfolgen. Ein fertig trainiertes künstliches neuronales Netz kann jederzeit mit neuen Daten nachtrainiert werden, da die „Checkpoints“ ja bereits bekannt sind. Es ist auch möglich, ein vortrainiertes neuronales Netz als Basis für das Training mit eigenen Daten zu verwenden. Bei diesem sogenannten Fine-Tuning von künstlichen neuronalen Netzen kann so auf bereits gelernte allgemeine Strukturen zurückgegriffen werden und das Netz muss nur noch die neuen Klassen lernen. Dies ist insbesondere bei der sehr rechenintensiven Verarbeitung von großen Datenbeständen sehr nützlich, sowohl bei Bildern, als auch bei Sprache und Texten oder anderen Arten von Daten. Vortrainierte künstliche neuronale Netze oder auch anpassbare API Services werden von IBM, Microsoft, Amazon, und Google angeboten.

Was ist mit überwachtem Lernen gemeint?

Für das beschriebene überwachte Lernen (Supervised Learning) wird we beschrieben eine große Menge an Beispieldaten benötigt. Eine große Menge bedeutet hier beispielsweise eine Million Beispiele. Zwar können künstliche neuronale Netze teilweise auch mit kleineren Datensätzen schon brauchbare Ergebnisse erzielen, aber je mehr Daten zur Verfügung stehen, desto besser. Das Supervised Learning selber kann noch weiter unterteilt werden in verschiedene Methoden der Datenverwendung und Datenweitergabe innerhalb von künstlichen neuronalen Netzen. Bei sogenannten Recurring Neural Networks fließt z.B. das Ergebnis der vorherigen Input-Daten in die Berechnung des aktuellen Outputs ein. So können beispielsweise Zeitreihen und Texte analysiert und verarbeitet werden. Das gleiche gilt auch bei Long-Short-Term-Memory Netzen (LSTM) und Sequence-to-Sequence Netzen, die unter anderem für die Spracherkennung und für die Übersetzung von Texten verwendet werden. Für die Bildverarbeitung werden sogenannte Convolutional Neural Networks (CNN) verwendet, welche Bilder mit einem Raster abtasten und von tieferen Ebenen (Punkten, Linien etc.) in jedem Layer weiter abstrahieren zu höheren Konzepten (ein Gesicht, ein Haus etc.).

Was ist Reinforcement Learning?

Weitere Verfahren, wie künstliche neuronale Netze lernen können, sind das Unsupervised Learning, (unüberwachtes lernen) bei dem Systeme nur Input-Daten erhalten und selber versuchen, diese sinnvoll zu klassifizieren. In diesem Zusammenhang wird von „starker KI“ gesprochen.

Auch das Reinforcement Learning gehört zum unbewachten oder autonomen Lernen. Beim Reinforcement Learning kann ein neuronales Netz selber die Input Daten steuern (z.B. die Tasten eines Gaming Controllers) und dynamische Output-Daten zurückerhalten zusammen mit einer Aufgabe bezüglich dieser Output-Daten (z.B. einen Punktestand zu maximieren).

Team WEGOFIVE
team@wegofive.net
No Comments

Post A Comment

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.