Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Hvordan Lagernormalisering Stabiliserer Transformers | Opbygning af Transformer-Komponenter
Transformers til Naturlig Sprogbehandling

bookHvordan Lagernormalisering Stabiliserer Transformers

Stryg for at vise menuen

Moderne dybe læringsmodeller er afhængige af normaliseringsteknikker for at sikre effektiv og præcis træning. Inden for natural language processing (NLP), hvor inputsekvenser kan variere i længde og struktur, er normalisering særligt vigtig for at stabilisere læringsprocessen. To almindelige normaliseringsmetoder er batch normalisering og layer normalisering, men de har forskellige formål og egner sig til forskellige datatyper.

Batch Normalisering
expand arrow

Batch normalisering beregner gennemsnit og varians for hver feature på tværs af hele batchen af input. Denne metode fungerer godt til computer vision-opgaver, hvor hvert billede i en batch typisk har samme størrelse og struktur. I NLP-opgaver, især med sekvenser af varierende længde, kan batch normalisering dog introducere uønskede afhængigheder mellem prøver i en batch og håndterer ikke varierende sekvenslængder optimalt.

Layer Normalisering
expand arrow

Layer normalisering derimod normaliserer inputfeatures inden for hvert datapunkt (såsom hver token embedding i en sætning) uafhængigt af andre datapunkter i batchen. Dette gør den langt mere velegnet til NLP og sekvensmodellering. Ved at standardisere de summerede input til en neuron i et lag sikrer layer normalisering, at hver tokens repræsentation er på en lignende skala, uanset dens position eller batchens sammensætning. Dette hjælper Transformers med at træne stabilt og repræsentere tekst mere effektivt, især ved lange eller komplekse sætninger.

123456789101112131415161718192021
import 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)
copy

Forestil dig, at hver række i dit input er en unik token-embedding – som en karakter i en fortælling, hver med sine egne særpræg. Funktionen layer_norm giver hver token en fair mulighed ved at justere dens værdier, så de er centreret omkring nul og har samme skala. Den beregner gennemsnit og varians for hver række og omdanner derefter værdierne, så ingen token skiller sig for meget ud eller forsvinder i baggrunden. Denne uafhængige normalisering betyder, at uanset sekvenslængde eller batch-sammensætning, er hver tokens egenskaber afbalancerede og klar til at blive fortolket af modellen. Denne tilgang holder modellens træning stabil og effektiv, især når man arbejder med de uforudsigelige længder og strukturer, der findes i NLP-data fra den virkelige verden.

question mark

Hvorfor foretrækkes lag-normalisering frem for batch-normalisering til NLP-transformere?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 2. Kapitel 4
some-alt