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

Hồi quy Softmax Đa lớp (Multinomial Logistic Regression)

Hầu hết các bài toán thị giác máy tính và phân loại tài liệu đều có ≥ 3 lớp nhãn. Hồi quy Softmax là tầng tuyến tính cuối cùng (linear classification head) của hầu hết các mô hìn…

AINâng cao40 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ủ đề

softmax-regressioncross-entropymulticlassone-hotoptimization

Kiến thức tiên quyết: logistic-regression-bce-from-scratch, stable-softmax-logits.

Nội dung đề bài

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

  • Mở rộng phân loại nhị phân sang K lớp bằng ma trận trọng số W ∈ RD × K và vector bias b ∈ RK.
  • Cài đặt One-Hot Encoding tất định cho nhãn lớp số nguyên.
  • Tính toán ma trận xác suất Softmax và hàm mất mát Categorical Cross-Entropy Loss.
  • Cập nhật gradient ma trận: ∇W = 1N XT (P - Yonehot).

Mô tả bài toán

Hầu hết các bài toán thị giác máy tính và phân loại tài liệu đều có ≥ 3 lớp nhãn. Hồi quy Softmax là tầng tuyến tính cuối cùng (linear classification head) của hầu hết các mô hình học sâu hiện đại.

Yêu cầu

Viết 2 hàm:

  • one_hot_encode(y: np.ndarray, num_classes: int) -> np.ndarray:
  • Chuyển vector nhãn y độ dài N (với giá trị 0 ≤ yi < num_classes) thành ma trận nhị phân shape (N, num_classes).
  • fit_softmax_regression(X: np.ndarray, y: np.ndarray, num_classes: int, lr: float = 0.1, epochs: int = 300) -> tuple[np.ndarray, np.ndarray, list[float]]:
  • Khởi tạo W = 0 (shape (D, K)) và b = 0 (shape (K,)).
  • Mỗi epoch:
  • Tính logits: Z = XW + b (shape (N, K)).
  • Tính xác suất Softmax ổn định (trừ max theo hàng): P = softmax(Z).
  • Tính mất mát: L = -1N ∑i=1N ∑k=1K Yik log(Pik + ε).
  • Gradient: ∇W = 1N XT (P - Y) và ∇b = 1N ∑ (P - Y).
  • Cập nhật W, b.
  • Trả về (W, b, loss_history).
import numpy as np

def one_hot_encode(y: np.ndarray, num_classes: int) -> np.ndarray:
    pass

def fit_softmax_regression(X: np.ndarray, y: np.ndarray, num_classes: int, lr: float = 0.1, epochs: int = 300) -> tuple[np.ndarray, np.ndarray, list[float]]:
    pass

Input

  • Hàm one_hot_encode(y, num_classes): 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.
  • Hàm fit_softmax_regression(X, y, num_classes, lr, epochs): 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 one_hot_encode: Trả về kết quả kiểu np.ndarray theo đúng đặc tả kỹ thuật và kích thước quy định.
  • Hàm fit_softmax_regression: Trả về kết quả kiểu tuple[np.ndarray, np.ndarray, list[float]] 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: 3000ms.
  • Giới hạn bộ nhớ: 256MB.
  • 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

y = np.array([0, 1, 2, 1])
oh = one_hot_encode(y, num_classes=3)

Output

[[1., 0., 0.],
 [0., 1., 0.],
 [0., 0., 1.],
 [0., 1., 0.]]

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

X = np.array([[-5.0, 0.0], [-4.0, 0.0], [0.0, 5.0], [0.0, 4.0], [5.0, 0.0], [4.0, 0.0]])
y = np.array([0, 0, 1, 1, 2, 2])
W, b, history = fit_softmax_regression(X, y, num_classes=3, lr=0.5, epochs=300)

Output

([[-1.5357, -0.    ,  1.5357],
 [-0.6265,  1.253 , -0.6265]], [ 0.0912, -0.1823,  0.0912], [1.0986122886681098, 0.04839145033332112, 0.03937362578782156, 0.03361688176157944, 0.029500713752547317, 0.02636608844663615, 0.023879537050691225, 0.021849151825873946, 0.020154687899607053, 0.018716102281766633, 0.01747763844077183, 0.016399056502... (truncated))

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.