Lớp decoder
Tương tự encoder transformer, decoder transformer cũng được xây dựng từ nhiều tầng sử dụng multi-head attention và các feed-forward sublayer. Hãy thử kết hợp các thành phần này để xây dựng lớp DecoderLayer.
Bạn có sẵn các lớp MultiHeadAttention và FeedForwardSubLayer để sử dụng, cùng với tgt_mask bạn đã tạo.
Bài tập này là một phần của khóa học
Các mô hình Transformer với PyTorch
Hướng dẫn bài tập
Hoàn thiện phương thức forward() để truyền các embedding đầu vào qua các tầng đã được định nghĩa trong phương thức __init__:
- Thực hiện phép tính attention với
tgt_maskđã cho và dùng embedding đầu vàoxcho cả ma trận query, key và value. - Áp dụng
dropoutvà lớp chuẩn hoá thứ nhất,norm1. - Truyền qua feed-forward sublayer,
ff_sublayer. - Áp dụng
dropoutvà lớp chuẩn hoá thứ hai,norm2.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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