Cạm bẫy thực chiến khi cộng bias và lan truyền ngược (Bias Broadcasting Gotcha)
Trong PyTorch và NumPy, khi thực hiện phép cộng bias vào đầu ra ma trận Y = Z + b với Z ∈ RB × S × D (Batch, Sequence, Dim) và b ∈ RD, cơ chế br…
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: linear-layer-forward-backward-numpy.
Nội dung đề bài
Mô tả bài toán
Trong PyTorch và NumPy, khi thực hiện phép cộng bias vào đầu ra ma trận Y = Z + b với Z ∈ RB × S × D (Batch, Sequence, Dim) và b ∈ RD, cơ chế broadcasting sẽ tự động nhân bản vector b trên 2 chiều đầu. Tuy nhiên, trong chiều ngược lại (Backward pass), nhiều lập trình viên mắc lỗi nghiêm trọng:
- Chỉ cộng dồn
np.sum(dY, axis=0), dẫn đến kết quả kích thước (S, D) thay vì vector (D,). - Hoặc lấy trung bình
np.meanthay vì tính tổngnp.sum.
Hãy viết hàm bias_forward_backward(Z: np.ndarray, b: np.ndarray, dY: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
- Nhận vào tensor Z bất kỳ số chiều (2 ≤ ndim ≤ 4) với chiều cuối bằng D.
- Vector bias b 1 chiều kích thước (D,).
- Tensor gradient dY cùng shape với Z.
- Thực hiện:
- Forward: Y = Z + b.
- Backward: tính gradient chính xác của bias db = ∂ L∂ b ∈ RD bằng cách cộng dồn trên TẤT CẢ các trục ngoại trừ trục cuối cùng.
- Trả về tuple
(Y, db).
Input
- Hàm
bias_forward_backward(Z,b,dY): 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
bias_forward_backward: Trả về kết quả kiểuTuple[np.ndarray, np.ndarray]theo đú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
B, S, D = (2, 4, 3)
Z = np.ones((B, S, D))
b = np.array([1.0, 2.0, 3.0])
dY = np.ones((B, S, D))
Y, db = bias_forward_backward(Z, b, dY)Output
(Array shape: (2, 4, 3), dtype=float64, [8., 8., 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
Z = np.random.randn(2, 3, 4, 5)
b = np.random.randn(5)
dY = np.ones_like(Z)
Y, db = bias_forward_backward(Z, b, dY)Output
(Array shape: (2, 3, 4, 5), dtype=float64, [24., 24., 24., 24., 24.])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.
