Perché l'AI Risponde in Modo Diverso alla Stessa Domanda: Temperatura e Sampling Spiegati

Temperatura, top-p, top-k, greedy decoding. Come funziona davvero la generazione del testo nei modelli AI e perché temperatura 0 non è veramente deterministica.

Se un’intelligenza artificiale non “pensa” ma calcola solo il token successivo, perché non restituisce sempre lo stesso risultato?

Nell’articolo precedente abbiamo smontato un LLM pezzo per pezzo: tokenizzazione, embeddings, attention, layer e il dado pesato finale. Ora entriamo nel meccanismo che controlla quel dado — e scopriamo perché è molto meno deterministico di quello che pensi.

Pappagalli stocastici, non calcolatrici

Prima di tutto: un chiarimento fondamentale. I Large Language Models sono stati definiti “pappagalli stocastici” (stochastic parrots) in un paper del 2021 di Bender, Gebru et al. Il termine è riduttivo ma cattura un punto reale: un LLM non “sa” una risposta corretta. Prevede token successivi plausibili, e spesso ce ne sono molti che si adattano ugualmente bene.

Non è una calcolatrice che restituisce sempre 1 + 1 = 2. È un sistema che valuta una lista di continuazioni plausibili e ne sceglie una.

Anche solo l’ordine di due parole ugualmente valide all’inizio di una frase può spostare tutto ciò che viene dopo, perché ogni token scelto condiziona le probabilità del successivo. Da un inizio diverso, tutta la risposta diverge.

Dai logit alle probabilità: cosa succede prima del “lancio”

Per capire la temperatura serve capire cosa produce il modello alla fine di ogni step.

Dopo tutti i layer di attention e feed-forward, il modello genera un vettore di logit — un punteggio numerico grezzo per ognuno dei token nel vocabolario (tipicamente 32.000 - 128.000 token).

Questi logit non sono probabilità. Possono essere numeri qualsiasi: positivi, negativi, molto grandi o molto piccoli. Per trasformarli in probabilità si usa la funzione softmax:

P(token_i) = exp(logit_i) / Σ exp(logit_j)

Dove la somma è su tutti i token del vocabolario. Il risultato è una distribuzione di probabilità: tutti i valori sono positivi e sommano a 1.

Un esempio numerico

Supponiamo che dopo la frase “Stasera voglio mangiare” il modello produca questi logit per i primi 5 token candidati:

TokenLogitProbabilità (softmax)
pizza4.235.1%
sushi3.517.4%
pasta3.314.3%
tacos2.88.6%
cinese2.56.4%
… (18.2% distribuito su migliaia di altri token)

“Pizza” è il token più probabile ma non domina. Il modello potrebbe ragionevolmente continuare con uno qualsiasi dei primi 5. Ed è qui che entra la temperatura.

Cos’è la temperatura

La temperatura è un parametro (tipicamente tra 0 e 2) che scala i logit prima della softmax:

P(token_i) = exp(logit_i / T) / Σ exp(logit_j / T)

Dove T è la temperatura. L’unica differenza con la softmax standard è quel / T. Ma l’effetto è enorme.

Temperatura bassa (T → 0): il dado truccato

Dividere i logit per un numero piccolo amplifica le differenze. Se pizza ha logit 4.2 e sushi ha 3.5, con temperatura 0.2:

  • Pizza: 4.2 / 0.2 = 21.0
  • Sushi: 3.5 / 0.2 = 17.5

La differenza passa da 0.7 a 3.5. Dopo la softmax, pizza domina quasi totalmente.

TokenT=1.0T=0.5T=0.2
pizza35.1%55.8%91.3%
sushi17.4%16.2%5.1%
pasta14.3%11.7%2.4%
tacos8.6%5.3%0.6%
cinese6.4%3.4%0.3%

A temperatura 0.2, pizza vince il 91% delle volte. A temperatura 0 (greedy decoding), il modello sceglie sempre il token con la probabilità più alta, senza lancio del dado.

Temperatura 1: il dado naturale

A T=1 la softmax è standard, le probabilità riflettono il modello così com’è. È la baseline: abbastanza varietà per risposte naturali, abbastanza struttura per restare coerenti.

Temperatura alta (T > 1): il dado appiattito

Dividere per un numero grande comprime le differenze. Tutti i token diventano quasi equiprobabili:

TokenT=1.0T=1.5T=2.0
pizza35.1%26.8%22.6%
sushi17.4%16.5%15.9%
pasta14.3%14.2%14.1%
tacos8.6%10.2%11.2%
cinese6.4%8.3%9.6%

A temperatura 2.0, anche token improbabili hanno chance reali. Il modello diventa “creativo” — o meglio, imprevedibile. Utile per brainstorming, pericoloso per qualsiasi task dove serve accuratezza.

Top-K: il primo filtro

Prima del lancio del dado, si può limitare il numero di token candidati. Top-K prende i K token con probabilità più alta e redistribuisce le probabilità solo tra quelli.

Con top-k = 3 nel nostro esempio:

TokenProbabilità originaleDopo top-k=3 (rinormalizzata)
pizza35.1%52.6%
sushi17.4%26.1%
pasta14.3%21.3%
tacos8.6%escluso
cinese6.4%escluso

