Stratul decoder
Ca și transformerele encoder, transformerele decoder sunt construite din mai multe straturi care folosesc mecanisme de atenție multi-cap și sub-straturi feed-forward. Încearcă să combini aceste componente pentru a construi clasa DecoderLayer.
Clasele MultiHeadAttention și FeedForwardSubLayer sunt disponibile pentru a fi utilizate, alături de tgt_mask creat anterior.
Acest exercițiu face parte din cursul
Modele Transformer cu PyTorch
Instrucțiuni pentru exercițiu
Completează metoda forward() pentru a trece încorporările de intrare prin straturile definite în metoda __init__:
- Realizează calculul de atenție folosind
tgt_maskfurnizat și încorporările de intrare,x, pentru matricele de interogare, cheie și valoare. - Aplică
dropoutși primul strat de normalizare,norm1. - Realizează trecerea prin sub-stratul feed-forward,
ff_sublayer. - Aplică
dropoutși al doilea strat de normalizare,norm2.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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