Le stesse probabilità, due modi di sbagliare
Un modello piccolo deve imitare una distribuzione più ricca. Possiamo penalizzare ciò che il modello manca oppure ciò che propone senza sostegno: sembrano la stessa richiesta, ma non lo sono quando le possibilità del modello sono limitate. La divergenza di Kullback–Leibler, abbreviata KL, è direzionale. Invertire gli argomenti può cambiare quale approssimazione scegliamo. Lo vedremo su tre categorie e tre candidati espliciti, senza presentare una prova didattica come un esperimento di addestramento di grandi modelli.
Chi pesa ogni errore?
Siano p la distribuzione di riferimento e q la candidata: numeri non negativi che sommano a uno sulle stesse categorie. Usiamo logaritmi naturali, quindi i valori sono in nat. D_KL(p||q) pesa il rapporto p_i/q_i con p_i; D_KL(q||p) lo pesa con q_i e inverte il rapporto. Non è una distanza metrica: non è simmetrica e non deve soddisfare la disuguaglianza triangolare. Chiamare entrambe semplicemente “la loss KL” omette una parte essenziale della funzione obiettivo.
Fissando p, il primo criterio equivale a minimizzare la cross-entropy −Σ p_i log q_i, perché Σ p_i log p_i non dipende dal candidato. Ogni categoria importante per p continua a pesare anche se q vorrebbe ignorarla. Nel secondo criterio è invece q a decidere con quale frequenza ogni regione contribuisce alla media. Questo orienta l’intuizione, ma non dimostra che ogni KL inversa debba concentrarsi su un singolo modo: servono i vincoli concreti della famiglia candidata.
Un confronto che possiamo rifare interamente
Il riferimento è p=(0,495;0,01;0,495): due categorie esterne frequenti e una centrale rara. Il candidato ampio q_W=(0,34;0,32;0,34) copre entrambe le estremità ma assegna troppa massa al centro. q_L=(0,98;0,01;0,01) privilegia la prima; q_R ne è il riflesso. Questi tre vettori costituiscono tutta la famiglia ammessa nell’esperimento. Non affermiamo che siano l’esito ottimo di una rete gaussiana o di una particolare architettura: li confrontiamo come alternative finite.
Per la direzione p||q_L, il termine della terza categoria è 0,495·log(0,495/0,01), grande e positivo: il candidato quasi cancella qualcosa che il riferimento rende frequente. Per q_W||p, il termine centrale è 0,32·log(0,32/0,01): il candidato propone spesso una categoria rara nel riferimento. Altri termini possono essere negativi, ma la somma KL è non negativa. Il codice calcola tutte le somme: la direzione p||q preferisce W; la direzione q||p preferisce L o R a pari merito.
| Candidato | p || q (nat) | q || p (nat) |
|---|---|---|
| W | 0.337199 | 0.853619 |
| L | 1.593394 | 0.630315 |
| R | 1.593394 | 0.630315 |

Gli zeri cambiano il dominio, non soltanto il valore
Per convenzione un termine con peso zero contribuisce zero, anche quando il rapporto non è scritto come una divisione ordinaria. Se però p_i>0 e q_i=0, p_i log(p_i/q_i) rende la divergenza p||q infinita. Il candidato duro (0,99;0,01;0) ha quindi divergenza diretta infinita, mentre quella inversa rispetto al nostro p strettamente positivo è finita. Aggiungere un epsilon elimina l’infinito ma cambia la distribuzione: occorre rinormalizzare e dichiarare quale problema stiamo approssimando.
Senza vincoli entrambe scelgono il riferimento
Per capire il limite del confronto, togliamo il vincolo dei tre candidati. Se q può essere p, entrambe le divergenze valgono zero e non possono fare meglio. Per distribuzioni positive, log z≤z−1 implica Σ p_i log(q_i/p_i)≤Σ(q_i−p_i)=0: cambiando segno otteniamo D_KL(p||q)≥0. L’uguaglianza richiede q=p; i casi di supporto incompleto vanno trattati con le convenzioni sugli zeri. Il disaccordo del nostro esempio nasce dunque da vincoli di rappresentazione, non da due verità probabilistiche incompatibili.
Anche le derivate mostrano la diversa pressione: trattando le componenti di q come coordinate positive, la diretta ha derivata −p_i/q_i; l’inversa log(q_i/p_i)+1. Una parametrizzazione normalizzata deve poi applicare la propria regola della catena e il vincolo di somma: queste espressioni non sono aggiornamenti pronti da usare. Per addestrare davvero servono campionamento, stima dei gradienti e controllo della famiglia rappresentabile. Non abbiamo eseguito tali procedure né misurato preferenze o qualità del testo generato.
Scegliere la direzione significa scegliere il confronto
Invertire KL non è una variazione cosmetica. Nel nostro caso finito cambia il candidato migliore perché cambia chi pesa le regioni trascurate o sovrarappresentate. La conclusione utile per distillazione e modelli generativi è scrivere esplicitamente riferimento, candidata, supporto e vincoli prima di discutere la loss. “Copertura” e “concentrazione” sono intuizioni da verificare nel problema concreto, non etichette che sostituiscono un esperimento. La bibliografia documenta la definizione; il confronto numerico è una nostra analisi didattica riproducibile.
SciPy 1.18.0 — Relative entropy.
import math,json,sys
from pathlib import Path
p=[.495,.01,.495];candidates={'wide':[.34,.32,.34],'left':[.98,.01,.01],'right':[.01,.01,.98]}
def kl(a,b):
assert abs(sum(a)-1)<1e-12 and abs(sum(b)-1)<1e-12
if any(x>0 and y==0 for x,y in zip(a,b)):return math.inf
return math.fsum(x*math.log(x/y) for x,y in zip(a,b) if x>0)
rows=[dict(name=k,q=q,forward=kl(p,q),reverse=kl(q,p)) for k,q in candidates.items()]
assert min(rows,key=lambda x:x['forward'])['name']=='wide'
assert rows[1]['reverse']<rows[0]['reverse'] and abs(rows[1]['reverse']-rows[2]['reverse'])<1e-12
assert kl(p,p)==0 and math.isinf(kl(p,[.99,.01,0])) and math.isfinite(kl([.99,.01,0],p))
r=dict(python=sys.version.split()[0],seed=None,scope='Exact finite candidate comparison, not training or inference benchmark',p=p,rows=rows,hardReverse=kl([.99,.01,0],p),hardForward='infinite',units='nats, natural logarithms')
Path(__file__).with_name('results.json').write_text(json.dumps(r,indent=2),encoding='utf8')
Codice, dati e istruzioni · JSON. Calcoli didattici eseguiti con Python 3.14.0; figure con Matplotlib 3.11.2. Analisi con assistenza AI, senza dichiarare peer review o revisione umana. Copertina originale ImageGen, illustrativa: non documenta persone, sedi o installazioni EL-AI. Fonti consultate il 25 ottobre 2026.

