Die Batch Normalization wird in tiefen Neuronalen Netzwerken genutzt, um das Training zu beschleunigen und es stabiler zu machen. Es handelt sich dabei um eine zusätzliche Schicht im Netzwerk, die den Eingangsvektor normalisiert. Das bedeutet, dass die Eingangswerte so skaliert werden, dass der Mittelwert 0 und die Standardabweichung 1 beträgt.
Welche Probleme ergeben sich beim Training von Deep Neural Networks?
Beim Training eines tiefen Neuronalen Netzwerks findet nach jedem Durchlauf die sogenannte Backpropagation statt. Dabei durchläuft der Vorhersage Fehler von hinten das Netzwerk Schicht für Schicht. Dabei werden dann die Gewichtungen der einzelnen Neuronen so geändert, dass sich der Fehler möglichst schnell verringert. Dabei verändert man die Gewichte unter der Annahme, dass alle anderen Schichten gleichbleiben. In der Praxis gilt diese Bedingungen jedoch nur bedingt, da während der Backpropagation alle Schichten relativ schnell hintereinander geändert werden. In dem Paper “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift” wird dieses Kernproblem genauer beschrieben.
Das Problem an dieser Tatsache ist, dass sich mit jeder Änderung der Gewichtungen auch die statistischen Kennzahlen der Werteverteilung ändert. Das heißt nach jedem Durchlauf haben die Gewichte in einer Schicht eine neue Verteilung mit anderem Mittelwert und neuer Standardabweichung. Das führt dazu, dass das Training langsamer wird, da man niedrigere Lernraten nutzen muss, um zu guten Ergebnissen zu kommen. Das Modell muss sich nämlich in jedem Durchlauf auf die neuen statistischen Eigenschaften einstellen.
Was ist Normalisierung?
Die Normalisierung von Daten ist ein Prozess, der häufig in der Aufbereitung von Datensätzen für Machine Learning genutzt wird. Dabei sollen die Zahlenwerte von verschiedenen Attributen auf eine gemeinsame Skala gebracht werden. Die Normalisierung ermöglicht es dann, dass mann numerische Features zusammenfügen und zu einem neuen Attribut verschmelzen kann.
Angenommen man will ein Modell trainieren, dass verschiedene Marketingaktivitäten und deren Auswirkung auf den Umsatz und die verkaufte Menge erlernen soll. Dazu könnte man als abhängige Variable einfach die Summe aus verkaufter Menge und dem Umsatz berechnen. Dies kann aber schnell zu verzerrten Ergebnissen führen, beispielsweise, wenn man eine Produktserie hat in der zwar viele Produkte verkauft werden, diese aber einen verhältnismäßigen geringen Stückpreis haben. In einer zweiten Serie kann es genau andersrum sein, also die Produkte werden zwar nicht so oft verkauft, haben dafür aber einen hohen Stückpreis.
Eine Marketingaktion, die dann beispielsweise zu 100.000 verkauften Produkten führt, ist in der Produktserie mit niedrigen Stückpreisen schlechter zu bewerten, als in der Produktserie mit hohen Stückpreisen. Ähnliche Problemstellungen ergeben sich auch in anderen Feldern, zum Beispiel, wenn man sich die privaten Ausgaben von einzelnen Personen anschaut. Für zwei verschiedene Personen können Lebensmittelausgaben von 200 € sehr unterschiedlich sein, wenn man sie im Verhältnis zum monatlichen Einkommen setzt. Auch das stellt eine Normalisierung der Daten dar.
Was ist die Batch Normalization?
Beim Training von Neuronalen Netzwerken wird der komplette Datensatz in sogenannte Batches aufgeteilt. Diese enthalten eine zufällige Auswahl von Daten einer gewissen Größe und werden für einen Trainingsdurchlauf genutzt. In den meisten Fällen wird eine sogenannte Batch Size von 32 oder 64 genutzt, also befinden sich 32 oder 64 einzelne Datensätze in einem Batch.
Die Inputdaten, die in der Eingabeschicht des Netzwerkes ankommen, sind bei einem normalen Data Preprocessing bereits normalisiert. Das bedeutet, dass alle numerischen Werte auf eine einheitliche Skala und eine gemeinsame Verteilung gebracht worden und somit vergleichbar sind. Meist haben die Daten dann einen Mittelwert von 0 und eine Standardabweichung von 1.
Bereits nach der ersten Schicht jedoch haben die Werte die sogenannte Aktivierungsfunktion durchlaufen, welche zur einer Verschiebung der Verteilung führt und die Werte somit wieder denormalisiert. Mit jeder Schicht im Netzwerk wird wieder eine Aktivierungsfunktion durchlaufen und in der Ausgabeschicht sind die Zahlen nicht mehr normalisiert. Diesen Prozess nennt man in der Fachliteratur auch “internal covariate shift” (Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift).
Aus diesem Grund werden während der Batch Normalization die Werte vor jeder Aktivierungsfunktion wieder aufs neue normalisiert. Dazu wird für jedes Batch der neue Mittelwert und die neue Standardabweichung nach der Schicht berechnet und der Batch entsprechend normalisiert.
Welche Vorteile bringt die Normalisierung des Batches?
Die Anwendung der Batch Normalization bringt viele Vorteile beim Training eines Neuronalen Netzwerkes. Die am häufigsten genannten sind die folgenden:
- Schnelleres Training: Durch die Normalisierung konvergiert das Netzwerk schneller und das Training kann schneller abgeschlossen werden.
- Umgehung des Internal Covariate Shift: Wie bereits beschrieben, lässt sich durch die Normalisierung des Batches der Internal Covariate Shift zumindest abmildern. Dieser tritt zum Beispiel bei Bildklassifizierungen auf, bei denen zwischen verschiedenen Klassen, wie Hunden und Katzen, unterschieden werden soll. Die verschiedenen Fellfarben können zu unterschiedlichen Verteilungen der Bilddaten führen, die sich durch die Batch Normalization glattziehen lassen.
- Schnellere Konvergenz: Durch die Normalisierung kann das Modell schneller und vor allem unabhängiger vom jeweiligen Batch generalisieren. Dadurch verläuft die Verlustfunktion glatter und ohne viele Ausreißer. Bestimmte Modelltypen, wie beispielsweise Transformer, können ohne eine Normalisierung auch nur schwierig oder sogar gar nicht konvergieren.
- Verhindern von Overfitting: Ohne eine Normalisierung können Ausreißer in Trainingsdaten zu einer starken Anpassung des Modells führen, sodass es gute Ergebnisse für die Trainingsdaten liefert aber nur schlecht generalisiert.
- Verschiedene Netzwerkarten möglich: Die Batch Normalization lässt sich mit den verschiedensten Arten von Neuronalen Netzwerken nutzen und führt auch oft zu guten Ergebnissen. Beispielsweise kann man eine Normalisierungsschicht in Recurrent, Convolutional oder Feedforward Neural Networks einbauen.
Wie kann man die Batch Normalization in Python umsetzen?
Bei der Nutzung von TensorFlow kann man bereits vordefinierte Schichten zur Batch Normalization nutzen. Diese bieten auch noch eine Vielzahl von Parametern, sodass die Schicht ohne großen Aufwand stark individualisiert werden kann. Am Besten wird diese Schicht immer zwischen zwei Schichten eingefügt, die eine Aktivierungsfunktion haben.
import tensorflow as tf
tf.keras.layers.BatchNormalization(
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True,
beta_initializer='zeros',
gamma_initializer='ones',
moving_mean_initializer='zeros',
moving_variance_initializer='ones',
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
**kwargs
)
Wie sollte das Modell aufgebaut sein?
Bei dem Aufbau eines Modells mit einer Batch Normalization Schicht gibt es einige Dinge zu beachten. Unter anderem sollte man mit dem Einbau der Normalisierungsschicht die Lernrate erhöhen. Durch die Normalisierung wird das Modell stabiler, weshalb es auch schneller die Gewichtungen abändern kann und trotzdem noch konvergiert.
Gleichzeitig sollte man auf die Nutzung einer Dropout Layer verzichten. Zum einen bietet die Normalisierung bereits ein zusätzliches Maß an Generalisierung, weshalb die Dropout Schicht möglicherweise gar nicht von Nöten ist. Zum anderen kann es sogar das Ergebnis verschlechtern, da durch die Normalisierung und das gleichzeitige Auslassen von Nodes Noise erzeugt wird.
Schließlich kann es sinnvoll sein, die Position der Batch Normalization zu variieren und sowohl die Normalisierung vor als auch nach der Aktivierungsfunktion zu testen. Je nach Aufbau des Modell kann dies zu besseren Ergebnissen führen.
Was sind die Grenzen von Batch Normalization?
Obwohl die Batch-Normalisierung (BN) eine weit verbreitete Technik im Deep Learning ist, gibt es einige Einschränkungen und Herausforderungen, die mit ihr verbunden sind. Hier sind einige der wichtigsten Einschränkungen der Batch-Normalisierung:
- Begrenzte Leistung bei kleinen Stapelgrößen: Die Stapelnormalisierung funktioniert durch die Berechnung von Statistiken (Mittelwert und Varianz) über Ministapel von Trainingsdaten. Bei kleinen Stapelgrößen kann es jedoch vorkommen, dass die geschätzten Statistiken die tatsächliche Verteilung der Daten nicht genau wiedergeben, was die Wirksamkeit der BN einschränken kann.
- Berechnungsaufwand: Die Stapelnormalisierung erfordert zusätzliche Berechnungen und Speichernutzung, was die Trainingszeit und die Speicheranforderungen von Deep Learning-Modellen erhöhen kann.
- Schwierige Interpretation der Modellgewichte: Die Auswirkung der Stapelnormalisierung auf die Gewichte eines Modells kann schwer zu interpretieren sein, da die Gewichte nicht mehr direkt mit der Ausgabe des Netzwerks verbunden sind.
- Abhängigkeit von der Chargenreihenfolge: Die Chargennormalisierung reagiert empfindlich auf die Reihenfolge der Chargen während des Trainings, was zu unterschiedlichen Ergebnissen führen kann, wenn dasselbe Modell mit unterschiedlichen Chargenreihenfolgen trainiert wird.
- Nicht immer für bestimmte Arten von Modellen geeignet: Es gibt einige Modelltypen, wie z. B. rekurrente neuronale Netze, bei denen die Stapelnormalisierung möglicherweise nicht so effektiv ist oder besondere Anpassungen erfordert.
- Gefahr der Überregulierung: Die Batch-Normalisierung kann manchmal zu einer Überregulierung von Deep-Learning-Modellen führen, was ihre Fähigkeit zur Generalisierung auf neue Daten einschränken kann.
Trotz dieser Einschränkungen bleibt die Batch-Normalisierung in vielen Fällen ein leistungsfähiges Werkzeug zur Verbesserung der Leistung von Deep-Learning-Modellen. Es ist jedoch wichtig, ihre Grenzen zu verstehen und sie in verschiedenen Modelltypen und Trainingsszenarien angemessen einzusetzen.
Das solltest Du mitnehmen
- Die Batch Normalization ist eine zusätzliche Schicht in einem Neuronalen Netzwerk, die dafür sorgt, dass die numerischen Eingabewerte normalisiert werden.
- Sie kann dafür sorgen, dass das Modell deutlich schneller und stabiler trainiert, da Outlier weitestgehend glattgezogen werden.
- TensorFlow bietet bereits eine vordefinierte Schicht, die man in ein bestehendes Modell mit einfügen kann. Darüber hinaus gibt es viele Parameter mit denen sich die Schicht individualisieren lässt.
Was ist die Line Search?
Line Search entdecken: Optimieren Sie Algorithmen im Machine Learning indem Sie die perfekte Step Size einfacher finden.
Was ist SARSA?
Entdecken Sie SARSA: ein leistungsstarker RL-Algorithmus für fundierte Entscheidungen. Erfahren Sie, wie er die KI-Fähigkeiten verbessert.
Was sind Monte Carlo Simulationen?
Entdecken Sie die Leistungsfähigkeit und Vorteile von Monte Carlo Simulationen bei der Problemlösung.
Was ist eine Verlustfunktion?
Erforschung von Verlustfunktionen beim maschinellen Lernen: Ihre Rolle bei der Modelloptimierung und Auswirkungen auf die Robustheit.
Was ist der Binary Cross-Entropy Loss?
Eintauchen in die Binary Cross-Entropy: Eine Verlustfunktion beim maschinellen Lernen. Entdecken Sie Anwendungen und Nutzen.
Korrelationsmatrix – einfach erklärt!
Korrelationsmatrix erforschen: Korrelationen verstehen, Konstruktion, Interpretation und Visualisierung.
Andere Beiträge zum Thema Batch Normalization
- Die Keras Dokumentation zur Batch Normalization Layer findest Du hier.
- Der Artikel von Machine Learning Mystery zum Thema Batch Normalization ist auch sehr lesenswert und wurde als Quelle für diesen Beitrag genutzt.