Zacznij terazZacznij za darmo

Warstwa dekodera

Podobnie jak transformery enkodera, transformery dekodera również składają się z wielu warstw, które korzystają z wielogłowicowej uwagi (multi-head attention) i podwarstw feed-forward. Spróbuj połączyć te komponenty, aby zbudować klasę DecoderLayer.

Do dyspozycji masz klasy MultiHeadAttention i FeedForwardSubLayer, a także wcześniej utworzoną maskę tgt_mask.

To ćwiczenie jest częścią kursu

Modele Transformer w PyTorch

Zobacz kurs

Instrukcje do ćwiczenia

Uzupełnij metodę forward(), aby przepuścić wejściowe osadzenia przez warstwy zdefiniowane w metodzie __init__:

  • Wykonaj obliczenia uwagi, używając podanej maski tgt_mask oraz wejściowych osadzeń x jako macierzy zapytania, klucza i wartości.
  • Zastosuj dropout oraz pierwszą normalizację warstwy, norm1.
  • Przeprowadź dane przez podwarstwę feed-forward, ff_sublayer.
  • Zastosuj dropout oraz drugą normalizację warstwy, norm2.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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
Edytuj i uruchom kod