Шар декодера
Як і трансформери-енкодери, трансформери-декодери також складаються з кількох шарів, що використовують багатоголову увагу та feed-forward підшари. Спробуйте поєднати ці компоненти, щоб побудувати клас DecoderLayer.
Класи MultiHeadAttention і FeedForwardSubLayer доступні для використання, так само як і tgt_mask, яку ви створили.
Ця вправа є частиною курсу
Моделі Transformer з PyTorch
Інструкції до вправи
Завершіть метод forward(), щоб пропустити вхідні вкладення (embeddings) через шари, визначені в __init__:
- Виконайте обчислення уваги, використовуючи надану
tgt_maskі вхідні вкладенняxяк матриці запитів, ключів і значень. - Застосуйте
dropoutі першу нормалізацію шару,norm1. - Виконайте проходження через feed-forward підшар,
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