Decoder

En neural netværkskomponent, der transformerer en latent repræsentation til en output-sekvens, ofte ved autoregressiv generering.

Kort fortalt

Den del af en sprogmodel, der tager en komprimeret forståelse af inputtet og genererer et output, ord for ord.

Kategori
arkitektur
Niveau
øvet
Udtale
/diːˈkoʊdər/

Betydninger

3
  1. 1

    I sekvens-til-sekvens-modeller: den del, der genererer outputsekvensen fra encoderenes repræsentation.

    • I en maskinoversættelsesmodel tager decoderen encoderenes repræsentation af kildesætningen og genererer oversættelsen ord for ord.
    • Decoderen i T5 bruger cross-attention til at fokusere på relevante dele af inputtet under generering.Raffel et al., 2020
  2. 2

    I Transformer-arkitekturen: en stak af identiske lag, der hver indeholder selv-opmærksomhed, kryds-opmærksomhed og et feed-forward-netværk, og som genererer output sekvensen autoregressivt.

    • GPT-modellen består udelukkende af en decoder-stak uden encoder.Radford et al., 2018
    • I Transformer-decoderen forhindrer maskeret selv-opmærksomhed, at den kan se fremtidige tokens.Vaswani et al., 2017
  3. 3

    I autoencodere: den del, der rekonstruerer inputdataene fra den latente repræsentation.

    • I en variational autoencoder (VAE) kortlægger decoderen den latente variabel tilbage til billedrummet.Kingma & Welling, 2014

Hvornår bruges det

Decoderen anvendes i sekvens-til-sekvens-modeller som T5 og i decoder-only-modeller som GPT, hvor den genererer tekst ved at forudsige næste token baseret på tidligere tokens og eventuel kontekst fra en encoder.

Kodeeksempel

import torch
import torch.nn as nn

class TransformerDecoderLayer(nn.Module):
    def __init__(self, d_model, nhead, dim_feedforward, dropout=0.1):
        super().__init__()
        self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
        self.cross_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout)
        self.ff = nn.Sequential(
            nn.Linear(d_model, dim_feedforward),
            nn.ReLU(),
            nn.Dropout(dropout),
            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, tgt, memory, tgt_mask=None, memory_mask=None):
        tgt2 = self.self_attn(tgt, tgt, tgt, attn_mask=tgt_mask)[0]
        tgt = self.norm1(tgt + self.dropout(tgt2))
        tgt2 = self.cross_attn(tgt, memory, memory, attn_mask=memory_mask)[0]
        tgt = self.norm2(tgt + self.dropout(tgt2))
        tgt2 = self.ff(tgt)
        tgt = self.norm3(tgt + self.dropout(tgt2))
        return tgt

Et minimalistisk PyTorch-lag for en Transformer-decoders opmærksomhed og feed-forward.

Oprindelse

Fra engelsk 'decoder', igen fra latin 'decodere' (afkode).

Afledte ord

3

Kilder

2
  • Attention Is All You Need (2017)
  • Improving Language Understanding by Generative Pre-Training (2018)