Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Hur lagernormalisering stabiliserar transformers | Bygga Transformer-Komponenter
Transformers för Naturlig Språkbehandling

bookHur 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
expand arrow

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
expand arrow

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.

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

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.

question mark

Varför föredras lagernormalisering framför batchnormalisering för NLP-transformers?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 2. Kapitel 4
some-alt