The Log-Sum-Exp Trick for Softmax
import numpy as np
def log_sum_exp(x):
# Subtracting the max prevents overflow when exponentiating large numbers
c = np.max(x)
return c + np.log(np.sum(np.exp(x - c)))
def stable_softmax(x):
return np.exp(x - log_sum_exp(x))
Why it matters: The log-sum-exp pattern prevents NaN or Inf when logits are large, keeping gradients finite during backprop.