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
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
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
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 tgtEt minimalistisk PyTorch-lag for en Transformer-decoders opmærksomhed og feed-forward.
Oprindelse
Fra engelsk 'decoder', igen fra latin 'decodere' (afkode).
Afledte ord
3Kilder
2- Attention Is All You Need (2017)
- Improving Language Understanding by Generative Pre-Training (2018)