KNN trainieren
Im Training werden, anhand von vorhandenen Daten und den Zusammenhängen aus Eingabe- und Ausgabewerten innerhalb dieser Daten, Parameter des KNN angepasst. Wenn ein KNN den Zusammenhang zwischen der Anzahl der teilnehmenden Personen einer Veranstaltung und den Kosten der Durchführung dieser Veranstaltung erlernen soll, also darauf trainiert werden soll, diesen Zusammenhang zu finden, dann findet der Trainingsprozess anhand bereits vorhandener Daten statt. Für den einfachsten Fall bei der Verwendung eines Neurons, versuchen wir uns vorzustellen, wie die beiden möglichen Parameter, also die Geradensteigung und der Achsenabschnitt verändert werden können. Die erste Veranstaltung unseres Datensatzes, dargestellt im Abschnitt Lineare Regression hat 4 teilnehmende Personen und Kosten von 210 €. Eine menschliche Schätzung wäre dann, 50 € als Geradensteigung zu verwenden und 10 € als Achsenabschnitt, woraus die Geradengleichung 50 * x +10 folgt. Angewendet auf den zweiten Datenpunkt mit 7 teilnehmenden Personen und 190€ Kosten für die Durchführung erkennt man, dass diese Geradengleichung weit danebenliegt. Eingesetzt erhalten wir nämlich 50 * 7 + 10 = 360, also fast das Doppelte der Kosten. Doch woran liegt das, was ist der größte Fehler? Als Fehler wird hierbei die Differenz zwischen dem Ausgabewert des Neurons bzw. der Geradengleichung und dem bekannten wahren Ausgabewert, den Kosten der Veranstaltung, bezeichnet. Eine Differenz/ein Fehler von 360 - 190 = 170 ist vor allem auf die hohen Kosten pro teilnehmender Person zurückzuführen, also müssen wir diesen Wert, als verantwortlichen Parameter für den Fehler des Neurons bzw. der Geradengleichung anpassen. Wir wollen einerseits die neuen Datenpunkte (der zweiten Veranstaltung) in unsere Geradengleichung mit aufnehmen, aber auch nicht alles bisher Gelernte vergessen, indem wir die Geradengleichung nur für diesen neuen Datenpunkt anpassen. Sagen wir also, wir nehmen die neuen Erkenntnisse zu 10% in unsere Parameter mit auf, wir passen die Geradensteigung also um 10% des Wertes des Fehlers an. Wir verringern den Wert der Geradensteigung m also um 170 * 10 % = 17 und erhalten eine Geradensteigung von 33. Wenden wir diese neue Geradengleichung (33 * x + 10) jetzt für die beiden Datenpunkte, die wir schon kennen, an, so erhalten wir Kosten für die beiden Veranstaltungen von 142€ bzw. 241€ und Fehler in Höhe von 68€ für die erste und 51€ für die zweite Veranstaltung. War der mittlere Fehler also vor der ersten Anpassung des Parametes des Geradenanstiegs noch (0 + 170) / 2 = 85, so ist dieser jetzt auf (68 + 51) / 2 = 59,5 gesunken. Es bestehen jetzt zwei mögliche nächste Schritte, entweder wir nehmen noch weitere Datenpunkte mit auf, erhöhen damit unseren Trainingsdatensatz, also die Daten bekannter Zusammenhänge, die wir für das Training verwenden. Oder wir gucken erneut, wo der größte Fehler ist und wenden das gerade gezeigte Aktualisieren der Parameter wieder an. Der zweite Ansatz heißt dann, wir erhöhen die Anzahl an Trainingsepochen, also die Anzahl der Durchläufe mit den bekannten Daten, um die Parameter unseres KNN, hier ja nur ein Neuron, anzupassen.
Für das Training von KNN wird meistens der sogenannte stochastische Gradientenabstieg verwendet, um die Gewichtungsfaktoren als Parameter des KNN anzupassen. Diese Gewichtungsfaktoren wurden verwendet, um mehrere Eingabegrößen für ein Neuron unterschiedlich gewichten zu können, also anpassen zu können, welche Eingabegrößen wichtiger sind, um die Zusammenhänge zwischen den Eingabegrößen und den Ausgabegrößen darzustellen. Für den stochastischen Gradientenabstieg werden drei Schritte benötigt:
- Vorwärtsberechnung durch das KNN zur Bestimmung des Fehlers.
- Rückwärtsberechnung durch das KNN zur Bestimmung der Gradienten.
- Gradientenabstieg zur Anpassung der Gewichtungsfaktoren.
In der Vorwärtsberechnung wird die Ausgabe des KNN berechnet. Es werden also die Eingabegrößen genommen und mit den bereits vorhandenen Gewichtungsfaktoren (welche anfangs zufällig initialisiert sind) die Ausgabewerte eines jeden Neurons und final die Ausgabewerte des KNN berechnet. Diese Ausgabewerte werden mit den aus den Trainingsdaten bekannten wahren Ausgabewerten verglichen. Für unser Beispiel sind der wahre Ausgabewert die Kosten bereits durchgeführter Veranstaltungen. Die Differenz zwischen diesen wahren Ausgabewerten und den Ausgabewerten des KNN wird als Fehler bezeichnet und soll minimiert werden.
Hierfür kommt der zweite Schritt ins Spiel, die Rückwärtsberechnung. Wie wir es bereits vereinfacht für nur ein Neuron durchgeführt haben, wird nun für jedes Neuron des KNN rückwärts (also von den Ausgabegrößen hin zu den Eingabegrößen) der Gradient für jedes Neuron bestimmt. Den Gradienten kann man sich vereinfacht vorstellen als eine Größe für den Anteil am Fehler, also wie sehr ein Gewichtungsfaktor eines Neurons einen Einfluss auf die Differenz am Ende des KNN hat. Diese Gradienten werden nacheinander, rückwärts, für jedes Neuron bzw. jeden Gewichtungsfaktor eines Neurons bestimmt. Hierfür gibt es geregelte mathematische Verfahren, die dies automatisiert durchführen können, denn je größer das KNN, desto aufwändiger wird dieser Prozess.
Als dritter und entscheidender Schritt kommt nun der eigentliche Gradientenabstieg ins Spiel. Es hat sich gezeigt, dass es zielführender ist, nicht alle Gewichtungsfaktoren gleichzeitig anzupassen, sondern stochastisch (zufällig) Gewichtungsfaktoren auszuwählen und diese anzupassen. Ein solches Vorgehen erhöht die Rechenzeit des Trainings zwar etwas, verhindert aber, dass sich das KNN in lokalen Minima einpendelt, als das globale Minimum treffen zu können. Die zufällig ausgewählten Gewichtungsfaktoren werden dann entsprechend ihres Gradienten (Anteil am Fehler) und der sogenannten Lernrate angepasst. Die Lernrate haben wir bereits zuvor verwendet, ohne den Begriff zu verwenden. Im oberen Beispiel waren es die 10%, also eine Lernrate von 0,1. Eine höhere Lernrate (maximal 1, also 100%) beschleunigt das Aktualisieren der Gewichtungsfaktoren, verhindert aber ein feines Einstellen dieser, was bei komplexen Funktionen notwendig ist. Eine kleinere Lernrate verlängert allerdings den Trainingsprozess.
Durch ein solch automatisiertes Training, welches durch die gesteigerte Verfügbarkeit von Rechenleistung in den letzten Jahren erst ermöglicht wurde, können insgesamt sowohl größere Datensätze als auch größere KNN trainiert werden. Beide Faktoren ermöglichen eine komplexere Aufschlüsselung der Zusammenhänge zwischen Eingabe- und Ausgabegrößen, die KNN können also detailliertere Unterschiede in Daten auffinden und für die Anwender:innen nutzbar machen. In letzter Zeit hat sich allerdings auch der Trainingsprozess immer weiter verändert, um entweder das Training der Gewichtungsfaktoren eines KNN zu beschleunigen oder detailliertere Auflösungen zu ermöglichen. Beispielsweise hat der Wandel in der Nutzung der ReLU-Aktivierungsfunktion anstelle der Sigmoid-Aktivierungsfunktion für die einzelnen Neuronen das Training deutlich beschleunigt, da die Gradienten im Trainingsprozess so deutlich schneller berechnet werden können.