ai-183Đọc toàn bộ đề miễn phí

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…

AINâng cao30 phút

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ủ đề

cross-entropyfused-losslog-sum-expgradientsbackpropagation

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ểu Tuple[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ế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.