Post-Layer Normalization
Post-Layer Normalization er en teknik i transformer-arkitekturer, hvor layer normalization placeres efter hvert sublag (attention og feed-forward) i stedet for før.
Kort fortalt
I Post-Layer Normalization lægges normaliseringen efter attention og feed-forward lagene, hvilket var standarden i den originale Transformer.
- Kategori
- teknik
- Niveau
- øvet
Betydninger
1- 1
Placering af layer normalization efter hvert sublag i en transformer-blok, så outputtet af sublaget normaliseres før addition med residualforbindelsen.
- I den originale Transformer anvendes Post-Layer Normalization, hvor normalisering sker efter attention og feed-forward lagene.
- Post-Layer Normalization kan føre til gradient-eksplosion i meget dybe modeller, hvilket har ført til populariteten af Pre-Layer Normalization.
Hvornår bruges det
Post-Layer Normalization anvendes typisk i tidlige transformer-modeller som den originale Transformer (Vaswani et al., 2017). Det kan føre til ustabil træning med dybere modeller, men bruges stadig i nogle kontekster.
Kodeeksempel
import torch.nn as nn
class TransformerBlockPostLN(nn.Module):
def __init__(self, d_model, nhead, dim_feedforward):
super().__init__()
self.attention = nn.MultiheadAttention(d_model, nhead)
self.norm1 = nn.LayerNorm(d_model)
self.ffn = nn.Sequential(
nn.Linear(d_model, dim_feedforward),
nn.ReLU(),
nn.Linear(dim_feedforward, d_model)
)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
# Post-LN: norm after each sublayer
x = x + self.attention(x, x, x)[0]
x = self.norm1(x)
x = x + self.ffn(x)
x = self.norm2(x)
return xEksempel på en transformer-blok med Post-Layer Normalization i PyTorch.
Oprindelse
Termen er dannet af 'post-' (efter) og 'layer normalization', og refererer til placeringen af normaliseringen efter sublagene.
Kilder
1- Attention Is All You Need (Vaswani et al., 2017)