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.