Lớp encoder transformer
Với lớp FeedForwardSubLayer đã được định nghĩa, bạn đã có đủ các thành phần để xây dựng lớp EncoderLayer. Nhắc lại: một encoder layer thường gồm có cơ chế multi-head attention và một feed-forward sublayer, với layer normalization và dropout áp dụng cho đầu vào và đầu ra của mỗi sublayer.
Các lớp bạn đã định nghĩa sẵn đều có sẵn với đúng tên đó, cùng với torch và torch.nn là nn.
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
__init__để khởi tạoMultiHeadAttention,FeedForwardSubLayer, và hai layer normalization. - Hoàn thiện phương thức
forward()bằng cách bổ sung cơ chế multi-head attention và feed-forward sublayer; với cơ chế attention, hãy dùngsrc_markđược cung cấp và embedding đầu vàoxcho các ma trận query, key, value.
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 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