La capa del decodificador
Al igual que los transformers de codificador, los transformers de decodificador también están formados por varias capas que utilizan multi-head attention y subcapas feed-forward. Intenta combinar estos componentes para construir una clase DecoderLayer.
Tienes disponibles las clases MultiHeadAttention y FeedForwardSubLayer para usarlas, junto con la tgt_mask que creaste.
Este ejercicio forma parte del curso
Modelos Transformer con PyTorch
Instrucciones del ejercicio
Completa el método forward() para pasar las incrustaciones de entrada por las capas definidas en el método __init__:
- Realiza el cálculo de atención usando la
tgt_maskproporcionada y las incrustaciones de entrada,x, para las matrices de consulta, clave y valor. - Aplica
dropouty la primera normalización por capas,norm1. - Realiza el paso por la subcapa feed-forward,
ff_sublayer. - Aplica
dropouty la segunda normalización por capas,norm2.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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