Pre-Layer Normalization
Præ-lag normalization er en teknik, hvor layer normalization placeres før hvert dellag (attention eller feed-forward) i en transformerblok, i modsætning til post-layer normalization.
Kort fortalt
Kort fortalt: I stedet for at normalisere efter hvert dellag, normaliserer man indgangen til dellaget, hvilket ofte giver mere stabil træning.
- Kategori
- teknik
- Niveau
- øvet
Betydninger
1- 1
Teknik i transformerarkitekturer, hvor layer normalization anvendes på indgangen til hvert dellag (attention eller feed-forward) i stedet for på udgangen.
- I Pre-Layer Normalization normaliseres inputtet til attention-mekanismen, hvilket forbedrer gradientflowet.
- Mange moderne sprogmodeller som GPT-3 anvender Pre-Layer Normalization for at opnå stabil træning ved høje læringsrater.
Hvornår bruges det
Pre-Layer Normalization bruges i moderne store sprogmodeller som GPT-2, GPT-3 og andre, hvor det har vist sig at forbedre træningsstabiliteten og muligvis give bedre performance. Det er nu standard i de fleste transformerarkitekturer.
Kodeeksempel
import torch.nn as nn
class PreLayerNormTransformerBlock(nn.Module):
def __init__(self, d_model, nhead):
super().__init__()
self.attention = nn.MultiheadAttention(d_model, nhead)
self.norm1 = nn.LayerNorm(d_model)
self.ffn = nn.Sequential(
nn.Linear(d_model, 4*d_model),
nn.ReLU(),
nn.Linear(4*d_model, d_model)
)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
# Pre-LN: normalize before each sublayer
x = x + self.attention(self.norm1(x), self.norm1(x), self.norm1(x))[0]
x = x + self.ffn(self.norm2(x))
return xEksempel på en transformerblok med Pre-Layer Normalization i PyTorch. Normalisering sker før attention og feed-forward.
Oprindelse
Termen opstod i forbindelse med forskning i transformerarkitekturer, hvor man sammenlignede placeringen af normaliseringslaget før eller efter dellagene. 'Pre' refererer til før sublaget.
Afledte ord
1Kilder
1- On Layer Normalization in the Transformer Architecture (Xiong et al., 2020)