Softmax ổn định số
DễnumpysoftmaxAI6 test · 12 giây · sai số 1e-5
Cài đặt softmax theo trục cuối (mỗi hàng của ma trận là một vector logits):
softmax(x)ᵢ = e^(xᵢ) / Σⱼ e^(xⱼ)
- Logits trong test có thể lớn tới 1000 →
np.exp(1000)tràn số. Trừ đi giá trị lớn nhất của mỗi hàng trước khi lấy mũ (kết quả không đổi vì softmax bất biến khi cộng hằng số). - Dùng
keepdims=Trueđể broadcasting đúng.
Viết hàm
softmax(x)Tham số
x: mảng 2 chiều (n, c) — n vector logits
Trả về
Mảng (n, c), mỗi hàng có tổng bằng 1.
Ví dụ
Tham số
x = [[1,2,3]]
Kết quả
[[0.090030573,0.244728471,0.665240956]]
≈ [0.090, 0.245, 0.665]
Tham số
x = [[1000,1001],[-5,5]]
Kết quả
[[0.268941421,0.731058579],[4.5398e-05,0.999954602]]
Hàng đầu: trừ 1001 rồi mới lấy mũ
Bài tiếp theo: Mã hóa one-hot →
Python · NumPy
Bấm “Chạy thử” để gọi softmax() với 2 ví dụ trong đề và so sánh kết quả. Dùng print() thoải mái để gỡ lỗi.