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
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 xEn 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
2Kilder
2- Attention Is All You Need (Vaswani et al., 2017)
- Language Models are Few-Shot Learners (Brown et al., 2020)