Hoe Laagnormalisatie Transformers Stabiliseert
Veeg om het menu te tonen
Moderne deep learning-modellen vertrouwen op normalisatietechnieken om efficiënt en nauwkeurig te kunnen trainen. In natural language processing (NLP), waar invoersequenties kunnen variëren in lengte en structuur, is normalisatie bijzonder belangrijk voor het stabiliseren van het leerproces. Twee veelgebruikte normalisatiemethoden zijn batchnormalisatie en laagnormalisatie, maar ze hebben verschillende doelen en zijn geschikt voor verschillende soorten data.
Batchnormalisatie berekent het gemiddelde en de variantie van elk kenmerk over de gehele batch van invoerdata. Deze aanpak werkt goed voor computer vision-taken, waarbij elke afbeelding in een batch doorgaans dezelfde grootte en structuur heeft. In NLP-taken, vooral met sequenties van variabele lengte, kan batchnormalisatie echter ongewenste afhankelijkheden tussen voorbeelden in een batch introduceren en mogelijk niet goed omgaan met verschillende sequentielengtes.
Laagnormalisatie daarentegen normaliseert invoerkenmerken binnen elk datapunt (zoals elke tokenembedding in een zin) onafhankelijk van andere datapunten in de batch. Dit maakt het veel geschikter voor NLP en sequentiemodellering. Door de gesommeerde input naar een neuron binnen een laag te standaardiseren, zorgt laagnormalisatie ervoor dat de representatie van elk token op een vergelijkbare schaal ligt, ongeacht de positie of samenstelling van de batch. Dit helpt Transformers stabiel te trainen en tekst effectiever te representeren, vooral bij lange of complexe zinnen.
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)
Stel je elke rij in je invoer voor als een unieke token-embedding – als een personage in een verhaal, elk met zijn eigen eigenaardigheden. De functie layer_norm geeft elk token een gelijke kans door de waarden aan te passen zodat ze rond nul gecentreerd zijn en dezelfde schaal delen. Het berekent het gemiddelde en de variantie voor elke rij en transformeert vervolgens de waarden zodat geen enkel token te veel opvalt of wegvalt in de achtergrond. Deze onafhankelijke normalisatie betekent dat, ongeacht de sequentielengte of batchsamenstelling, de kenmerken van elk token in balans zijn en klaar voor interpretatie door het model. Deze aanpak houdt de training van je model stabiel en efficiënt, vooral bij het werken met de onvoorspelbare lengtes en structuren die voorkomen in echte NLP-data.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.