Se chiedi a un LLM “scrivimi una poesia sull’entropia quantistica” e poi lo rifai, e lo rifai ancora, noterai che qualcosa cambia. E no, non è perché è lunatico o ha letto troppi libri di filosofia quantistica. È colpa – o merito – della temperatura. Una variabile piccola e subdola che decide se il tuo modello è un contabile svizzero o un poeta stravagante in acido. E il bello è che sta tutto in una formula da due righe. Ma dietro c’è il cuore pulsante del comportamento di generazione testuale di un LLM.

In un modello di classificazione classico, la temperatura non la calcoli nemmeno. Usi softmax, prendi il massimo, fine. Ti serve sapere se l’immagine è un gatto o un cane, non se il gatto vuole scrivere un romanzo. Ma un modello generativo, tipo un GPT o un LLaMA, non deve solo classificare. Deve scegliere. Ogni volta. Parola dopo parola. Ed è qui che l’aleatorietà controllata entra in scena con la grazia tossica di un dado truccato.

Softmax con una marcia in più

La softmax, per chi si è addormentato a lezione di ML, prende un vettore di logits (numeri grezzi, derivanti dall’output del modello) e li trasforma in probabilità. Una specie di diplomazia matematica: “Ok, qui c’è una logit alta, ma diamo un po’ di spazio anche agli altri”. È come un partito democratico con preferenze forti.

Ma la temperatura scombina questa diplomazia. Formalmente, invece di:

  P(tokenᵢ) = eˣⁱ / Σⱼ eˣʲ

…facciamo:

  P(tokenᵢ) = e^(xᵢ/T) / Σⱼ e^(xⱼ/T)

Ora, se T è piccolo (tipo 0.1), allora stai dicendo: “solo il token con la logit più alta conta davvero”. Le probabilità collassano attorno al più forte. Il modello diventa prevedibile, noioso, e in fondo rassicurante. Un contabile.

Se invece T è alto (tipo 1.5 o 2), il modello diventa permissivo. Anche le logit basse si alzano di voce. Il token con il 10% di probabilità può improvvisamente vincere su quello col 40%. È come aprire il cervello del modello e lasciarci entrare una jam session jazz. Sì, può uscirne una sinfonia. Ma anche un disastro.

Un esempio da bar (ma con codice sotto)
Prendi questa sequenza: “Il gatto salta sul…”.
Con temperatura = 0.2 potresti ottenere quasi sempre “divano”.
Con temperatura = 1.0 potresti vedere “divano”, “tetto”, “letto”, “drone”, “sindaco”.
Con temperatura = 2.0, magari salta fuori “meridiano” o “cataclisma”.

La temperatura è l’interruttore che decide se stai generando frasi da un manuale scolastico o da un sogno psichedelico di Alan Turing.

Un dettaglio cinico: anche a T = 0 non sei mai completamente al sicuro

Si dice: “Temperatura 0? Allora deterministico, no?”. Sì, in teoria. Ma nella pratica c’è il caos. La GPU non è un oracolo zen: ci sono race condition, sampling multithreaded, round-off, ottimizzazioni sporche. La tua stessa macchina potrebbe darti risposte diverse a distanza di microsecondi. Morale: anche col ghiaccio secco sotto il sedere, il modello può ancora scivolare.

Perché tutto questo è importante?

Perché la temperatura è un’arma a doppio taglio. È ciò che distingue una risposta GPT “corporate”, tutta grammatica e buon senso, da una poesia surreale che improvvisamente parla della morte del tempo. È la differenza tra uno use-case per chatbot bancari e uno per scrittori in crisi esistenziale.

Nel tuning dei modelli, temperature basse sono perfette per task con risposte uniche, affidabili: codice, riassunti, Q&A. Temperature più alte? Servono quando vuoi creatività, varietà, spunti. Ma se la porti troppo su, stai solo chiedendo al modello di scommettere al buio. E i modelli, come i casinò, tendono a farti perdere.

Una provocazione da CTO:
Non è tanto la temperatura che definisce un buon modello, ma quanto bene riesci a usarla nei contesti giusti. L’ingegnere mediocre chiede “che modello usiamo?”. Quello bravo domanda “che temperatura mettiamo per ottenere l’effetto che vogliamo?”. Perché la vera arte non è nel creare token, ma nel decidere quale caos sei disposto a tollerare.

E se ancora ti stai chiedendo se “0.7 è meglio di 1.0”, forse non hai capito la domanda.

PROVATELO QUI