Warstwa enkodera transformera
Mając zdefiniowaną klasę FeedForwardSubLayer, dysponujesz już wszystkimi elementami potrzebnymi do zdefiniowania klasy EncoderLayer. Przypomnij sobie, że warstwa enkodera składa się zazwyczaj z mechanizmu uwagi wielogłowicowej (multi-head attention) oraz podwarstwy feed-forward, z normalizacją warstwy i dropoutem stosowanymi na wejściu i wyjściu tej podwarstwy.
Klasy, które już wcześniej zdefiniowano, są dostępne pod tymi samymi nazwami, razem z torch i torch.nn zaimportowanym jako nn.
To ćwiczenie jest częścią kursu
Modele Transformer w PyTorch
Instrukcje do ćwiczenia
- Uzupełnij metodę
__init__, tworząc instancjeMultiHeadAttention,FeedForwardSubLayeroraz dwóch warstw normalizacji. - Uzupełnij metodę
forward(), dodając mechanizm uwagi wielogłowicowej i podwarstwę feed-forward; w mechanizmie uwagi użyj podanegosrc_maskoraz osadzeń wejściowychxjako macierzy query, key i value.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
class EncoderLayer(nn.Module):
def __init__(self, d_model, num_heads, d_ff, dropout):
super().__init__()
# Instantiate the layers
self.self_attn = ____(d_model, num_heads)
self.ff_sublayer = ____(d_model, d_ff)
self.norm1 = ____
self.norm2 = ____
self.dropout = nn.Dropout(dropout)
def forward(self, x, src_mask):
# Complete the forward method
attn_output = self.____
x = self.norm1(x + self.dropout(attn_output))
ff_output = self.____
x = self.norm2(x + self.dropout(ff_output))
return x