python-035Đọc toàn bộ đề miễn phí

Cài đặt Hàm Softmax và LogSumExp Ổn định Số học Trong AI

Khi tính toán xác suất từ logits đầu ra của mạng nơ-ron, nếu một giá trị logit bằng 1000.0, hàm np.exp(1000.0) sẽ trả về inf, dẫn đến phép chia infinf = NaN.

PythonTrung bình25 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ủ đề

numpynumerical stabilitysoftmaxlogsumexpdeep learning

Kiến thức tiên quyết: exp overflow, keepdims, vectorization.

Nội dung đề bài

Mục tiêu kiến thức

  • Hiểu rõ hiện tượng tràn số mũ (Overflow / Underflow) trong biểu diễn số thực dấu phẩy động 64-bit (float64) khi tính hàm ex.
  • Nắm vững kỹ thuật Trừ Cực Đại (max-subtraction trick) để đưa giá trị số mũ về khoảng ≤ 0.
  • Cài đặt hai hàm số toán học cốt lõi trong Transformer và Phân loại: Softmax và LogSumExp.

Mô tả bài toán

Khi tính toán xác suất từ logits đầu ra của mạng nơ-ron, nếu một giá trị logit bằng 1000.0, hàm np.exp(1000.0) sẽ trả về inf, dẫn đến phép chia infinf = NaN.

Hãy cài đặt hai hàm ổn định số học:

  • stable_softmax(logits: np.ndarray, axis: int = -1) -> np.ndarray:
  • Trừ giá trị lớn nhất dọc theo trục: m = max(logits, axis=axis, keepdims=True).
  • Tính elogits - m.
  • Chia cho tổng các số mũ: elogits - m∑ elogits - m.
  • Tổng xác suất dọc theo trục axis của ma trận kết quả luôn xấp xỉ 1.0.
  • stable_log_sum_exp(logits: np.ndarray, axis: int = -1) -> np.ndarray:
  • Tính hàm log(∑j ezj) theo công thức ổn định:

m + log(∑ ez - m)

  • Trong đó m = max(logits, axis=axis, keepdims=True).
  • Loại bỏ chiều rút gọn bằng np.squeeze(..., axis=axis) trước khi trả về.

Input

  • Các tham số truyền vào hàm/lớp stable_softmax 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 stable_softmax hoặc dữ liệu in ra màn hình theo đúng đặc tả.

Ràng buộc

  • Hàm phải chạy đúng kể cả khi mảng chứa các giá trị cực lớn (1000.0) hoặc cực nhỏ (-1000.0).
  • Không được trả về inf hay nan.
  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.

Ví dụ 1

Input

stable_softmax(logits=[[1.0, 2.0, 3.0], [1000.0, 1000.0, 1000.0]], axis=-1)

Output

True

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.

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.