# Modelltraining

Beim Trainieren eines neuronalen Netzes werden nacheinander einige Schritte durchlaufen. Dazu gehört: Definition von Hyperparametern, Vorwärtspropagation, Fehlerberechnung, Rückpropagation, Optimierungsschritt, Modellvalidierung und das Early Stopping. Im Folgenden werden diese Schritte näher erläutert. In Abbildung 28 wird hervorgehoben, welche Schritte für das Modelltraining im Workflow zum Erzeugen von neuronalen Netzen von Bedeutung sind.

![Abbildung 28: Workflow - Training neuronaler Netze (Modelltraining)](https://1685596569-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtZj0m2hcxueXsQi9SHNM%2Fuploads%2Fgit-blob-3ddb493a302f2d2bfec709d2cf0564669197220d%2FModelltraining_Pipeline_Modelltraining.svg?alt=media)

## Hyperparameter definieren

Die Konfiguration der Hyperparameter, wie bspw. die Lernrate oder die Anzahl der Epochen, die das Modell trainiert werden soll, spielen eine entscheidende Rolle im Modelltraining. Diese Parameter beeinflussen, wie gut und schnell das Modell lernt und wie gut es gegen [Überanpassung](https://hahn-schickard.gitbook.io/embedml/2_ml/2.8_neuronale_netze/2.8.3.3_modellbewertung/2.8.3.3.2_herausforderungen#uberanpassung-engl.-overfitting) abgesichert ist. Daher sollten Hyperparameter sorgfältig festgelegt werden, um das Training effizient zu gestalten, wie bspw.:

* **Lernrate (engl. Learning Rate):** Die Lernrate ist ein entscheidender Hyperparameter, der die Schrittgröße angibt, mit der die Gewichte im neuronalen Netz angepasst werden. Eine zu hohe Lernrate kann zu Konvergenzproblemen führen, da das globale Optimum durch zu große Sprünge "übersprungen" wird. Eine zu niedrige Lernrate verlangsamt dahingegen das Training und außerdem kann es sein, dass nur ein lokales Optimum gefunden wird aufgrund zu kleiner Sprünge.
* **Anzahl der Epochen:** Die Anzahl der Epochen gibt an, wie oft der gesamte Trainingsdatensatz durch das Netz propagiert wird. Zu viele Epochen können zu Überanpassung (engl. Overfitting) führen, während zu wenige zu [Unteranpassung](https://hahn-schickard.gitbook.io/embedml/2_ml/2.8_neuronale_netze/2.8.3.3_modellbewertung/2.8.3.3.2_herausforderungen#unteranpassung-engl.-underfitting) (engl. Underfitting) führen können.
* **Anzahl der Schichten und Neuronen pro Schicht:** Die Architektur des neuronalen Netzes ist wichtig. Mehr Schichten und Neuronen können die Lernfähigkeit erhöhen, aber auch zu Überanpassung führen.
* **Batch Size:** Die Batch Size gibt an, wie viele Datenpunkte gleichzeitig zur Aktualisierung der Gewichte verwendet werden. Eine kleine Batch Size kann bspw. zu mehr Instabilität im Training führen, während eine große Batch Size den Speicherbedarf erhöht. Die Wahl der Batch Size hängt unter anderem von den verfügbaren Ressourcen und der Aufgabe ab.

Mehr erfahren: [AWS/Was ist Hyperparameter-Einstellung?](https://aws.amazon.com/de/what-is/hyperparameter-tuning/)

## Grundlagen des Modelltrainings

Im Folgenden werden die einzelnen Schritte, die während des Trainings eines neuronalen Netzes durchlaufen werden, näher erläutert.

### Vorwärtspropagierung

Die Vorwärtspropagierung ist der erste Schritt im Trainingsprozess. Hier werden die Eingabedaten durch das neuronale Netz geleitet. In jeder Schicht des Netzes werden die [Aktivierungsfunktionen](https://hahn-schickard.gitbook.io/embedml/2_ml/2.8_neuronale_netze/2.8.2_aktivierungsfunktionen) unter Verwendung der Gewichte und des Bias angewendet, um die Modellausgaben zu berechnen. Die Gewichte repräsentieren die Stärke der Verbindungen zwischen den Neuronen, während der Bias einen Offset darstellt, der die Ausgaben beeinflusst und dazu beiträgt, nicht lineare Muster in den Daten zu erfassen.

Mehr erfahren: [Medium/Forward propagation in neural networks](https://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250)

### Fehlerberechnung

Für die Fehlerberechnung ist die Verlustfunktion (engl. Loss function) von zentraler Bedeutung, da sie den Fehler zwischen den Modellausgaben und den tatsächlichen Daten misst. Für unterschiedliche Aufgaben werden unterschiedliche Verlustfunktionen verwendet. Die Gewichte und der Bias in den Schichten beeinflussen direkt den Wert der Verlustfunktion. Anhand des ermittelten Fehlers zwischen Modellausgabe und erwarteter Ausgabe werden wiederum die Gewichte und Bias des Modells angepasst.

Die Auswahl der richtigen Verlustfunktion hängt von der Art der Aufgabe ab. Einige Beispiele sind:

* **Mittlere quadratische Abweichung (engl. Mean Squared Error, MSE):** Geeignet für Regressionsprobleme, bei denen Vorhersagen numerische Werte sind.
* **Kategorische Kreuzentropie (engl. Categorical Crossentropy):** Für Klassifikationsprobleme mit mehreren Klassen, bei denen die Ausgaben in Wahrscheinlichkeiten für jede Klasse umgewandelt werden.
* **Binäre Kreuzentropie (engl. Binary Crossentropy):** Für binäre Klassifikationsprobleme, bei denen die Ausgaben Wahrscheinlichkeiten für zwei Klassen sind.

Die geeignete Verlustfunktion ist entscheidend für die Anpassung des Modells an die spezifische Aufgabe und ermöglicht eine gute Bewertung der Leistung. Eine nicht passende Verlustfunktion kann zu einer ungenauen Modellbewertung führen und das Training beeinträchtigen.

Mehr erfahren: [Medium/Loss Functions and Their Use In Neural Networks](https://towardsdatascience.com/loss-functions-and-their-use-in-neural-networks-a470e703f1e9), [Analytics Vidhya/Understanding Loss Function in Deep Learning](https://www.analyticsvidhya.com/blog/2022/06/understanding-loss-function-in-deep-learning/)

### Backpropagation

Die Backpropagation ist der Kern des Trainingsprozesses. In diesem Prozess wird der Fehler, der durch die Verlustfunktion ermittelt wurde, durch das Netz zurückverfolgt. Dabei werden die Ableitungen der Verlustfunktion in Bezug auf die Gewichte und den Bias berechnet. Dieser Schritt ermöglicht es dem Modell, Fehler in den Gewichten und dem Bias zu erkennen und anzupassen, um die Leistung des Netzes zu verbessern. Dieser Prozess wird in Abbildung 29 vereinfacht dargestellt. Im folgenden Abschnitt wird das Vorgehen der Backpropagation genauer beschrieben:

![Abbildung 29: Funktionsweise der Backpropagation](https://1685596569-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtZj0m2hcxueXsQi9SHNM%2Fuploads%2Fgit-blob-7cbe824af84d598fb2ae91abd282a43f80c87af5%2FBackpropagation.svg?alt=media)

1. **Fehlerpropagation:** Backpropagation ist ein grundlegender Algorithmus im maschinellen Lernen und in neuronalen Netzen. Der Name des Algorithmus beschreibt die Vorgehensweise: Der Fehler wird rückwärts durch das Netz propagiert. Dieser Prozess beginnt an der Ausgabeschicht des Netzes und bewegt sich schrittweise zurück zu den Eingangsneuronen.
2. **Gradientenberechnung:** Während die Fehler rückwärts durch das Netz propagiert werden, werden die Gradienten der Verlustfunktion in Bezug auf die Gewichte und den Bias berechnet. Dies geschieht mithilfe der Kettenregel, die es ermöglicht, die Auswirkungen von Gewichten in einer Schicht auf den Fehler in der vorherigen Schicht zu ermitteln. Das Gradientenabstiegsverfahren spielt hier eine entscheidende Rolle, da es die Berechnung und Aktualisierung der Gradienten ermöglicht.

   Mehr erfahren: [Artemoppermann/Backpropagation: Training der neuronalen Netze](https://artemoppermann.com/de/training-der-kuenstlichen-neuronalen-netze/)
3. **Gewichtsanpassung:** Der ermittelte Gradient der Verlustfunktion wird verwendet, um die Gewichte im neuronalen Netz schrittweise anzupassen. Das Gradientenabstiegsverfahren wird eingesetzt, um die Gewichte entlang des Gradienten zu aktualisieren. Dies bewirkt eine schrittweise Minimierung der Verlustfunktion. Abbildung 30 veranschaulicht, wie das Gradientenabstiegsverfahren im 3-dimensionalen Raum aussehen kann.

   ![Abbildung 30: Beispielshafte Visualisierung des Gradientenabstiegverfahrens](https://1685596569-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtZj0m2hcxueXsQi9SHNM%2Fuploads%2Fgit-blob-684189ee4109406daa900d4bd71463c845470e77%2Fgradient_descent_plot.svg?alt=media)
4. **Iterative Wiederholung:** Die Schritte 1 bis 3 werden iterativ wiederholt, um das neuronale Netz zu trainieren. Während des Trainingsprozesses wird der Fehler nach und nach reduziert, und das Modell passt sich den Daten an.

Mehr erfahren: [builtin/How Does Backpropagation in a Neural Network Work?](https://builtin.com/machine-learning/backpropagation-neural-network)

### Optimierungsschritt

Der Optimierungsschritt bezieht sich darauf, wie die Gradienten der Verlustfunktion verwendet werden, um die Gewichte und Bias des Modells anzupassen. Dies wird normalerweise mit einem Optimierungsalgorithmus wie dem Gradientenabstiegsverfahren durchgeführt, der die Gewichte schrittweise entlang des Gradienten der Verlustfunktion aktualisiert. Die Wahl des Optimierungsalgorithmus und seiner Parameter beeinflusst die Effizienz und Konvergenzgeschwindigkeit des Trainingsprozesses. Es gibt verschiedene Optimierungsalgorithmen, darunter:

* **Stochastischer Gradientenabstieg (engl. Stochastic Gradient Descent, SGD):** Ein grundlegender Optimierer, der die Gewichte nach jedem Datenpunkt aktualisiert. Er ermöglicht ein effizientes Training von Modellen auf großen Datensätzen. Allerdings kann er zu unregelmäßigen Aktualisierungen führen, was die Konvergenz beeinträchtigen kann.
* **Adaptive Momentabschätzung (engl. Adaptive Moment Estimation, Adam):** Ein adaptiver Optimierer, der die Lernrate für jedes Gewicht individuell anpasst. Er ist effektiv in vielen Anwendungen und gegenüber der Lernratenwahl robuster, allerdings kann in manchen Fällen der erhöhte Rechenaufwand ein Problem darstellen.
* **Root Mean Square Propagation (RMSprop):** Ein weiterer adaptiver Optimierer, der adaptive Lernraten durch die Berechnung von gleitenden Durchschnitten der quadrierten Gradienten verwendet. RMSprop kann die Lernrate automatisch selbst anpassen.

Die Wahl des Optimierers hängt von der spezifischen Aufgabe und den Daten ab. Adam ist oft ein guter Ausgangspunkt und für viele Anwendungen geeignet. Optimierer helfen, das Modell effizienter zu trainieren, indem sie die Gewichte anpassen, um die Verlustfunktion zu minimieren. Die falsche Wahl des Optimierers kann das Training verlangsamen oder zu Konvergenzproblemen führen. Der Optimierer ist ein wichtiger Bestandteil des Modelltrainings. Er ist verantwortlich für die Aktualisierung der Gewichte im Netz, während des Gradientenabstiegsverfahrens. Am Ende einer Trainingsepoche wird das Modell validiert, um zu überprüfen, wie gut die Gewichte des neuronalen Netzes bereits an die Daten angepasst sind.

### Modellvalidierung

Modellvalidierung ist ein wesentlicher Schritt im Prozess des Modelltrainings, um sicherzustellen, dass das zu trainierende Modell tatsächlich die gewünschten Vorhersagen oder Klassifizierungen auf neuen, bisher ungesehenen Daten treffen kann. Dieser Schritt findet am Ende einer Epoche des Trainings statt, um die Generalisierungsfähigkeit des Modells zu überprüfen und [Überanpassung](https://hahn-schickard.gitbook.io/embedml/2_ml/2.8_neuronale_netze/2.8.3.3_modellbewertung/2.8.3.3.2_herausforderungen#uberanpassung-engl.-overfitting) zu erkennen und zu verhindern. Dabei kann zwischen der einfachen Validierung mit dem Validierungsdatensatz und der Kreuzvalidierung als alternative Methode unterschieden werden:

* **Validierungsdatensatz**

  Bei dieser Validierungsmethode wird ein Validierungsdatensatz verwendet, der nicht Teil des Trainingsdatensatzes ist. Diese Methode ist einfach und schnell durchzuführen, erfordert jedoch, dass ein ausreichend großer und repräsentativer Validierungsdatensatz vorhanden ist. Es ist wichtig sicherzustellen, dass der Validierungsdatensatz keine Daten enthält, die bereits im Trainingsdatensatz enthalten sind, um eine objektive Bewertung der Modellleistung zu gewährleisten.

  Mehr erfahren: [MathWorks/Machine Learning Q\&A: All About Model Validation](https://de.mathworks.com/campaigns/offers/next/all-about-model-validation.html), [Medium/What is Model Validation.](https://medium.com/analytics-vidhya/what-is-model-validation-257686d0253e)
* **Kreuzvalidierung (engl. Cross-Validation)**

  Kreuzvalidierung ist ebenfalls eine Technik, um die Robustheit und die Fähigkeit des Modells zur Generalisierung sicherzustellen. In diesem Abschnitt werden die Konzepte der k-fachen Kreuzvalidierung und Leave-One-Out-Kreuzvalidierung beschrieben:

  * **k-fache Kreuzvalidierung:** Bei dieser Methode wird der Datensatz in k gleich große Teilmengen aufgeteilt. Das Modell wird k-mal trainiert und getestet, wobei in jedem Durchgang eine der Teilmengen als Validierungsdatensatz dient und die übrigen k-1 Teilmengen für das Training verwendet werden. Dies hilft, die Modellleistung unter verschiedenen Datenaufteilungen und letztlich die Generalisierung des Modells zu bewerten.
  * **Leave-One-Out-Kreuzvalidierung:** Bei dieser Methode wird für jeden Datenpunkt im Datensatz ein einzelnes Trainingsset erstellt, während der entsprechende Datenpunkt als Validierungsdatensatz verwendet wird. Dies bedeutet, dass für einen Datensatz mit N Beobachtungen N Iterationen durchgeführt werden. Das Modell wird in jedem Durchlauf mit N-1 Datenpunkten trainiert und mit dem ausgeschlossenen Datenpunkt validiert. Dies ermöglicht eine sehr detaillierte Bewertung, ist jedoch äußerst rechenintensiv.

  Mehr erfahren: [GeeksforGeeks/Cross Validation in Machine Learning](https://www.geeksforgeeks.org/cross-validation-machine-learning/)

### Early Stopping

Early Stopping ist eine einfache, aber effektive Methode, um [Überanpassung](https://hahn-schickard.gitbook.io/embedml/2_ml/2.8_neuronale_netze/2.8.3.3_modellbewertung/2.8.3.3.2_herausforderungen#uberanpassung-engl.-overfitting) während des Modelltrainings zu verhindern. Der Ansatz besteht darin, das Training abzubrechen, sobald die Leistung (auf dem Validierungsdatensatz) nicht mehr verbessert wird. Hier sind die Schlüsselaspekte des Early Stoppings:

* **Zweck:** Das Ziel des Early Stopping besteht darin, Überanpassung zu verhindern und Rechenressourcen zu sparen.
* **Verwendung:** Während des Trainingsprozesses wird am Ende eines Trainingsschrittes die Leistung des Modells überwacht (auf dem Validierungsdatensatz). Wenn sich die Leistung nicht mehr verbessert oder sogar verschlechtert, wird das Training frühzeitig beendet.
* **Vorteil:** verkürzt die Trainingszeit und vermeidet eine zu starke Anpassung an die Trainingsdaten.
* **Nachteil:** In einigen Fällen könnte das Early Stopping dazu führen, dass das Modell nicht seine maximale Leistungsfähigkeit erreicht, da das Training vorzeitig abgebrochen wird.

Mehr erfahren: [Machine Learning Mastery/Introduction to Early Stopping to Avoid Overtraining Neural Networks](https://machinelearningmastery.com/early-stopping-to-avoid-overtraining-neural-network-models/)

### Learning Rate Scheduler

Learning Rate Scheduler sind Werkzeuge in der Optimierung von neuronalen Netzen, die dazu dienen, die [Lernrate](#hyperparameter-definieren) dynamisch während des Trainings anzupassen. Ein Learning Rate Scheduler passt die Lernrate basierend auf bestimmten Kriterien oder Zeitpunkten an. Hier sind die Schlüsselaspekte des Learning Rate Schedulers:

* **Zweck:** Das Ziel des Learning Rate Schedulers besteht darin, die Effizienz des Trainingsprozesses zu verbessern und die Modellleistung zu optimieren, indem die Lernrate dynamisch angepasst wird.
* **Verwendung:** Während des Trainingsprozesses wird die Lernrate regelmäßig überwacht und entsprechend den definierten Kriterien oder Zeitpunkten angepasst.
* **Auswahl:** Es gibt verschiedene Arten von Learning Rate Schedulern. Die Auswahl des geeigneten Learning Rate Schedulers hängt von der spezifischen Aufgabe, der Architektur des Modells und anderen Hyperparametern ab. Ein passender Learning Rate Scheduler kann dazu beitragen, die Konvergenz zu beschleunigen, die Modellleistung zu verbessern und das Risiko von [Überanpassung](https://hahn-schickard.gitbook.io/embedml/2_ml/2.8_neuronale_netze/2.8.3.3_modellbewertung/2.8.3.3.2_herausforderungen#uberanpassung-engl.-overfitting) zu verringern.
* **Vorteil:** Verbesserte Konvergenz: Die dynamische Anpassung der Lernrate kann die Konvergenz des Modells beschleunigen, indem sie den Trainingsprozess effizienter gestaltet.
* **Nachteil:** Komplexität: Die Auswahl und Konfiguration eines Learning Rate Schedulers erfordert zusätzliche Überlegungen und kann den Trainingsprozess komplexer machen.

Mehr erfahren: [Medium/Learning Rate Scheduler](https://towardsdatascience.com/learning-rate-scheduler-d8a55747dd90), [Machine Learning Mastery/Using Learning Rate Schedule in PyTorch Training](https://machinelearningmastery.com/using-learning-rate-schedule-in-pytorch-training/)
