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

Слой декодера

Как и трансформеры-энкодеры, трансформеры-декодеры также состоят из нескольких слоёв, использующих многоголовое внимание и подслои прямой связи. Попробуйте объединить эти компоненты и построить класс DecoderLayer.

Для работы вам доступны классы MultiHeadAttention и FeedForwardSubLayer, а также созданная ранее маска tgt_mask.

Это упражнение является частью курса

Трансформерные модели с PyTorch

Посмотреть курс

Инструкции к упражнению

Дополните метод forward(), чтобы передать входные эмбеддинги (векторные представления) через слои, определённые в методе __init__:

  • Выполните вычисление внимания, используя переданную маску tgt_mask и входные эмбеддинги x в качестве матриц запроса, ключа и значения.
  • Примените dropout и первый слой нормализации norm1.
  • Выполните проход через подслой прямой связи ff_sublayer.
  • Примените dropout и второй слой нормализации norm2.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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