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
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_maskoraz wejściowych osadzeńxjako macierzy zapytania, klucza i wartości. - Zastosuj
dropoutoraz pierwszą normalizację warstwy,norm1. - Przeprowadź dane przez podwarstwę feed-forward,
ff_sublayer. - Zastosuj
dropoutoraz 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