ÎncepețiÎncepe gratuit

Adăugarea atenției încrucișate în stratul decoderului

Pentru a integra stivele de encoder și decoder definite anterior într-un transformer de tip encoder-decoder, trebuie să creezi un mecanism de atenție încrucișată care să funcționeze ca punte între cele două.

Clasa MultiHeadAttention definită anterior este în continuare disponibilă.

Acest exercițiu face parte din cursul

Modele Transformer cu PyTorch

Vezi cursul

Instrucțiuni pentru exercițiu

  • Definește un mecanism de atenție încrucișată (folosind MultiHeadAttention) și o a treia normalizare a stratului (folosind nn.LayerNorm) în metoda __init__.
  • Completează pasul înainte (forward pass) pentru a adăuga atenția încrucișată în stratul decoderului.

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)
        # Define cross-attention and a third layer normalization
        self.cross_attn = ____
        self.ff_sublayer = FeedForwardSubLayer(d_model, d_ff)
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        self.norm3 = ____
        self.dropout = nn.Dropout(dropout)

    def forward(self, x, y, tgt_mask, cross_mask):
        self_attn_output = self.self_attn(x, x, x, tgt_mask)
        x = self.norm1(x + self.dropout(self_attn_output))
        # Complete the forward pass
        cross_attn_output = self.____(____)
        x = self.norm2(x + self.dropout(____))
        ff_output = self.ff_sublayer(x)
        x = self.norm3(x + self.dropout(ff_output))
        return x
Editează și rulează codul