Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Modelltraining | Neural Network von Grund Auf
Einführung in Neuronale Netze mit Python

Modelltraining

Swipe um das Menü anzuzeigen

Das Training eines neuronalen Netzwerks ist ein iterativer Prozess, bei dem das Modell schrittweise verbessert wird, indem seine Gewichte und Biases angepasst werden, um die Verlustfunktion zu minimieren. Dieser Prozess wird als gradientenbasierte Optimierung bezeichnet und folgt einem strukturierten Algorithmus.

Allgemeiner Algorithmus

Der Datensatz wird zunächst mehrfach in einer Schleife durch das Netzwerk geführt, wobei jeder vollständige Durchlauf als Epoche bezeichnet wird. Während jeder Epoche werden die Daten durchmischt, um zu verhindern, dass das Modell Muster basierend auf der Reihenfolge der Trainingsbeispiele lernt. Das Durchmischen sorgt für Zufälligkeit und führt zu einem robusteren Modell.

Für jedes Trainingsbeispiel führt das Modell eine Vorwärtspropagation durch, bei der die Eingaben Schicht für Schicht durch das Netzwerk geleitet werden und eine Ausgabe erzeugen. Diese Ausgabe wird anschließend mit dem tatsächlichen Zielwert verglichen, um den Verlust zu berechnen.

Durchmischen und Vorwärtspropagation

Anschließend wendet das Modell die Backpropagation an und aktualisiert die Gewichte und Biases in jeder Schicht, um den Verlust zu verringern.

Dieser Vorgang wiederholt sich über mehrere Epochen, sodass das Netzwerk seine Parameter schrittweise verfeinert. Mit fortschreitendem Training lernt das Netzwerk, immer genauere Vorhersagen zu treffen. Eine sorgfältige Abstimmung von Hyperparametern wie der Lernrate ist jedoch entscheidend, um ein stabiles und effizientes Training zu gewährleisten.

Epoche

Die Lernrate (α\alpha) bestimmt die Schrittweite bei der Aktualisierung der Gewichte. Ist sie zu hoch, kann das Modell die optimalen Werte überschreiten und konvergiert nicht. Ist sie zu niedrig, verläuft das Training langsam und kann in einer suboptimalen Lösung stecken bleiben. Die Wahl einer geeigneten Lernrate balanciert Geschwindigkeit und Stabilität im Training. Typische Werte liegen zwischen 0,001 und 0,1, abhängig von Problemstellung und Netzwerkgröße.

Das folgende Diagramm zeigt, wie eine passende Lernrate den Verlust gleichmäßig in optimalem Tempo verringert:

Verschiedene Lernraten

Abschließend spielt der stochastische Gradientenabstieg (SGD) eine entscheidende Rolle für die Trainingseffizienz. Anstatt die Gewichtsaktualisierungen nach der Verarbeitung des gesamten Datensatzes durchzuführen, aktualisiert SGD die Parameter nach jedem einzelnen Beispiel. Dies macht das Training schneller und führt zu leichten Variationen bei den Aktualisierungen, was dem Modell helfen kann, lokalen Minima zu entkommen und eine insgesamt bessere Lösung zu erreichen.

Die fit()-Methode

Die Methode fit() in der Klasse Perceptron ist für das Trainieren des Modells mittels stochastischem Gradientenabstieg verantwortlich.

def fit(self, training_data, labels, epochs, learning_rate):
    # Iterating over multiple epochs
    for epoch in range(epochs):
        # Shuffling the data  
        indices = np.random.permutation(training_data.shape[0])
        training_data = training_data[indices]
        labels = labels[indices]
        # Iterating through each training example
        for i in range(training_data.shape[0]):
            inputs = training_data[i, :].reshape(-1, 1)
            target = labels[i, :].reshape(-1, 1)

            # Forward propagation
            output = ...

            # Computing the gradient of the loss function w.r.t. output
            da = ...

            # Backward propagation through all layers
            for layer in self.layers[::-1]:
                da = ...
Code-Beschreibung
expand arrow
for epoch in range(epochs):

Durchläuft den Trainingsprozess für die angegebene Anzahl an Epochen. Jede Epoche entspricht einem vollständigen Durchlauf über den Datensatz.

indices = np.random.permutation(training_data.shape[0])
training_data = training_data[indices]
labels = labels[indices]

Mischt die Trainingsdaten und die entsprechenden Labels vor jeder Epoche. Dies verhindert, dass das Modell Muster basierend auf der Reihenfolge der Daten lernt.

for i in range(training_data.shape[0]):

Iteriert über jedes Trainingsbeispiel. Da SGD verwendet wird, werden die Gewichte nach der Verarbeitung jedes einzelnen Beispiels aktualisiert.

inputs = training_data[i, :].reshape(-1, 1)
target = labels[i, :].reshape(-1, 1)

Extrahiert das i-te Trainingsbeispiel und dessen Label. Formt sie zu einer n x 1 Matrix um, damit Matrixoperationen korrekt funktionieren.

output = ...

Führt die Vorwärtspropagation durch, um die vorhergesagte Ausgabe zu berechnen.

da = ...

Berechnet den Gradienten der Verlustfunktion bezüglich der Ausgabeaktivierung. Dies dient als Startgradient für die Rückpropagation.

for layer in self.layers[::-1]:
    da = ...

Führt die Rückwärtspropagation durch alle Schichten in umgekehrter Reihenfolge durch. Jede Schicht aktualisiert ihre Gewichte und Biases mittels Gradientenabstieg.

question mark

Wie nennt man einen vollständigen Durchlauf durch den gesamten Trainingsdatensatz?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 9

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 2. Kapitel 9
some-alt