Wie die Schichtnormalisierung Transformer stabilisiert
Swipe um das Menü anzuzeigen
Moderne Deep-Learning-Modelle verwenden Normalisierungstechniken, um ein effizientes und präzises Training zu ermöglichen. Im Bereich der Verarbeitung natürlicher Sprache (NLP), wo Eingabesequenzen in Länge und Struktur variieren können, ist die Normalisierung besonders wichtig, um den Lernprozess zu stabilisieren. Zwei gängige Normalisierungsmethoden sind Batch-Normalisierung und Layer-Normalisierung, die jedoch unterschiedliche Zwecke erfüllen und für verschiedene Datentypen geeignet sind.
Batch-Normalisierung berechnet den Mittelwert und die Varianz jeder Eigenschaft über den gesamten Batch von Eingaben. Dieser Ansatz eignet sich gut für Aufgaben im Bereich Computer Vision, bei denen jedes Bild in einem Batch typischerweise die gleiche Größe und Struktur aufweist. Bei NLP-Aufgaben, insbesondere mit variablen Sequenzlängen, kann die Batch-Normalisierung jedoch unerwünschte Abhängigkeiten zwischen den Beispielen im Batch einführen und geht mit unterschiedlichen Sequenzlängen nicht immer gut um.
Layer-Normalisierung hingegen normalisiert die Eingabefeatures innerhalb jedes einzelnen Datenpunkts (zum Beispiel jedes Token-Embeddings in einem Satz) unabhängig von anderen Datenpunkten im Batch. Dadurch ist sie wesentlich besser für NLP und sequenzielle Modellierung geeignet. Durch die Standardisierung der aufsummierten Eingaben zu einem Neuron innerhalb einer Schicht stellt die Layer-Normalisierung sicher, dass die Repräsentation jedes Tokens auf einer ähnlichen Skala liegt, unabhängig von seiner Position oder der Zusammensetzung des Batches. Dies unterstützt ein stabiles Training von Transformern und eine effektivere Textrepräsentation, insbesondere bei langen oder komplexen Sätzen.
123456789101112131415161718192021import numpy as np def layer_norm(x, epsilon=1e-5): """ Applies layer normalization to a 2D numpy array x. Each row is normalized independently. """ mean = np.mean(x, axis=1, keepdims=True) variance = np.var(x, axis=1, keepdims=True) normalized = (x - mean) / np.sqrt(variance + epsilon) # Optional: learnable scale and bias (gamma and beta) gamma = np.ones_like(mean) beta = np.zeros_like(mean) return gamma * normalized + beta # Example: normalize a batch of 3 token embeddings (rows) embeddings = np.array([[2.0, 4.0, 6.0], [1.0, 3.0, 5.0], [0.0, 0.0, 0.0]]) normalized_embeddings = layer_norm(embeddings) print(normalized_embeddings)
Stellen Sie sich jede Zeile Ihres Eingabedatensatzes als eine einzigartige Token-Einbettung vor – wie eine Figur in einer Geschichte, jede mit ihren eigenen Besonderheiten. Die Funktion layer_norm gibt jedem Token die gleichen Chancen, indem sie dessen Werte so anpasst, dass sie um Null zentriert sind und die gleiche Skalierung aufweisen. Sie berechnet den Mittelwert und die Varianz für jede Zeile und transformiert die Werte so, dass kein Token zu sehr hervorsticht oder im Hintergrund verschwindet. Diese unabhängige Normalisierung sorgt dafür, dass – unabhängig von Sequenzlänge oder Batch-Zusammensetzung – die Merkmale jedes Tokens ausgeglichen und bereit für die Interpretation durch das Modell sind. Dieser Ansatz hält das Training des Modells stabil und effizient, insbesondere bei den unvorhersehbaren Längen und Strukturen realer NLP-Daten.
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