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. 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 x

Eksempel 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)