Cộng Dồn Gradient Không Bộ Đệm Bằng ufunc.at Trong Huấn Luyện AI
Trong quá trình lan truyền ngược (Backpropagation), một câu văn bản đầu vào có thể chứa nhiều từ giống nhau (ví dụ: ["học", "lập", "trình", "và", "học", "AI"] chứa 2 từ "học" cùng…
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: ufunc methods, advanced indexing, race conditions.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu rõ cơ chế đệm (buffering) trong phép gán mảng nâng cao
arr[indices] += valuescủa NumPy và hiện tượng mất mát dữ liệu khi có chỉ số trùng lặp. - Sử dụng phương thức không bộ đệm
np.add.atđể thực hiện phép toán Scatter-Add chuẩn xác trong học sâu. - Cập nhật gradient cho ma trận nhúng từ (Embedding Matrix) trong mô hình ngôn ngữ lớn.
Mô tả bài toán
Trong quá trình lan truyền ngược (Backpropagation), một câu văn bản đầu vào có thể chứa nhiều từ giống nhau (ví dụ: ["học", "lập", "trình", "và", "học", "AI"] chứa 2 từ "học" cùng có mã vựng token_id = 42). Nếu lập trình viên thực hiện phép gán thông thường: grad_table[token_ids] += grads NumPy sẽ nạp giá trị cũ vào bộ đệm một lần duy nhất, dẫn đến việc gradient của từ "học" thứ hai ghi đè lên từ "học" thứ nhất thay vì cộng dồn cả hai!
Hãy viết hàm: scatter_accumulate_embeddings(vocab_size: int, embed_dim: int, token_ids: np.ndarray, token_grads: np.ndarray) -> np.ndarray
Yêu cầu:
- Kiểm tra tham số:
- Nếu
vocab_size <= 0hoặcembed_dim <= 0: ném ngoại lệValueError("vocab_size va embed_dim phai > 0"). - Nếu
len(token_ids) != len(token_grads): ném ngoại lệValueError("Kich thuoc token_ids va token_grads phai bang nhau"). - Nếu có bất kỳ chỉ số nào trong
token_idsnằm ngoài phạm vi [0, vocab_size - 1]: ném ngoại lệIndexError("token_id vuot qua vocab_size"). - Khởi tạo và tích lũy:
- Khởi tạo ma trận gradient kích thước
(vocab_size, embed_dim)toàn số 0 với cùngdtypecủatoken_grads. - Sử dụng
np.add.atđể cộng dồn toàn bộ các gradient vào đúng vị trí dòng trong ma trận, bảo toàn 100% gradient của các token trùng lặp. - Kết quả trả về: Ma trận gradient hoàn chỉnh.
Input
- Các tham số truyền vào hàm/lớp scatter_accumulate_embeddings hoặc dữ liệu đầu vào theo định dạng mô tả.
Output
- Kết quả trả về của hàm/lớp scatter_accumulate_embeddings hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- 1 ≤ vocab_size ≤ 50000.
- 1 ≤ embed_dim ≤ 1024.
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
Ví dụ 1
Input
scatter_accumulate_embeddings(vocab_size=5, embed_dim=2, token_ids=[1, 2, 1, 1], token_grads=[[1.0, 1.0], [5.0, 5.0], [2.0, 2.0], [3.0, 3.0]])Output
[[0.0, 0.0], [6.0, 6.0], [5.0, 5.0], [0.0, 0.0], [0.0, 0.0]]Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
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.
