A camada do decodificador
Assim como os transformadores do codificador, os transformadores do decodificador também são compostos por várias camadas que usam multi-head attention e subcamadas feed-forward. Tente combinar esses componentes para construir uma classe DecoderLayer.
As classes MultiHeadAttention e FeedForwardSubLayer estão disponíveis para você usar, juntamente com a tgt_mask que você criou.
Este exercício faz parte do curso
Modelos Transformer com PyTorch
Instruções do exercício
Complete o método forward() para passar as embeddings de entrada pelas camadas definidas no método __init__:
- Realize o cálculo de atenção usando a
tgt_maskfornecida e as embeddings de entrada,x, para as matrizes de query, key e value. - Aplique
dropoute a primeira normalização de camada,norm1. - Faça a passagem pela subcamada feed-forward,
ff_sublayer. - Aplique
dropoute a segunda normalização de camada,norm2.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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