4.4.3 Lernen von neuronalen Netzen - NerimanK/Cloud-Computing-Technology---Google-Home GitHub Wiki
In diesem Abschnitt wird allgemein erklärt, wie neuronale Netze lernen und wie der Prozess dabei aussieht. Nachdem die Netz-Struktur aufgebaut wurde, erhält jedes Neuron ein zufälliges Anfangsgewicht. Visuell sieht das wie im Kapitel XX ist. Anschließend werden die Eingangsdaten in das Netz gesträubt, die Neuronen ge-wichten die Eingangssignale mit dem Zufallsgewicht und übergeben das Ergebnis weiter an die Neuronen das nächsten Layers (Hidden Layer). Nachdem es inner-halb der Hidden Layer Schichten gefiltert wurde, wird des an das Output Layer übergeben. Dieser berechnet das Gesamtergebnis und präsentiert die Netzausga-be. Zu Anfang der Trainingszeit werden die Ergebnisse wenig mit dem bekannten tatsächlichen Ergebnis zu tun haben, da es aktuell durch Zufallsdaten generiert wurde. Es besteht die Option, die Größe des Fehlers zu berechnen und den Anteil, den jedes Neuron an diesem Fehler hatte mit dem Gewicht des Neurons, die Rich-tung zu verändern, um so den Fehler zu minimieren. Dann erfolgt der nächste Durchlauf, eine erneute Messung des Fehlers und Anpassung der Gewichte. So „lernt“ ein neuronales Netz zunehmend besser, von den Input-Daten auf die be-kannten Output-Daten zu schließen.
In den nachfolgenden Passagen werden die einzelnen Phasen und Elemente die-ses Lernprozesses im Detail beschrieben. Es beginnt mit dem Forward Pass.
Auf der einen Seite des neuronalen Netzes werden die Input-Daten eingespeist. Ferner wird jedes Input Signal an jedes einzelne Neuron des ersten Layers verteilt. Die Neuronen gewichten das ankommende Signal mit einem Input-spezifischen Gewicht, welches zu Anfang bestimmt wurde. Anschließend findet eine Addition einen sogenannten Neuron-spezifischen Bias-Term und summiert alle gewichteten Input Daten zum Output dieses einen Neurons. In den meisten Fällen werden wird der Output durch eine nicht lineare Aktivierungsfunktion geleitet, um einen be-stimmten Wertebereich des Outputs zu erzwingen. Die Aktivierungsfunktionen an dieser Stelle könnte zum Beispiel die Sigmoid oder Tangens Hyperbolicus sein. Der Output jedes Neurons innerhalb der Hidden Layer 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.
Als nächsten Step wird die Messug des Fehler vorgenommen. Das neuronale Netz hat noch nicht angefangen zu Lernen, da alle Gewichte bei der Initialisierung eines neuronalen Netzes zufällig eines vorgegebenen Wertebereichs gewählt worden sind (z.B. zwischen -1 und 1), und somit das Ergebnis ein rein zufälliger Wert sein wird. Um das Netz lernen zu lassen, wird meistens das sogenannten Supervised Learning (Überwachtes Lernen) genutzt, womit das Lernen anhand von Beispielen gemeint ist. Damit ist eine Kombination von echten Input-Output Datenpaaren festgelegt, die im Rahmen des Trainings von künstlichen neuronalen Netzen ver-wendet wird, 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. Das Ganze funktioniert folgendermaßen: Für einen Satz von Input-Daten, auch Features genannt. errechnet das noch untrainierte neuronale Netz jeweils ein Ergebnis. Das Ergebnis wird mit den bekannten Ergebnissen des Beispiel-Datensatzes, auch Targets oder Label genannt, verglichen. Anschließend wird die Größe der Abweichung des Fehler berechnet. Somit können positive als auch negative Abweichungen gleichzeitig abgebildet werden um somit die Größe der Abweichung bzw. des Fehlers zu berechnen.
Der nächste Schritt ist der Backward Pass, auch Backward Propagation genannt, in der das eigentliche Lernen beginnt. Der gemessene Fehler wird rückwärts zurück in das künstliche Neuronale Netz geleitet 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 das Neuronen Gewicht des Ergebnisses berechnet und zum anderen über die Learning Rate. Gängige Learning Rates sind z.B. 0,001 oder 0,01, d.h. nur 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 Abweichungen immer größer statt kleiner werden (Overshooting). Manchmal wird die Learning Rate daher während des Trainings zunehmend verkleinert (Learning Rate Decay), um das Minimum der Fehlerfunktion besser zu bestimmen.
Epochen und Batches wird als nächstes aufgegriffen. Nachdem alle Gewichte an-gepasst sind, erfolgt ein weiterer Durchlauf aller Input-Daten und die erneute Messung des Fehlers, sowie der Backward Propagation. Als Epoche wird dabei der komplette Durchlauf aller Input Daten bezeichnet. Ein wichtiger Bestandteil des Training sind die Trainings Epochen die ein Hyperparameter von neuronalen Netzen gelten. Dabei können die Input-Daten je nach Größe des Datensatzes auch in gleich große Gruppen (Batches) eingeteilt werden. Diese Gruppen werden als Batches bezeichnet und können eine Erleichterung während des Trainings sein.
Convergence. Overfitting und Hyperparameter-Tuning werden in diesem Part be-handelt. Je mehr Beispiele ein künstliches neuronales Netz für das Training be-kommt desto kleiner wird der Fehler bei den Ergebnissen. Das Hinlaufen und An-lehnen der Fehlerkurve an die 100% Linie wird dabei als Convergence bezeichnet. Während des Trainings wird der Verlauf der Fehlerkurve beobachtet, um ggfs. das Training zu stoppen und Anpassungen an den Hyperparametern vornehmen zu können. Jedoch kann es dazu kommen, dass das neuronale Netz eher auswendig lernt, statt ein abstraktes Konzept zu lernen. Dies kann daherkommen, wenn es bekannten Daten sehr oft gesehen hat. Dieses Problem wird auch als Overfitting bezeichnet. Um diesem Problem zu entkommen, werden die Bei-spieldaten vor dem Training unterteilt in Trainingsdaten, Testdaten und Blind-Testdaten, z.B. im Verhältnis 70 / 20 / 10. Während des Trainings werden nur die Trainingsdaten verwendet und dabei die Fehlerquote sowohl für die Trainingsda-ten als auch für die Testdaten gemessen. Der gemessene Fehler der Test-Daten wird jedoch nicht in das künstliche neuronale Netz zurück gespeist. Dann wird das neuronale Netz durch Anpassungen aller Variablen so verbessert, dass es die ma-ximale Performance in Bezug auf Trainings- und Test-Daten erreicht (Hyperpara-meter Tuning). Nachdem das Netz vollständig trainiert ist, kommen die Blind-Testdaten zum Einsatz. Ferner das künstliche neuronale Netz auch im Blind-Test gut abschneidet, ist die Wahrscheinlichkeit hoch, dass es ein abstraktes Kon-zept gut gelernt hat.
Der folgende Abschnitt ist eine Nebeninfo, die hilfreich ist während dem Trainieren das neuronale Netz nicht zu einem Overfitting kommen zu lassen. Um das Overfitting Vermeiden zu lassen, gibt es sogenannte Dropout Layer. Das Prinzip läuft darauf, während des Training 50% oder mehr Neuronen eines Layer abzuschalten. Alle Neuronen des Layers werden dadurch gezwungen, weniger spezielle und mehr abstrakte Konzepte zu lernen, um trotz der reduzierten Anzahl gut zu performen.
Zu letzt werden die Trainingsergebnisse in Checkpoint gespeichert. Sofern das Training abgeschlossen ist, werden alle Gewichte und Bias Terms als sogenannter Checkpoint gespeichert. Das neuronale Netz kann dann jederzeit mit diesen opti-mierten Gewichten und Bias Werten erneut gestartet werden. Der eigentliche Be-trieb eines trainierten neuronalen Netzes ist deutlich schlanker und schneller und kann z.B. auch auf Mobilgeräten oder normalen Laptops/PCs nahezu in Echtzeit erfolgen. Mithilfe des Checkpoint kann ein trainiertes künstliches neuronales Netz jederzeit mit neuen Daten nachtrainiert werden. Dazu werden initial die bestehen-den Werte aus dem Checkpoint in das Netz geladen, und die neuen Daten zum Training verwendet (vgl. Becker, 2017).