Zum Inhalt springen

Was ist die Batch Normalization?

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.

Aufbau eines Perceptrons
Single Layer Perceptron | Quelle: Autor

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.
Overfitting
Overfitting am Beispiel | Quelle: Autor

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.
Aktivierungsfunktion / Activation Function

Was ist eine Aktivierungsfunktion?

Erfahren Sie mehr über die Bausteine des Deep Learnings: Maximieren Sie die Modellleistung mit der richtigen Aktivierungsfunktion.

Regularization / Regularisierung

Was ist die Regularisierung im Machine Learning?

Regularisierung verstehen: Erfahren Sie, wie Regularisierungstechniken die Modellleistung verbessern und eine Überanpassung verhindern.

Conditional Random Field

Was ist ein Conditional Random Field (CRF)?

Entfesseln Sie die Macht der Conditional Random Fields: Entdecken Sie fortgeschrittene Techniken und Anwendungen in diesem Leitfaden.

Swarm Intelligence / Schwarmintelligenz

Was ist die Schwarmintelligenz?

Entdecken Sie die Kraft der Schwarmintelligenz - ein System, das von der kollektiven Intelligenz sozialer Lebewesen inspiriert ist.

Bias-Variance Tradeoff

Was ist der Bias-Variance Tradeoff?

Bias-Variance Tradeoff beim Machine Learning: Der Kompromiss zwischen Einfachheit und Flexibilität des Modells. Erfahren Sie mehr!

Semi-Supervised Learning

Was ist Semi-Supervised Learning?

Mehr Dateneinblicke mit Semi-Supervised Learning: Entdecken Sie, wie der hybride Ansatz mit gelabelten und nicht gelabelten Daten funktioniert.

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.
Das Logo zeigt einen weißen Hintergrund den Namen "Data Basecamp" mit blauer Schrift. Im rechten unteren Eck wird eine Bergsilhouette in Blau gezeigt.

Verpass keine neuen Beiträge!

Wir versenden keinen Spam! Lies die Details gerne in unserer Datenschutzrichtlinie nach.

Cookie Consent mit Real Cookie Banner