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.
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.
Die Lernrate (α) 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:
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 = ...
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.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen