Hàm mất mát Fused Softmax Cross-Entropy ổn định số học (Fused Cross-Entropy)
Trong PyTorch (nn.CrossEntropyLoss) và các framework AI, hàm mất mát Cross-Entropy không bao giờ tính riêng p = softmax(z) rồi loss = -log(p). Nếu làm rời rạc, khi mô hình dự đoán…
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: cross-entropy-loss-backward, log-sum-exp-trick-numerical-stability.
Nội dung đề bài
Mô tả bài toán
Trong PyTorch (nn.CrossEntropyLoss) và các framework AI, hàm mất mát Cross-Entropy không bao giờ tính riêng p = softmax(z) rồi loss = -log(p). Nếu làm rời rạc, khi mô hình dự đoán sai, py có thể bằng 0.0, dẫn đến -log(0) = ∞ hoặc NaN. Kỹ thuật Fused Softmax Cross-Entropy gộp trực tiếp 2 bước thành 1 công thức giải tích duy nhất: L = -log ( ezy∑k ezk ) = -zy + log ( ∑k=1C ezk ) = -zy + LSE(z) Đặc biệt, đạo hàm của hàm mất mát theo logits z có dạng vô cùng thanh lịch: ∂ L∂ zi = pi - yi = pi - 1 & khi i = y
pi & khi i ≠ y với p = softmax(z).
Hãy viết hàm fused_cross_entropy(logits: np.ndarray, targets: np.ndarray) -> tuple[float, np.ndarray]:
logits: ma trận 2D NumPy kích thước (B, C) kiểu float64.targets: mảng 1D NumPy kích thước (B,) chứa nhãn đúng nguyên dương 0 ≤ yb < C.- Tính giá trị hàm mất mát trung bình trên batch: L = 1B ∑b=1B Lb.
- Tính ma trận gradient trung bình ∂ L∂ z ∈ RB × C:
∂ L∂ zb, i = 1B (pb, i - Ii = yb)
- Trả về tuple
(loss: float, grad: np.ndarray).
Input
- Hàm
fused_cross_entropy(logits,targets): 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
fused_cross_entropy: Trả về kết quả kiểuTuple[float, 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
logits = np.array([[2.0, 2.0]])
targets = np.array([0])
loss, grad = fused_cross_entropy(logits, targets)Output
(0.693147, [[-0.5, 0.5]])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
logits = np.array([[1000.0, 1000.0, 1000.0]])
targets = np.array([1])
loss, grad = fused_cross_entropy(logits, targets)Output
(1.098612, [[ 0.3333, -0.6667, 0.3333]])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.
