Hur lagernormalisering stabiliserar transformers
Svep för att visa menyn
Moderna djupinlärningsmodeller förlitar sig på normaliseringstekniker för att möjliggöra effektiv och noggrann träning. Inom naturlig språkbehandling (NLP), där inmatningssekvenser kan variera i längd och struktur, är normalisering särskilt viktig för att stabilisera inlärningsprocessen. Två vanliga normaliseringsmetoder är batchnormalisering och lagernormalisering, men de har olika syften och passar olika typer av data.
Batchnormalisering beräknar medelvärde och varians för varje funktion över hela batchen av indata. Denna metod fungerar bra för datorseendeuppgifter, där varje bild i en batch vanligtvis har samma storlek och struktur. Vid NLP-uppgifter, särskilt med sekvenser av varierande längd, kan batchnormalisering dock introducera oönskade beroenden mellan prover i en batch och hanterar inte varierande sekvenslängder på ett smidigt sätt.
Lagernormalisering normaliserar däremot indatafunktioner inom varje datapunkt (till exempel varje tokenembedding i en mening) oberoende av andra datapunkter i batchen. Detta gör den mycket mer lämplig för NLP och sekvensmodellering. Genom att standardisera de summerade indata till en neuron inom ett lager säkerställer lagernormalisering att varje tokens representation är på en liknande skala, oavsett dess position eller batchens sammansättning. Detta hjälper Transformers att tränas stabilt och representera text mer effektivt, särskilt vid hantering av långa eller komplexa meningar.
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)
Föreställ dig varje rad i din indata som en unik token-inbäddning – likt en karaktär i en berättelse, var och en med sina egna särdrag. Funktionen layer_norm ger varje token en rättvis chans genom att justera dess värden så att de centrerar kring noll och har samma skala. Den beräknar medelvärde och varians för varje rad och transformerar sedan värdena så att ingen token sticker ut för mycket eller försvinner i bakgrunden. Denna oberoende normalisering innebär att, oavsett sekvenslängd eller batch-sammansättning, är varje tokens egenskaper balanserade och redo för modellen att tolka. Detta tillvägagångssätt håller modellens träning stabil och effektiv, särskilt vid arbete med oförutsägbara längder och strukturer som finns i verkliga NLP-data.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal