Lägga till korsattention i avkodarlagret
För att integrera de enkodar- och avkodarblock du definierat tidigare i en enkodar-avkodar-transformer behöver du skapa en korsattentionsmekanism som fungerar som brygga mellan de två.
Klassen MultiHeadAttention som du definierade tidigare är fortfarande tillgänglig.
Den här övningen är en del av kursen
Transformermodeller med PyTorch
Övningsinstruktioner
- Definiera en korsattentionsmekanism (med
MultiHeadAttention) och ett tredje lagernormaliseringssteg (mednn.LayerNorm) i metoden__init__. - Slutför det framåtriktade passet för att lägga till korsattention i avkodarlagret.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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