Il problema di top-k è che il valore giusto dipende dal contesto. In alcuni casi i primi 3 token coprono il 90% della probabilità e k=3 è perfetto. In altri casi il modello è molto incerto e servirebbero 50 candidati. Top-k non si adatta.

Top-P (nucleus sampling): il filtro intelligente

Top-P risolve il limite di top-k con un approccio adattivo: invece di un numero fisso di token, prende il set minimo di token la cui probabilità cumulativa supera la soglia P.

Con top-p = 0.85:

  1. Ordina per probabilità: pizza (35.1%), sushi (17.4%), pasta (14.3%), tacos (8.6%), cinese (6.4%)…
  2. Somma cumulativa: 35.1% → 52.5% → 66.8% → 75.4% → 81.8% → 87.2% (supera 85%)
  3. Tieni solo i token che servono per arrivare alla soglia

Se il modello è molto sicuro (un token ha 90% di probabilità), top-p seleziona solo quello. Se è incerto, ne seleziona molti. Si adatta automaticamente alla certezza del modello in ogni step.

Questo è il motivo per cui top-p è generalmente preferito a top-k nella pratica.

Perché temperatura 0 non è veramente deterministica

Uno dei malintesi più comuni: “se metto temperatura 0, ottengo sempre la stessa risposta”. Non è vero, e i motivi sono tecnici e profondi.

1. Floating-point non è associativo

Le GPU eseguono calcoli in virgola mobile a precisione limitata (FP16, BF16). L’addizione in floating-point non è associativa: (a + b) + c ≠ a + (b + c) quando si lavora con numeri molto grandi o molto piccoli.

L’ordine in cui vengono sommati i prodotti nell’attention dipende da come la GPU parallelizza il lavoro — e questo può variare tra un’esecuzione e l’altra. Risultato: logit leggermente diversi, che con il greedy decoding possono far vincere un token diverso.

2. Tie-breaking non deterministico

Quando due token hanno probabilità identiche (o quasi), il modello deve scegliere e non esiste un meccanismo standard per rompere il pareggio in modo deterministico. Diverse implementazioni fanno scelte diverse.

3. Mixture-of-Experts (MoE)

Modelli come Mixtral o Gemini usano architetture Mixture-of-Experts: ogni token viene instradato verso sotto-reti specializzate. In produzione, le richieste vengono raggruppate in batch e i token competono per la capacità limitata degli expert. Lo stesso token può finire su expert diversi a seconda del carico del momento — generando output diversi.

4. Ottimizzazioni del software stack

CUDA, cuDNN e le librerie di inferenza applicano ottimizzazioni che possono introdurre non-determinismo: kernel diversi selezionati in base alla dimensione dell’input, caching, reordering delle operazioni.

In pratica: temperatura 0 aumenta enormemente il determinismo, ma non lo garantisce. Chi costruisce sistemi AI in produzione progetta per tollerare piccole variazioni semantiche, non per eliminarle.

Combinare i parametri: le configurazioni pratiche

I parametri di sampling non si usano in isolamento. Ecco le combinazioni più comuni:

Estrazione dati e classificazione

temperatura: 0
top_p: 1 (o non specificato)

Massimo determinismo. Il modello sceglie sempre il token più probabile. Ideale per parsing di documenti, estrazione di entità, classificazione in categorie predefinite.

Conversazione e assistenza

temperatura: 0.7
top_p: 0.9

Il sweet spot per la maggior parte dei chatbot e assistenti. Abbastanza variazione per sembrare naturale, abbastanza vincolo per restare coerente e accurato.

Scrittura creativa e brainstorming

temperatura: 0.9-1.2
top_p: 0.95

Più libertà per associazioni inaspettate. Utile per generare opzioni, bozze, idee. Il rischio di incoerenza aumenta — serve sempre revisione umana.

Configurazioni da evitare

temperatura: > 1.5 con top_p: 1.0

Il dado è quasi piatto e non c’è filtro. Output spesso inutilizzabile: frasi incoerenti, allucinazioni estreme, perdita del contesto. Quasi mai usato in produzione.

Il vero limite

Anche con i parametri di sampling perfettamente calibrati, resta un problema fondamentale: il modello genera da quello che ha visto nel training.

Se gli chiedi informazioni che non ha mai visto, dati che sono cambiati dopo il suo addestramento, o fatti specifici del tuo business — inventa comunque, con la massima sicurezza.

La temperatura controlla come sceglie, non cosa sa.

Per risolvere questo serve dare al modello i dati giusti al momento giusto, iniettandoli direttamente nel contesto. Si chiama RAG (Retrieval Augmented Generation) e cambia completamente il gioco.

Ne parliamo nel prossimo articolo.


Articoli della serie “Come funziona davvero l’AI”:

  1. Come funziona davvero un’AI: LLM spiegato passo per passo
  2. Perché l’AI risponde in modo diverso alla stessa domanda ← sei qui
  3. Cos’è il RAG e perché cambia tutto — prossimamente
  4. Cos’è un tool per l’AI — prossimamente

Secondo articolo della serie “Come funziona davvero l’AI”. Seguici per i prossimi approfondimenti.

Hai un progetto in mente?

Parliamone insieme e vediamo come possiamo aiutarti.