Hvordan 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 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 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.
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)
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.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat