Khi cần dự đoán lớp (spam/không spam, chữ số 0–9), mô hình xuất ra logits rồi chuyển thành xác suất:
- 2 lớp: sigmoid σ(z) = 1/(1 + e⁻ᶻ) → xác suất lớp dương (hồi quy logistic)
- Nhiều lớp: softmax(z)ₖ = e^(zₖ) / Σ e^(zⱼ) → vector xác suất tổng bằng 1
Hàm mất mát tương ứng là cross-entropy: L = −log(xác suất của nhãn đúng). Đoán đúng tự tin (p ≈ 1) → L ≈ 0; đoán sai tự tin (p ≈ 0) → L rất lớn.
def softmax(z):
z = z - z.max(axis=-1, keepdims=True) # ổn định số: tránh e^1000 = inf
e = np.exp(z)
return e / e.sum(axis=-1, keepdims=True)
logits = np.array([[2.0, 1.0, 0.1]])
p = softmax(logits) # [[0.659 0.242 0.099]]
loss = -np.log(p[0, 0]) # nhãn đúng là lớp 0 → 0.417Đánh giá mô hình phân loại không chỉ bằng accuracy. Với dữ liệu lệch (99% email không phải spam), mô hình luôn đoán "không spam" đạt 99% accuracy nhưng vô dụng — hãy xem thêm precision, recall, F1.
?softmax([1, 1, 1, 1]) bằng?
Luyện tập ngay
Viết code và chấm tự động — có trợ lý AI gợi ý khi bí.