Слой энкодера трансформера
Теперь, когда класс FeedForwardSubLayer определён, у вас есть всё необходимое для создания класса EncoderLayer. Напомним, что слой энкодера, как правило, включает механизм многоголового внимания и подслой прямого распространения с нормализацией по слоям и применением дропаута к входным и выходным данным подслоя.
Ранее определённые классы доступны под теми же именами, а также импортированы torch и torch.nn как nn.
Это упражнение является частью курса
Трансформерные модели с PyTorch
Инструкции к упражнению
- Дополните метод
__init__, создав экземплярыMultiHeadAttention,FeedForwardSubLayerи двух слоёв нормализации. - Дополните метод
forward(), реализовав механизм многоголового внимания и подслой прямого распространения; для механизма внимания используйте переданную маскуsrc_markи входные эмбеддингиxв качестве матриц query, key и value.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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