Nel machine learning è fondamentale misurare quanto accuratamente i nostri modelli prevedono gli esiti del mondo reale. Che tu stia creando un modello per le previsioni meteo o ottimizzando un sistema di raccomandazione, ti serve un modo per quantificare quanto le tue previsioni siano vicine alla realtà. Un approccio potente per farlo è la KL-Divergence.
In questo articolo esplorerò cos’è la KL-Divergence, perché è importante, la sua interpretazione intuitiva, le basi matematiche ed esempi pratici che ne mostrano l’applicazione.
La KL-Divergence (Kullback-Leibler Divergence) è una misura statistica usata per determinare come una distribuzione di probabilità diverge da una distribuzione di riferimento.
Supponiamo di costruire insieme un modello per prevedere il meteo di domani. Sotto il cofano, il nostro modello sta facendo scommesse—assegnando probabilità ai possibili esiti. Ma c’è una domanda importante da porsi:
Come misuri quanto queste scommesse si discostano dalla realtà?
Abbiamo bisogno di un modo per quantificare questa differenza, ed è qui che entra in gioco la KL-Divergence. È uno strumento matematico che quantifica la differenza tra ciò in cui il nostro modello crede e ciò che è effettivamente vero.
Come ho detto prima, la KL-Divergence (o più formalmente Divergenza di Kullback-Leibler) è la spina dorsale della data science moderna, del machine learning e dell’IA. Ci dice, in bit o in nat (ne parleremo più avanti), quanta “sorpresa extra” o “perdita di informazione” accumuliamo quando usiamo una distribuzione di probabilità (ad esempio le previsioni del nostro modello, Q) per approssimarne un’altra (la verità del mondo reale, P).
Agisce come un giudice dietro la valutazione dei modelli, la regolarizzazione nelle reti neurali, gli aggiornamenti bayesiani e persino il modo in cui comprimiamo i dati o trasmettiamo messaggi in modo efficiente.
Per capire davvero quanto sia importante la KL-Divergence, pensala così. Ogni volta che il nostro modello fa una previsione, in realtà sta scommettendo sul futuro. La KL-Divergence è il tabellone che calcola quanto costano queste scommesse. Lo stesso principio vale in un’ampia gamma di temi di machine learning, che si tratti di addestrare un chatbot, diagnosticare una malattia o ottimizzare una campagna pubblicitaria.
Matematicamente, la KL-Divergence è definita così:
Sopra c’è la formula per i casi discreti, e quella sotto è per i casi continui.
Intuizione dietro la KL-Divergence
In questa sezione, deriveremo in modo intuitivo la KL-Divergence. Iniziamo con una serie di domande.
Capire la sorpresa
“Se lanciassi una moneta e io indovinassi perfettamente l’esito, ti sorprenderesti?”. Immagino che saresti un po’ sorpreso ma non sconvolto. Ora passiamo al secondo scenario.
“Se tirassi un dado e io indovinassi perfettamente l’esito, saresti più sorpreso rispetto allo scenario precedente?”. Suppongo di sì, dato che è meno probabile che io indovini l’esito corretto.
Ora, un ultimo scenario:
“Se indovinassi correttamente i numeri vincenti della lotteria, ora saresti più sorpreso rispetto allo scenario precedente?”. Suppongo che diresti di sì e saresti completamente scioccato. Ma perché?
Perché, passando da uno scenario all’altro, la probabilità che io riesca a indovinare l’esito corretto diminuisce e quindi la tua sorpresa aumenta rispetto all’esito. Abbiamo quindi notato una relazione:
La probabilità che un evento accada è in relazione inversa con la sorpresa.
Per chiarezza: man mano che la probabilità di un evento si riduce, la sorpresa aumenta, e viceversa.
Tuttavia, possiamo fare un’altra osservazione interessante. Se torniamo ai lanci di dado e immaginiamo lo scenario in cui lanci lo stesso dado 3 volte e io indovino correttamente ogni volta, quanto saresti più sorpreso rispetto al caso in cui ci fosse un solo lancio e io lo indovinassi?
Beh, la tua sorpresa non sarebbe solo leggermente maggiore rispetto a un singolo indovinato; sarebbe drasticamente maggiore, idealmente tre volte maggiore. Perché? Perché ogni nuovo indovinato corretto amplifica la tua incredulità. Non stai semplicemente aggiungendo una quantità fissa di sorpresa—stai moltiplicando quanto l’evento sembri incredibile.
Quindi, quando proviamo a definire matematicamente la Sorpresa, vorremmo che avesse:
Proprietà additiva: se si verificano due eventi indipendenti, la loro sorpresa combinata dovrebbe essere la somma delle loro sorprese individuali.
Esempio: indovinare correttamente 1 lancio di dado → Sorpresa = S. Indovinare correttamente 2 lanci → Sorpresa = S + S = 2S.
Relazione inversa con la probabilità. Più un evento è improbabile, più è sorprendente.
Esempio: un lancio di moneta (50%) è meno sorprendente che vincere alla lotteria (0,000001%).
Sorpresa zero per eventi certi. Se qualcosa accade sempre (probabilità = 1), la sorpresa deve essere zero.
Esempio: "Il sole è sorto oggi." → Per niente sorprendente.
Scalatura continua. Una piccola variazione di probabilità dovrebbe portare a una variazione della sorpresa fluida e logica (senza salti improvvisi).
A prima vista, dato l’alto numero di requisiti, potremmo pensare che la definizione matematica sia piuttosto complicata. Invece no!
Tutti i requisiti precedenti si risolvono manipolando la funzione logaritmo. La funzione log da sola (spesso log(x) e ln(x) vengono usati in modo intercambiabile) ha la seguente forma:
Abbiamo già soddisfatto parecchi requisiti. Concentrati prima sulla proprietà additiva. Ricordi quando abbiamo detto che se si verificano due eventi indipendenti, la loro sorpresa totale dovrebbe essere la somma delle sorprese individuali? Ebbene, è esattamente ciò che fa il logaritmo!
Ecco come:
La probabilità di ottenere un 6 con un dado equo è ⅙, e definiamo la sorpresa dell’evento così:
Ora, prendi l’evento di ottenere un 6 tre volte di fila: la probabilità combinata sarebbe ⅙ * ⅙ * ⅙ = 1/216.
In termini di sorpresa, sarebbe:
Questa è un’osservazione importante, perché la sorpresa totale è aumentata di un fattore 3 grazie al logaritmo usato. Inoltre, soddisfa anche la Proprietà 3, dato che log(1) = 0, poiché un evento con certezza totale non ha alcun elemento di sorpresa.
In più, anche la Proprietà 4 è soddisfatta perché log(x) è una funzione continua e monotona! Tuttavia, la Proprietà 2 non è soddisfatta, dato che la nostra sorpresa diminuisce quando la probabilità diminuisce (poiché diventa più negativa).
Possiamo risolverlo facilmente applicando un segno negativo! Quindi, la nostra funzione diventa -log(x), che ha la forma seguente.
È anche importante notare che le altre 3 proprietà restano soddisfatte con questa modifica. Pertanto possiamo definire matematicamente la sorpresa come:
Entropia
Nel machine learning, non ci interessa solo la sorpresa di un singolo evento, ma la sorpresa media su tutti i possibili eventi. Questa si chiama sorpresa attesa. Più specificamente, ci interessa trovare la sorpresa attesa della distribuzione.
Questa è una formula famosa, ed è la sorpresa attesa, più comunemente nota come Entropia. Tuttavia, in modo un po’ fuorviante, spesso usiamo P e Q per indicare le nostre distribuzioni, quindi non confonderti con p, che indica la probabilità!
Intuitivamente, stiamo semplicemente moltiplicando la probabilità di ciascun esito per la sua sorpresa, e poi sommando su tutti i possibili esiti.
D’ora in poi, diremo che P(x) è la nostra vera distribuzione sottostante e Q(x) è la distribuzione con cui stiamo tentando di approssimare P(x) (cioè Q(X) è la distribuzione “sbagliata”). Questo è molto comune nel machine learning—i nostri modelli cercano costantemente di stimare il mondo reale.
E ora arriva la grande domanda:
Cosa succede se calcoliamo la nostra sorpresa usando la distribuzione sbagliata?
Possiamo comunque calcolare la sorpresa, ma invece di usare P(x), ora la misuriamo rispetto a Q(x). Questo ci dà una nuova aspettativa:
Questo passaggio spesso crea confusione quando si deriva la KL-Divergence. Stiamo ancora campionando secondo P(x) (perché quella è la vera distribuzione), ma misuriamo la sorpresa usando Q(x) (la convinzione del nostro modello).
Questa quantità è talvolta chiamata cross-entropy tra P(x) e Q(x).
Formula della KL-Divergence
Fino a questo punto, abbiamo definito due quantità:
Entropia: la sorpresa attesa se usiamo la vera distribuzione P(x)
Cross-entropy: la sorpresa attesa se usiamo la distribuzione sbagliataQ(x)
Per ottenere la formula della KL-Divergence, sottraiamo semplicemente queste due quantità e otteniamo questo:
E sì, la domanda che ti farai è: perché?
Torniamo all’intuizione della sorpresa.
L’entropia ci dice la quantità minima di sorpresa possibile se conoscessimo la vera distribuzione P(x). Pensala come il “costo ideale”.
La cross-entropy ci dice la quantità effettiva di sorpresa che accumuliamo usando l’approssimazione Q(x). Pensala come il “costo reale”.
Quindi, quando calcoliamo la KL-Divergence sottraendo queste quantità, stiamo chiedendo quanta sorpresa extra stiamo pagando perché abbiamo usato la distribuzione sbagliata Q(x) invece di quella reale P(x). È la penalità per avere convinzioni sbagliate.
È anche importante notare che se Q(x) è uguale a P(x), allora la KL-Divergence sarà pari a 0. Ha senso—se le previsioni del nostro modello corrispondono perfettamente alla vera distribuzione, non c’è sorpresa extra, e quindi nessuna penalità.
Questo è diverso dalla cross-entropy, che non va a zero nemmeno quando P(x) è uguale a Q(x); semplicemente è uguale all’entropia di P(x).
Possiamo quindi pensare alla KL-Divergence come “ancorata” a zero, nel senso che inizia ad aumentare solo quando la nostra distribuzione predetta inizia a divergere da quella vera.
Esempi di KL-Divergence
Ottimo lavoro a derivare l’equazione! Per fissare il concetto, facciamo un esempio per consolidarlo.
Immagina che dobbiamo prevedere il genere cinematografico preferito di un utente. Dai dati passati, ci è stata fornita la vera distribuzione sui quattro generi (cioè questa è la nostra P(x)).
Genere cinematografico
Probabilità
Azione
0,4
Commedia
0,3
Drammatico
0,2
Horror
0,1
Ora insieme abbiamo costruito un modello che ha previsto questo (cioè questa è la nostra Q(x)).
Genere cinematografico
Probabilità
Azione
0,3
Commedia
0,4
Drammatico
0,2
Horror
0,1
C’è chiaramente qualche differenza tra le due distribuzioni, ma di quanto? Qui useremo la KL-Divergence, con l’equazione seguente:
Nota come il termine diventa 0 quando le due distribuzioni hanno la stessa probabilità per quell’esito.
KL-Divergence in Python
Possiamo anche risolvere il problema sopra con Python:
import numpy as np
from scipy.stats import entropy # Important module from scipy
P = np.array([0.4,0.3,0.2,0.1])# This is our true distribution
Q = np.array([0.3,0.4,0.2,0.1])# This is our model’s prediction
kl_nats = entropy(P, Q)# natural log ⇒ nats
kl_bits = entropy(P, Q, base=2)# log₂ ⇒ bitsprint(f"KL(P‖Q) = {kl_nats} nats")print(f"KL(P‖Q) = {kl_bits} bits")Offerto da
Questo codice è piuttosto semplice e intuitivo, a parte il fatto che non abbiamo usato il termine KL-Divergence da nessuna parte! Piuttosto, ho usato entropy molte volte.
Questo ci porta a un punto importante: la KL-Divergence è spesso chiamata Entropia relativa. Quindi, in realtà stiamo calcolando la KL-Divergence, dato che il modulo entropy calcola l’entropia relativa tra le due distribuzioni.
Questo può creare confusione, quindi voglio fare una breve pausa e riassumere tutto:
Termine
Notazione
Formula
Entropia o Entropia di Shannon
H(P)
−∑Pi logPi
Cross-Entropy
H(P,Q)
−∑Pi logQi
KL-Divergence o Entropia relativa
D_KL (P∥Q)
−∑Pᵢ · log(Qᵢ/Pᵢ)
oppure
∑Pi* log(Pi/Qi)
Proprietà della KL-Divergence
Ora che abbiamo calcolato il nostro primo esempio usando la formula della KL-Divergence, prendiamoci un momento per esplorarne alcune tra le proprietà più importanti.
Non negatività: la KL-Divergence non è mai negativa. Ha senso intuitivamente, poiché il valore più basso che può assumere è 0, quando la distribuzione predetta è esattamente uguale a quella reale. E non possiamo mai avere un costo negativo, dato che non possiamo essere “meno sorpresi” del minimo teorico.
Ancorata a zero: la KL-Divergence è zero quando la distribuzione predetta coincide con quella reale.
Unità: bit vs nat: quando calcoliamo la KL-Divergence, usiamo i logaritmi. Ma la base del logaritmo determina l’unità del risultato finale:
Se usiamo il log in base 2, il risultato è misurato in bit
Se usiamo il logaritmo naturale (ln), il risultato è misurato in nat (abbreviazione di “unità naturali di informazione”)
Asimmetria: questa è una proprietà importante: la KL-Divergence non è simmetrica. Usare Q(x) per approssimare P(x) dà un valore diverso rispetto a usare P(x) per approssimare Q(x). Per questo la KL-Divergence non è una vera metrica di distanza: non si comporta come le distanze normali.
Applicazioni della KL-Divergence nel Machine Learning
La KL-Divergence è utile in molte aree del Machine Learning:
Valutazione dei modelli: misurare quanto le tue previsioni si discostano dalle etichette reali
Language Modeling: confrontare le previsioni dei token con la verità a terra
La KL-Divergence è strettamente legata alla Massima Verosimiglianza (MLE), un metodo fondamentale per stimare i parametri dei modelli. Per saperne di più sulla MLE e su come integra i concetti trattati qui, dai un’occhiata al mio tutorial dettagliato, Introduzione alla Maximum Likelihood Estimation (MLE).
Limitazioni della KL-Divergence e soluzioni
Come tutte le cose, anche l’uso della KL-Divergence ha limitazioni. Esploriamole nel dettaglio:
Mancata corrispondenza del supporto fa esplodere la KL: nei casi rari in cui Q(x)=0 e P(x)>0, il termine frazionario log(P/Q) diventa infinito. Per risolvere possiamo aggiungere un’epsilon‑smoothing o passare alla divergenza di Jensen–Shannon.
Caratteristiche categoriali ad alta cardinalità: avere molti valori porta a conteggi sparsi e stime KL rumorose. Per risolvere, possiamo unire le categorie rare o applicare smoothing bayesiano.
L’asimmetria può essere fuorviante: questo perché KL(P || Q) e KL(Q || P) non producono lo stesso valore. Un possibile rimedio è usare la divergenza di Jensen-Shannon
Unità: spesso dimentichiamo di includere le unità della KL-Divergence, e questo è particolarmente problematico perché sono comunemente usati sia i nat sia i bit. Quindi specifica sempre la base del log!
Divergenza di Jensen–Shannon
Avrai notato che ho menzionato la divergenza di Jensen–Shannon prima, quindi vediamola rapidamente.
Anche se è leggermente più complicata e computazionalmente più pesante della KL-Divergence, la divergenza di Jensen–Shannon è simmetrica. Non è comunque una vera metrica di distanza perché non soddisfa la disuguaglianza triangolare. Tuttavia, se facciamo la radice quadrata della JS-Divergence, allora soddisfa la disuguaglianza triangolare e diventa una metrica a tutti gli effetti.
È anche una versione smussata della KL‑divergence che rimane sempre tra 0 e 1 bit (se usiamo il log in base 2). Se guardiamo di nuovo l’equazione, ogni termine di KL è misurato rispetto al punto medio condiviso M; né P né Q divideranno mai per zero e, quindi, niente infiniti.
Conclusione
In breve, la KL‑Divergence è uno strumento importante che usiamo per misurare il costo informativo extra che abbiamo quando lasciamo che la distribuzione del nostro modello Q sostituisca la vera distribuzione P. Va a zero se sono uguali, cresce quando non lo sono, ed è sempre non negativa. La KL-Divergence collega entropia e cross‑entropy, e compare nelle loss function, nell’inferenza variazionale e nei vincoli di policy.
Ora, la KL-Divergence è ottima, ma resta comunque uno strumento che usiamo quando affrontiamo problemi di Machine Learning e Deep Learning. Per applicarla ulteriormente, assicurati di dare un’occhiata al nostro career track Machine Learning Scientist in Python e al nostro career track Machine Learning Engineer, in cui entrambi esplorano supervised, unsupervised e deep learning.
Se sei pronto a collegare la KL-Divergence ad altri concetti matematici, dai un’occhiata a queste risorse:
La KL-Divergence confronta quanto bene la distribuzione Q approssima P. Ma invertirle cambia il significato:
KL(P‖Q): quanto costa usare Q al posto di P.
KL(Q‖P): quanto costa usare P al posto di Q.
Per la natura della formula, questo porta a risultati diversi, motivo per cui non è simmetrica.
Cosa succede se Q(x) è zero e P(x) no?⌄
Otteniamo una divisione per zero all’interno del termine log(P(x)/Q(x)), e la KL-Divergence esplode all’infinito. Per evitarlo, possiamo usare la JS-Divergence.
Quando dovrei usare KL-Divergence vs Cross-Entropy?⌄
Dovremmo usare la KL-Divergence quando vogliamo misurare quanto sono diverse due distribuzioni.
Usiamo la Cross-Entropy quando valutiamo direttamente la loss di un modello di classificazione rispetto alle etichette reali.
Qual è la differenza tra bit e nat nella KL-Divergence?⌄
L’unità della KL-Divergence dipende dalla base del log:
log base 2 → Risultato in bit
natural log→ Risultato in nat
La base non influisce sul concetto, solo sulla scalatura del risultato.
Perché la KL-Divergence è chiamata "Entropia relativa"?⌄
Perché misura la differenza di entropia (sorpresa attesa) tra la vera distribuzione P e la distribuzione approssimante Q.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Impara l'arte dell'apprendimento automatico e diventa un maestro nella predizione, nel riconoscimento dei modelli e negli albori dell'apprendimento profondo e dell'apprendimento per rinforzo.
Scopri il machine learning con Python e prova a diventare uno scienziato del machine learning. Scopri l'apprendimento supervisionato, non supervisionato e profondo.
Nel machine learning è fondamentale misurare quanto accuratamente i nostri modelli prevedono gli esiti del mondo reale. Che tu stia creando un modello per le previsioni meteo o ottimizzando un sistema di raccomandazione, ti serve un modo per quantificare quanto le tue previsioni siano vicine alla realtà. Un approccio potente per farlo è la KL-Divergence.
In questo articolo esplorerò cos’è la KL-Divergence, perché è importante, la sua interpretazione intuitiva, le basi matematiche ed esempi pratici che ne mostrano l’applicazione.
Se stai esplorando i concetti di machine learning, ti consiglio vivamente di dare un’occhiata alla skill track Machine Learning Fundamentals in Python.
Cos’è la KL-Divergence?
La KL-Divergence (Kullback-Leibler Divergence) è una misura statistica usata per determinare come una distribuzione di probabilità diverge da una distribuzione di riferimento.
Supponiamo di costruire insieme un modello per prevedere il meteo di domani. Sotto il cofano, il nostro modello sta facendo scommesse—assegnando probabilità ai possibili esiti. Ma c’è una domanda importante da porsi:
Come misuri quanto queste scommesse si discostano dalla realtà?
Abbiamo bisogno di un modo per quantificare questa differenza, ed è qui che entra in gioco la KL-Divergence. È uno strumento matematico che quantifica la differenza tra ciò in cui il nostro modello crede e ciò che è effettivamente vero.
Come ho detto prima, la KL-Divergence (o più formalmente Divergenza di Kullback-Leibler) è la spina dorsale della data science moderna, del machine learning e dell’IA. Ci dice, in bit o in nat (ne parleremo più avanti), quanta “sorpresa extra” o “perdita di informazione” accumuliamo quando usiamo una distribuzione di probabilità (ad esempio le previsioni del nostro modello, Q) per approssimarne un’altra (la verità del mondo reale, P).
Agisce come un giudice dietro la valutazione dei modelli, la regolarizzazione nelle reti neurali, gli aggiornamenti bayesiani e persino il modo in cui comprimiamo i dati o trasmettiamo messaggi in modo efficiente.
Per capire davvero quanto sia importante la KL-Divergence, pensala così. Ogni volta che il nostro modello fa una previsione, in realtà sta scommettendo sul futuro. La KL-Divergence è il tabellone che calcola quanto costano queste scommesse. Lo stesso principio vale in un’ampia gamma di temi di machine learning, che si tratti di addestrare un chatbot, diagnosticare una malattia o ottimizzare una campagna pubblicitaria.
Matematicamente, la KL-Divergence è definita così:
Sopra c’è la formula per i casi discreti, e quella sotto è per i casi continui.
Intuizione dietro la KL-Divergence
In questa sezione, deriveremo in modo intuitivo la KL-Divergence. Iniziamo con una serie di domande.
Capire la sorpresa
“Se lanciassi una moneta e io indovinassi perfettamente l’esito, ti sorprenderesti?”. Immagino che saresti un po’ sorpreso ma non sconvolto. Ora passiamo al secondo scenario.
“Se tirassi un dado e io indovinassi perfettamente l’esito, saresti più sorpreso rispetto allo scenario precedente?”. Suppongo di sì, dato che è meno probabile che io indovini l’esito corretto.
Ora, un ultimo scenario:
“Se indovinassi correttamente i numeri vincenti della lotteria, ora saresti più sorpreso rispetto allo scenario precedente?”. Suppongo che diresti di sì e saresti completamente scioccato. Ma perché?
Perché, passando da uno scenario all’altro, la probabilità che io riesca a indovinare l’esito corretto diminuisce e quindi la tua sorpresa aumenta rispetto all’esito. Abbiamo quindi notato una relazione:
La probabilità che un evento accada è in relazione inversa con la sorpresa.
Per chiarezza: man mano che la probabilità di un evento si riduce, la sorpresa aumenta, e viceversa.
Tuttavia, possiamo fare un’altra osservazione interessante. Se torniamo ai lanci di dado e immaginiamo lo scenario in cui lanci lo stesso dado 3 volte e io indovino correttamente ogni volta, quanto saresti più sorpreso rispetto al caso in cui ci fosse un solo lancio e io lo indovinassi?
Beh, la tua sorpresa non sarebbe solo leggermente maggiore rispetto a un singolo indovinato; sarebbe drasticamente maggiore, idealmente tre volte maggiore. Perché? Perché ogni nuovo indovinato corretto amplifica la tua incredulità. Non stai semplicemente aggiungendo una quantità fissa di sorpresa—stai moltiplicando quanto l’evento sembri incredibile.
Quindi, quando proviamo a definire matematicamente la Sorpresa, vorremmo che avesse:
A prima vista, dato l’alto numero di requisiti, potremmo pensare che la definizione matematica sia piuttosto complicata. Invece no!
Tutti i requisiti precedenti si risolvono manipolando la funzione logaritmo. La funzione log da sola (spesso log(x) e ln(x) vengono usati in modo intercambiabile) ha la seguente forma:
Abbiamo già soddisfatto parecchi requisiti. Concentrati prima sulla proprietà additiva. Ricordi quando abbiamo detto che se si verificano due eventi indipendenti, la loro sorpresa totale dovrebbe essere la somma delle sorprese individuali? Ebbene, è esattamente ciò che fa il logaritmo!
Ecco come:
La probabilità di ottenere un 6 con un dado equo è ⅙, e definiamo la sorpresa dell’evento così:
Ora, prendi l’evento di ottenere un 6 tre volte di fila: la probabilità combinata sarebbe ⅙ * ⅙ * ⅙ = 1/216.
In termini di sorpresa, sarebbe:
Questa è un’osservazione importante, perché la sorpresa totale è aumentata di un fattore 3 grazie al logaritmo usato. Inoltre, soddisfa anche la Proprietà 3, dato che log(1) = 0, poiché un evento con certezza totale non ha alcun elemento di sorpresa.
In più, anche la Proprietà 4 è soddisfatta perché log(x) è una funzione continua e monotona! Tuttavia, la Proprietà 2 non è soddisfatta, dato che la nostra sorpresa diminuisce quando la probabilità diminuisce (poiché diventa più negativa).
Possiamo risolverlo facilmente applicando un segno negativo! Quindi, la nostra funzione diventa -log(x), che ha la forma seguente.
È anche importante notare che le altre 3 proprietà restano soddisfatte con questa modifica. Pertanto possiamo definire matematicamente la sorpresa come:
Entropia
Nel machine learning, non ci interessa solo la sorpresa di un singolo evento, ma la sorpresa media su tutti i possibili eventi. Questa si chiama sorpresa attesa. Più specificamente, ci interessa trovare la sorpresa attesa della distribuzione.
Questa è una formula famosa, ed è la sorpresa attesa, più comunemente nota come Entropia. Tuttavia, in modo un po’ fuorviante, spesso usiamo P e Q per indicare le nostre distribuzioni, quindi non confonderti con p, che indica la probabilità!
Intuitivamente, stiamo semplicemente moltiplicando la probabilità di ciascun esito per la sua sorpresa, e poi sommando su tutti i possibili esiti.
D’ora in poi, diremo che P(x) è la nostra vera distribuzione sottostante e Q(x) è la distribuzione con cui stiamo tentando di approssimare P(x) (cioè Q(X) è la distribuzione “sbagliata”). Questo è molto comune nel machine learning—i nostri modelli cercano costantemente di stimare il mondo reale.
E ora arriva la grande domanda:
Cosa succede se calcoliamo la nostra sorpresa usando la distribuzione sbagliata?
Possiamo comunque calcolare la sorpresa, ma invece di usare P(x), ora la misuriamo rispetto a Q(x). Questo ci dà una nuova aspettativa:
Questo passaggio spesso crea confusione quando si deriva la KL-Divergence. Stiamo ancora campionando secondo P(x) (perché quella è la vera distribuzione), ma misuriamo la sorpresa usando Q(x) (la convinzione del nostro modello).
Questa quantità è talvolta chiamata cross-entropy tra P(x) e Q(x).
Formula della KL-Divergence
Fino a questo punto, abbiamo definito due quantità:
Per ottenere la formula della KL-Divergence, sottraiamo semplicemente queste due quantità e otteniamo questo:
E sì, la domanda che ti farai è: perché?
Torniamo all’intuizione della sorpresa.
Quindi, quando calcoliamo la KL-Divergence sottraendo queste quantità, stiamo chiedendo quanta sorpresa extra stiamo pagando perché abbiamo usato la distribuzione sbagliata Q(x) invece di quella reale P(x). È la penalità per avere convinzioni sbagliate.
È anche importante notare che se Q(x) è uguale a P(x), allora la KL-Divergence sarà pari a 0. Ha senso—se le previsioni del nostro modello corrispondono perfettamente alla vera distribuzione, non c’è sorpresa extra, e quindi nessuna penalità.
Questo è diverso dalla cross-entropy, che non va a zero nemmeno quando P(x) è uguale a Q(x); semplicemente è uguale all’entropia di P(x).
Possiamo quindi pensare alla KL-Divergence come “ancorata” a zero, nel senso che inizia ad aumentare solo quando la nostra distribuzione predetta inizia a divergere da quella vera.
Esempi di KL-Divergence
Ottimo lavoro a derivare l’equazione! Per fissare il concetto, facciamo un esempio per consolidarlo.
Immagina che dobbiamo prevedere il genere cinematografico preferito di un utente. Dai dati passati, ci è stata fornita la vera distribuzione sui quattro generi (cioè questa è la nostra P(x)).
Genere cinematografico
Probabilità
Azione
0,4
Commedia
0,3
Drammatico
0,2
Horror
0,1
Ora insieme abbiamo costruito un modello che ha previsto questo (cioè questa è la nostra Q(x)).
Genere cinematografico
Probabilità
Azione
0,3
Commedia
0,4
Drammatico
0,2
Horror
0,1
C’è chiaramente qualche differenza tra le due distribuzioni, ma di quanto? Qui useremo la KL-Divergence, con l’equazione seguente:
Nota come il termine diventa 0 quando le due distribuzioni hanno la stessa probabilità per quell’esito.
KL-Divergence in Python
Possiamo anche risolvere il problema sopra con Python:
Questo codice è piuttosto semplice e intuitivo, a parte il fatto che non abbiamo usato il termine KL-Divergence da nessuna parte! Piuttosto, ho usato entropy molte volte.
Questo ci porta a un punto importante: la KL-Divergence è spesso chiamata Entropia relativa. Quindi, in realtà stiamo calcolando la KL-Divergence, dato che il modulo entropy calcola l’entropia relativa tra le due distribuzioni.
Questo può creare confusione, quindi voglio fare una breve pausa e riassumere tutto:
Termine
Notazione
Formula
Entropia o Entropia di Shannon
H(P)
−∑Pi logPi
Cross-Entropy
H(P,Q)
−∑Pi logQi
KL-Divergence o Entropia relativa
D_KL (P∥Q)
−∑Pᵢ · log(Qᵢ/Pᵢ)
oppure
∑Pi* log(Pi/Qi)
Proprietà della KL-Divergence
Ora che abbiamo calcolato il nostro primo esempio usando la formula della KL-Divergence, prendiamoci un momento per esplorarne alcune tra le proprietà più importanti.
Applicazioni della KL-Divergence nel Machine Learning
La KL-Divergence è utile in molte aree del Machine Learning:
La KL-Divergence è strettamente legata alla Massima Verosimiglianza (MLE), un metodo fondamentale per stimare i parametri dei modelli. Per saperne di più sulla MLE e su come integra i concetti trattati qui, dai un’occhiata al mio tutorial dettagliato, Introduzione alla Maximum Likelihood Estimation (MLE).
Limitazioni della KL-Divergence e soluzioni
Come tutte le cose, anche l’uso della KL-Divergence ha limitazioni. Esploriamole nel dettaglio:
Divergenza di Jensen–Shannon
Avrai notato che ho menzionato la divergenza di Jensen–Shannon prima, quindi vediamola rapidamente.
Anche se è leggermente più complicata e computazionalmente più pesante della KL-Divergence, la divergenza di Jensen–Shannon è simmetrica. Non è comunque una vera metrica di distanza perché non soddisfa la disuguaglianza triangolare. Tuttavia, se facciamo la radice quadrata della JS-Divergence, allora soddisfa la disuguaglianza triangolare e diventa una metrica a tutti gli effetti.
È anche una versione smussata della KL‑divergence che rimane sempre tra 0 e 1 bit (se usiamo il log in base 2). Se guardiamo di nuovo l’equazione, ogni termine di KL è misurato rispetto al punto medio condiviso M; né P né Q divideranno mai per zero e, quindi, niente infiniti.
Conclusione
In breve, la KL‑Divergence è uno strumento importante che usiamo per misurare il costo informativo extra che abbiamo quando lasciamo che la distribuzione del nostro modello Q sostituisca la vera distribuzione P. Va a zero se sono uguali, cresce quando non lo sono, ed è sempre non negativa. La KL-Divergence collega entropia e cross‑entropy, e compare nelle loss function, nell’inferenza variazionale e nei vincoli di policy.
Ora, la KL-Divergence è ottima, ma resta comunque uno strumento che usiamo quando affrontiamo problemi di Machine Learning e Deep Learning. Per applicarla ulteriormente, assicurati di dare un’occhiata al nostro career track Machine Learning Scientist in Python e al nostro career track Machine Learning Engineer, in cui entrambi esplorano supervised, unsupervised e deep learning.
Se sei pronto a collegare la KL-Divergence ad altri concetti matematici, dai un’occhiata a queste risorse: