Die Decoder-Schicht
Genau wie Encoder-Transformer bestehen auch Decoder-Transformer aus mehreren Schichten, die Multi-Head-Attention und Feed-Forward-Teilschichten nutzen. Versuche, diese Komponenten zu kombinieren und eine DecoderLayer-Klasse zu bauen.
Die Klassen MultiHeadAttention und FeedForwardSubLayer stehen dir zur Verfügung – ebenso wie die von dir erstellte tgt_mask.
Diese Übung ist Teil des Kurses
<Kurs>Transformer-Modelle mit PyTorch</Kurs>Übungsanweisungen
Vervollständige die Methode forward(), damit die Eingabe-Einbettungen die im __init__ definierten Schichten durchlaufen:
- Führe die Attention-Berechnung mit der bereitgestellten
tgt_maskund den Eingabe-Einbettungenxfür Query-, Key- und Value-Matrizen aus. - Wende
dropoutund die erste Layer-Normalisierungnorm1an. - Führe den Durchlauf durch die Feed-Forward-Teilschicht
ff_sublayeraus. - Wende
dropoutund die zweite Layer-Normalisierungnorm2an.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
class DecoderLayer(nn.Module):
def __init__(self, d_model, num_heads, d_ff, dropout):
super().__init__()
self.self_attn = MultiHeadAttention(d_model, num_heads)
self.ff_sublayer = FeedForwardSubLayer(d_model, d_ff)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
self.dropout = nn.Dropout(dropout)
def forward(self, x, tgt_mask):
# Perform the attention calculation
attn_output = self.____
# Apply dropout and the first layer normalization
x = self.____(x + self.____(attn_output))
# Pass through the feed-forward sublayer
ff_output = self.____(x)
# Apply dropout and the second layer normalization
x = self.____(x + self.____(ff_output))
return x