Dekoderblok
Dekoderblok er en central komponent i transformer-arkitekturen, der bruger selvopmærksomhed og krydsopmærksomhed til at generere outputsekvenser.
Kort fortalt
En dekoderblok er den del af en transformer-model, der tager en allerede genereret sekvens og gradvist tilføjer nye elementer, f.eks. ord i en sætning.
- Kategori
- arkitektur
- Niveau
- øvet
Betydninger
1- 1
En dekoderblok i transformer-arkitekturen er en gentagen enhed, der består af selvopmærksomhed, krydsopmærksomhed og feed-forward lag, og som bruges til at generere outputsekvenser i autoregressive modeller.
- I GPT-modeller anvendes kun dekoderblokke uden krydsopmærksomhed.
- Hver dekoderblok i Transformeren modtager output fra den foregående blok og encoderens sidste lag.
Hvornår bruges det
Dekoderblokke anvendes i sekvens-til-sekvens opgaver som maskinoversættelse og tekstgenerering. Hver blok består typisk af et selvopmærksomhedslag, et krydsopmærksomhedslag (der ser på encoder-output) og et feed-forward lag.
Kodeeksempel
class DecoderBlock(nn.Module):
def __init__(self, d_model, n_heads):
super().__init__()
self.self_attn = nn.MultiheadAttention(d_model, n_heads)
self.cross_attn = nn.MultiheadAttention(d_model, n_heads)
self.ffn = nn.Sequential(nn.Linear(d_model, 4*d_model), nn.ReLU(), nn.Linear(4*d_model, d_model))
def forward(self, x, enc_out):
x = self.self_attn(x, x, x)[0] + x
x = self.cross_attn(x, enc_out, enc_out)[0] + x
x = self.ffn(x) + x
return xEn simpel PyTorch-implementering af en dekoderblok med selvopmærksomhed, krydsopmærksomhed og feed-forward lag.
Oprindelse
Termen 'dekoderblok' kommer af 'dekoder' (der afkoder eller genererer output) og 'blok' (en enhed i lagdelt arkitektur).