Слой декодера
Как и трансформеры-энкодеры, трансформеры-декодеры также состоят из нескольких слоёв, использующих многоголовое внимание и подслои прямой связи. Попробуйте объединить эти компоненты и построить класс 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