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…
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: 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]]:
passInput
- 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ểunp.ndarraytheo đúng đặc tả kỹ thuật và kích thước quy định. - Hàm
fit_softmax_regression: Trả về kết quả kiểutuple[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ế.
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.
