decoderlag

Et enkelt lag i en transformer-dekoder, typisk bestående af selvopmærksomhed (maskeret), krydsopmærksomhed (hvis encoder findes) og et feed-forward-netværk.

Kort fortalt

En byggesten i GPT-lignende modeller, der behandler inputsekvensen trin for trin for at generere output.

Kategori
arkitektur
Niveau
øvet
Udtale
[deˈkoːˀdɐˌlæˀj]

Betydninger

1
  1. 1

    Standard decoderlag i en transformer-arkitektur, som anvendes i både decoder-only og encoder-decoder modeller. Indeholder maskeret selvopmærksomhed, krydsopmærksomhed (kun i encoder-decoder) og et feed-forward-netværk, hver efterfulgt af residualforbindelse og lagnormalisering.

    • I GPT-3 består hvert transformerlag af et maskeret selvopmærksomhedslag og et feed-forward-lag, hvilket svarer til et decoderlag uden krydsopmærksomhed.
    • I T5-modellen modtager decoderlaget output fra encoderens sidste lag via krydsopmærksomhedsmekanismen.

Hvornår bruges det

Decoderlag bruges i generative sprogmodeller som GPT, hvor de stables oven på hinanden. Hvert lag anvender kausal maskering for at forhindre at kigge fremad, og i encoder-decoder-modeller som T5 inkluderer de også krydsopmærksomhed over encoder-output.

Kodeeksempel

class DecoderLayer(nn.Module):
    def __init__(self, d_model, nhead, dim_feedforward, dropout):
        super().__init__()
        self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
        self.cross_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)  # optional
        self.feed_forward = nn.Sequential(
            nn.Linear(d_model, dim_feedforward),
            nn.ReLU(),
            nn.Linear(dim_feedforward, d_model)
        )
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.norm3 = nn.LayerNorm(d_model)
        self.dropout = nn.Dropout(dropout)
    
    def forward(self, x, memory=None, src_mask=None, tgt_mask=None):
        x = x + self.dropout(self.self_attn(x, x, x, attn_mask=tgt_mask)[0])
        x = self.norm1(x)
        if memory is not None:
            x = x + self.dropout(self.cross_attn(x, memory, memory)[0])
            x = self.norm2(x)
        x = x + self.dropout(self.feed_forward(x))
        x = self.norm3(x)
        return x

En simpel PyTorch-implementering af et decoderlag med valgfri krydsopmærksomhed.

Oprindelse

Fra engelsk 'decoder' (afkoder) og dansk 'lag' (layer). Første gang brugt i transformer-artiklen (Vaswani et al., 2017).

Afledte ord

2

Kilder

2
  • Attention Is All You Need (Vaswani et al., 2017)
  • Language Models are Few-Shot Learners (Brown et al., 2020)