Cân bằng biên độ vector nhúng bằng hệ số nhân căn bậc hai chiều mô hình (Embedding Scale Factor in Transformers)
Trong bài báo kinh điển *Attention Is All You Need* (Vaswani et al., 2017), các tác giả đã nhân vector nhúng với √(dmodel) trước khi cộng với Positional Encoding:
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: embedding-lookup-table-from-scratch.
Nội dung đề bài
Mô tả bài toán
Trong bài báo kinh điển *Attention Is All You Need* (Vaswani et al., 2017), các tác giả đã nhân vector nhúng với √(dmodel) trước khi cộng với Positional Encoding:
xscaled = x × √(dmodel)
Lý do toán học:
Khi khởi tạo trọng số embedding bằng phân phối chuẩn N(0, 1/dmodel), phương sai của mỗi chiều là 1dmodel. Chuẩn L2 kỳ vọng của vector là: E[|x|2] ≈ √(dmodel × 1dmodel) = 1 Khi đó, biên độ các giá trị của x rất nhỏ (cỡ ± 1√(dmodel)), khiến thông tin embedding bị áp đảo hoàn toàn bởi Positional Encoding (vốn có biên độ ∈ [-1, 1]). Việc nhân với √(dmodel) đưa biên độ embedding về cùng quy mô với positional encoding.
Yêu cầu kỹ thuật:
- Viết hàm
scale_embeddings(embeddings: np.ndarray, d_model: int) -> np.ndarray: - Kiểm tra
d_model > 0. Nếud_model <= 0, némValueError("d_model must be positive"). - Trả về tensor đã nhân với √(dmodel).
- Viết hàm
scale_embeddings_backward(grad_output: np.ndarray, d_model: int) -> np.ndarray: - Tính đạo hàm theo x: ∂ L∂ x = grad_output × √(dmodel).
- Nếu
d_model <= 0, némValueError("d_model must be positive").
Input
- Hàm
scale_embeddings(embeddings,d_model): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng. - Hàm
scale_embeddings_backward(grad_output,d_model): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
scale_embeddings: Trả về kết quả kiểunp.ndarraytheo đúng đặc tả kỹ thuật và kích thước quy định. - Hàm
scale_embeddings_backward: Trả về kết quả kiểunp.ndarraytheo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 6000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
x = np.array([[1.0, 2.0], [3.0, 4.0]])
d_model = 4
scale_embeddings(x, d_model)Output
[[2., 4.],
[6., 8.]]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
grad_out = np.array([[0.5, 1.0], [1.5, 2.0]])
d_model = 16
grad_x = scale_embeddings_backward(grad_out, d_model)Output
[[2., 4.],
[6., 8.]]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
