НачатьНачать бесплатно

Слой энкодера трансформера

Теперь, когда класс 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
Редактировать и запускать код