La softmax è la funzione che trasforma un vettore di numeri qualsiasi in un vettore di probabilità (tutte tra 0 e 1, somma = 1). È matematica semplice ma sta ovunque.
Formula: per ogni elemento x_i, calcoli e^(x_i) / sum(e^(x_j)). L'esponenziale amplifica le differenze: il numero più grande domina, gli altri spariscono.
Esempio concreto: il modello deve prevedere il prossimo token tra 100.000 possibili. Calcola un punteggio (logit) per ognuno. Softmax trasforma i 100.000 logits in 100.000 probabilità che sommano a 1. Poi sceglie da lì.
Dove si usa:
- Output di un LLM: distribuzione sul vocabolario per scegliere il prossimo token.
- Output di un classificatore multi-classe: probabilità per ogni classe.
- Dentro l'attention: trasforma i punteggi di attenzione in pesi che sommano a 1.
Trucchi che vedi nei codici:
- Temperature: dividi i logits per una T prima della softmax. T < 1: più deciso (sceglie sempre la cosa più probabile). T > 1: più creativo. T = 0: sempre la stessa scelta (greedy).
- Top-k / Top-p (nucleus): ignori i token meno probabili prima di campionare. Riduce risposte assurde.
- Log-softmax: variante numericamente stabile, usata internamente per evitare overflow.
Quando regoli la "creatività" di ChatGPT o Claude, stai toccando temperature e top-p. Niente di magico, è la softmax che fa il lavoro.