Ga naar hoofdinhoud

KL-divergence uitgelegd: intuïtie, formule en voorbeelden

Ontdek KL-divergence, een van de meest gebruikte én essentiële tools in machine learning.
· 12 min lezen

Verken met AI

In machine learning is het cruciaal om te meten hoe nauwkeurig onze modellen uitkomsten in de echte wereld voorspellen. Of je nu een weerberichtmodel bouwt of een aanbevelingssysteem optimaliseert, je hebt een manier nodig om te kwantificeren hoe dicht je voorspellingen bij de werkelijkheid liggen. Een krachtige aanpak hiervoor is KL-divergence.

In dit artikel verken ik wat KL-divergence is, waarom het belangrijk is, de intuïtieve betekenis, de wiskundige basis en praktische voorbeelden die het gebruik laten zien.

Als je machine‑learningconcepten aan het verkennen bent, raad ik je sterk aan om de Machine Learning Fundamentals in Python skill track te bekijken. 

Wat is KL-divergence?

KL-divergence (Kullback–Leibler-divergence) is een statistische maat om te bepalen hoe een kansverdeling afwijkt van een andere referentieverdeling.

Stel dat we samen een model bouwen om het weer van morgen te voorspellen. Onder de motorkap doet ons model weddenschappen—het kent kansen toe aan mogelijke uitkomsten. Maar hier is een belangrijke vraag:

Hoe meet je hoe ver die weddenschappen van de werkelijkheid afliggen? 

We hebben een manier nodig om dit verschil te kwantificeren, en daar komt KL-divergence om de hoek kijken. Het is een wiskundig hulpmiddel dat het verschil kwantificeert tussen wat ons model gelooft en wat daadwerkelijk waar is.

Zoals ik eerder zei, is KL-divergence (formeel: Kullback–Leibler-divergence) de ruggengraat van moderne data science, machine learning en AI. Het vertelt ons, in bits of nats (daarover later meer), hoeveel "extra verrassing" of "informatieverlies" we oplopen wanneer we één kansverdeling (bijvoorbeeld de voorspellingen van ons model, Q) gebruiken om een andere (de waarheid in de echte wereld, P) te benaderen. 

Het fungeert als scheidsrechter bij modelevaluatie, regularisatie in neurale netwerken, Bayesiaanse updates en zelfs bij hoe we data comprimeren of berichten efficiënt verzenden.

Om echt te benadrukken hoe belangrijk KL-divergence is, kun je het zo zien: elke keer dat ons model een voorspelling doet, gokt het eigenlijk op de toekomst. KL-divergence is het scorebord dat uitrekent hoe kostbaar die weddenschappen zijn. Datzelfde principe geldt in een breed scala aan ML‑onderwerpen, of we nu een chatbot trainen, een ziekte diagnosticeren of een advertentiecampagne optimaliseren.

Wiskundig wordt KL-divergence als volgt gedefinieerd:

KL Divergence Formula

Hierboven staat de formule voor discrete gevallen, en hieronder de formule voor continue gevallen.

KL Divergence Formula discrete cases

Intuïtie achter KL-divergence

In deze sectie leiden we KL-divergence intuïtief af.  Laten we beginnen met een reeks vragen.

Begrip van verrassing

“Als je een munt opgooit en ik raad de uitkomst perfect, zou je dan verrast zijn?” Ik neem aan dat je een beetje verrast zou zijn, maar niet totaal verbijsterd. Laten we nu naar het tweede scenario gaan.

“Als je een dobbelsteen gooit en ik raad de uitkomst perfect, zou je dan meer verrast zijn dan in het vorige scenario?” Ik neem aan van wel, omdat de kans kleiner is dat ik de juiste uitkomst raad.

Nu nog één scenario:

“Als ik de winnende lottogetallen correct zou voorspellen, zou je dan meer verrast zijn dan in het vorige scenario?” Ik neem aan dat je ja zou zeggen en compleet in shock zou zijn. Maar waarom?

Omdat naarmate we door de scenario’s gingen, de kans dat ik de juiste uitkomst kon raden afnam, en jouw verrassing dus toenam bij de uitkomst. We hebben dus een relatie gezien:

De kans dat een gebeurtenis plaatsvindt, is omgekeerd evenredig met de verrassing. 

Concreet: als de kans op een gebeurtenis afneemt, neemt de verrassing toe, en omgekeerd. 

We kunnen hier nog iets interessants observeren. Als we teruggaan naar de dobbelsteenworpen en ons voorstellen dat je dezelfde dobbelsteen 3 keer gooit en ik het elke keer goed raad, hoeveel meer verrast zou je dan zijn dan wanneer er slechts 1 worp was en ik die goed raadde? 

Je verrassing zou niet slechts iets hoger zijn dan bij één correcte gok; het zou dramatisch hoger zijn, idealiter drie keer zo hoog. Waarom? Omdat elke nieuwe juiste gok je ongeloof versterkt. Het is niet simpelweg een vaste hoeveelheid verrassing optellen—het vermenigvuldigt hoe onwaarschijnlijk de situatie voelt.

Daarom willen we, als we verrassing wiskundig definiëren, dat die:

  1. Additieve eigenschap heeft: als twee onafhankelijke gebeurtenissen plaatsvinden, moet hun gecombineerde verrassing de som zijn van hun individuele verrassingen.
    1. Voorbeeld: 1 dobbelsteenworp goed raden → Verrassing = S. 2 worpen goed raden → Verrassing = S + S = 2S.
  2. Omgekeerde relatie met kans. Hoe onwaarschijnlijker een gebeurtenis, hoe verrassender die is.
    1. Voorbeeld: een muntworp (50%) is minder verrassend dan de loterij winnen (0,000001%).
  3. Nul verrassing bij zekere gebeurtenissen. Als iets altijd gebeurt (kans = 1), moet de verrassing nul zijn.
    1. Voorbeeld: "De zon is vandaag opgekomen." → Helemaal niet verrassend.
  4. Continue schaal. Een kleine verandering in kans moet leiden tot een vloeiende, logische verandering in verrassing (geen plotselinge sprongen).

Op het eerste gezicht lijken er veel eisen te zijn, dus zou je denken dat de wiskundige definitie ingewikkeld zal zijn. Dat is echter niet zo!

Al het bovenstaande kunnen we oplossen door de logaritmefunctie te gebruiken. De losse logfunctie (vaak worden log(x) en ln(x) door elkaar gebruikt) heeft de volgende vorm:

Graph showing ln(x) function kl divergence

We voldoen al aan heel wat eisen. Laten we eerst focussen op de additieve eigenschap. We zeiden dat als twee onafhankelijke gebeurtenissen plaatsvinden, hun totale verrassing de som is van hun individuele verrassingen. Precies dat doet de logfunctie!

Zo werkt het:

De kans op een 6 bij een eerlijke dobbelsteen is ⅙ , en we definiëren de verrassing van de gebeurtenis als:

probability with die example

Neem nu de gebeurtenis van drie keer achter elkaar een 6 gooien , de gecombineerde kans is dan: ⅙ * ⅙ * ⅙ = 1/216. 

In termen van verrassing wordt dat:

Dit is een belangrijke observatie, want de totale verrassing is met een factor 3 toegenomen door het gebruik van de logaritme. Bovendien voldoet dit ook aan Eigenschap 3, waarbij log(1) = 0, aangezien een gebeurtenis met volledige zekerheid geen verrassing kent. 

Daarnaast voldoet Eigenschap 4 ook, omdat log(x) een continue monotoon dalende functie is! Eigenschap 2 is echter niet voldaan, omdat onze verrassing afneemt wanneer de kans afneemt (de waarde wordt immers negatiever). 

Dit lossen we eenvoudig op door een negatief teken toe te passen! Onze functie wordt dus -log(x), die de onderstaande vorm heeft. 

Graph showing -ln(x) is positive between x=0 and x=1 (where probabilities lie)

Belangrijk is ook dat de andere drie eigenschappen met deze aanpassing behouden blijven. We kunnen verrassing dus wiskundig definiëren als: 

Entropie

In machine learning zijn we niet alleen geïnteresseerd in de verrassing van één gebeurtenis, maar in de gemiddelde verrassing over alle mogelijke gebeurtenissen. Dat heet de verwachte verrassing. Concreter: we willen de verwachte verrassing van de verdeling vinden.

Dit is een beroemde formule en het is de verwachte verrassing, ofwel entropie. Verwarrend genoeg gebruiken we vaak P en Q om onze verdelingen aan te duiden, dus raak niet in de war met p, dat de kans aanduidt!

Intuïtief doen we het volgende: we vermenigvuldigen de kans op elke uitkomst met de verrassing ervan, en tellen dan op over alle mogelijke uitkomsten.

Vanaf nu stellen we dat P(x) onze ware onderliggende verdeling is en Q(x) de verdeling waarmee we P(x) proberen te benaderen (dus Q(X) is de “verkeerde” verdeling). Dit is heel gebruikelijk in machine learning—onze modellen proberen voortdurend de echte wereld te schatten.

Dus nu komt de hamvraag:

Wat gebeurt er als we onze verrassing berekenen met de verkeerde verdeling?

We kunnen verrassing nog steeds berekenen, maar in plaats van P(x) gebruiken we nu Q(x) als referentie. Dat geeft een nieuwe verwachting:

Dit is vaak een verwarrende stap bij het afleiden van KL-divergence. We sampelen nog steeds volgens P(x) (want dat is de ware verdeling), maar we meten de verrassing met Q(x) (de overtuiging van ons model).

Deze grootheid wordt soms de cross‑entropie tussen P(x) en Q(x) genoemd.

KL-divergence: formule

Tot nu toe hebben we twee grootheden gedefinieerd:

  1. Entropie: de verwachte verrassing als we de ware verdeling P(x) gebruiken
  2. Cross‑entropie: de verwachte verrassing als we de verkeerde verdeling Q(x) gebruiken

Om de KL-divergence te verkrijgen, trekken we deze twee grootheden simpelweg van elkaar af en krijgen we het volgende: 

En ja, de vraag is: waarom? 

Laten we teruggaan naar de intuïtie van verrassing.

  • Entropie geeft de minimale hoeveelheid verrassing als we de ware verdeling P(x) kennen. Zie het als de “ideale kosten”.
  • Cross‑entropie geeft de werkelijke hoeveelheid verrassing die we oplopen wanneer we de benadering Q(x) gebruiken. Zie het als de “werkelijke kosten”.

Dus wanneer we KL-divergence berekenen door deze grootheden af te trekken, vragen we ons af hoeveel extra verrassing we betalen omdat we de verkeerde verdeling Q(x) gebruikten in plaats van de echte P(x). Het is de straf voor verkeerde overtuigingen.

Belangrijk om te onthouden: als Q(x) gelijk is aan P(x), dan is de KL-divergence gelijk aan 0. Dat is logisch—als de voorspellingen van ons model perfect overeenkomen met de ware verdeling, is er geen extra verrassing en dus geen straf.

Dit verschilt van cross‑entropie, die niet naar nul gaat als P(x) gelijk is aan Q(x); die is dan gewoon gelijk aan de entropie van P(x).

We kunnen KL-divergence dus zien als “verankerd” op nul, wat betekent dat het pas toeneemt wanneer onze voorspelde verdeling begint af te wijken van de ware. 

Voorbeelden van KL-divergence

Goed gedaan met het afleiden van de vergelijking! Laten we nu een voorbeeld doen om het concept te verankeren. 

Stel dat we de favoriete filmgenre van een gebruiker moeten voorspellen. Uit historische data hebben we de ware verdeling over vier filmgenres gekregen (dit is onze P(x)). 

Filmgenre

Kans

Actie

0.4

Komedie

0.3

Drama

0.2

Horror

0.1

Samen hebben we een model gebouwd dat het volgende voorspelde (dit is onze Q(x)).

Filmgenre

Kans

Actie

0.3

Komedie

0.4

Drama

0.2

Horror

0.1

Er is duidelijk een verschil tussen de verdelingen, maar hoeveel? Hiervoor gebruiken we KL-divergence, met de onderstaande vergelijking:

Let op dat de term 0 wordt wanneer de twee verdelingen voor die uitkomst dezelfde kans hebben. 

KL-divergence in Python

We kunnen het bovenstaande probleem ook met Python oplossen:

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₂ ⇒ bits

print(f"KL(P‖Q) = {kl_nats} nats")
print(f"KL(P‖Q) = {kl_bits} bits")

Deze code is vrij eenvoudig en intuïtief, behalve dat we de term KL-divergence nergens in de code gebruiken! In plaats daarvan heb ik vaak entropy gebruikt. 

Dat brengt ons bij een belangrijk punt: KL-divergence wordt vaak relatieve entropie genoemd. We berekenen dus wél de KL-divergence, omdat de entropy‑module de relatieve entropie tussen de twee verdelingen uitrekent. 

Dit kan verwarrend zijn, dus ik pauzeer even en vat alles samen:

Term

Notatie

Formule

Entropie of Shannon‑entropie

H(P)

−∑Pi logPi

Cross‑entropie

H(P,Q)

−∑Pi logQi

KL-divergence of relatieve entropie

D_KL (P∥Q)

−∑Pᵢ · log(Qᵢ/Pᵢ) 

of

∑Pi* log(Pi/Qi)

Eigenschappen van KL-divergence

Nu we ons eerste voorbeeld met de KL‑divergence‑formule hebben doorgerekend, bekijken we kort een paar belangrijke eigenschappen.

  1. Niet‑negativiteit: KL-divergence is nooit negatief. Dat is intuïtief logisch: de laagste waarde is 0, wanneer onze voorspelde verdeling exact gelijk is aan de ware verdeling. We kunnen geen negatieve kosten hebben, want we kunnen niet “minder verrast” zijn dan de theoretische minimumverrassing.
  2. Verankerd op nul: KL-divergence is nul wanneer onze voorspelde verdeling overeenkomt met de ware verdeling.
  3. Eenheden: bits vs nats: Bij het berekenen van KL-divergence gebruiken we logaritmen. De grondslag van die logaritme bepaalt de eenheid van het resultaat:
  • Bij log basis 2 wordt het resultaat uitgedrukt in bits
  • Bij de natuurlijke log (ln) in nats (afkorting van “natural units of information”)
  1. Asymmetrie: Belangrijk: KL-divergence is niet symmetrisch. Q(x) gebruiken om P(x) te benaderen geeft een andere waarde dan P(x) gebruiken om Q(x) te benaderen. Daarom is KL-divergence geen echte afstandsmaat—het gedraagt zich niet als normale afstanden.

Animation showing how the the KL-Divergence at different values changes as the distributions increase in amount of overlap.

Toepassingen van KL-divergence in machine learning

KL-divergence is nuttig in veel verschillende ML‑domeinen:

  • Modelevaluatie: meten hoe ver je voorspellingen van de ware labels afwijken
  • Variational Inference: DKL minimaliseren, zoals in Variational Autoencoders.
  • Reinforcement Learning: Trust Region Policy Optimization (TRPO) gebruikt KL‑beperkingen
  • Taalkundig modelleren: tokenvoorspellingen vergelijken met de ground truth

KL-divergence is nauw verwant aan Maximum Likelihood Estimation (MLE), een fundamentele methode om modelparameters te schatten. Wil je meer leren over MLE en hoe het aansluit op de concepten die we hier hebben behandeld, bekijk dan mijn uitgebreide tutorial Introduction to Maximum Likelihood Estimation (MLE).

Beperkingen van KL-divergence en oplossingen 

Zoals met alles zijn er ook beperkingen aan het gebruik van KL-divergence. Laten we die in detail verkennen:

  1. Support‑mismatch laat KL exploderen: In zeldzame gevallen waar Q(x)=0 en P(x)>0, wordt de breukterm log(P/Q) oneindig. Oplossing: voeg ε‑smoothing toe of stap over op Jensen–Shannon‑divergence.
  2. Categorische features met hoge cardinaliteit: Heel veel waarden leiden tot schaarse tellingen en rumoerige KL‑schattingen. Oplossing: voeg zeldzame categorieën samen of pas Bayesiaanse smoothing toe.
  3. Asymmetrie kan misleidend zijn: KL(P || Q) en KL(Q || P) leveren niet dezelfde waarde op. Mogelijke remedie: Jensen–Shannon‑divergence gebruiken
  4. Eenheden: Vaak vergeten we de eenheid van KL-divergence te vermelden, wat problematisch is omdat zowel nats als bits gangbaar zijn. Vermeld dus altijd de logbasis!

Jensen–Shannon‑divergence

Je merkte misschien dat ik Jensen–Shannon‑divergence al noemde, dus laten we die kort doornemen. 

Jensen-Shannon Divergence formula

Hoewel iets ingewikkelder en computationeel zwaarder dan KL-divergence, is Jensen–Shannon symmetrisch. Het is nog steeds geen echte afstandsmaat omdat het niet voldoet aan de driehoeksongelijkheid. Maar als we de JS‑divergence worteltrekken, voldoet die wel aan de driehoeksongelijkheid en wordt het een echte metriek. 

Het is ook een gladde versie van KL‑divergence die altijd tussen 0 en 1 bit blijft (bij logbasis 2). Kijk je opnieuw naar de vergelijking, dan zie je dat elke KL‑term wordt gemeten ten opzichte van het gedeelde middenpunt M; noch P noch Q deelt ooit door nul, en dus geen oneindigheden.

Conclusie

Kortom, KL‑divergence is een belangrijk hulpmiddel om de extra informatiewaarde te meten die we betalen wanneer we de verdeling Q van ons model gebruiken in plaats van de ware verdeling P. De waarde is nul als ze gelijk zijn, groter als dat niet zo is, en altijd niet‑negatief. KL-divergence verbindt entropie en cross‑entropie en duikt op in verliesfuncties, variational inference en policy‑beperkingen. 

KL-divergence is geweldig, maar het blijft een tool die we gebruiken bij ML‑ en deep‑learningproblemen. Wil je dit verder toepassen, bekijk dan onze Machine Learning Scientist in Python career track en onze Machine Learning Engineer career track, waar beide supervised, unsupervised en deep learning behandelen. 

Ben je klaar om KL-divergence te koppelen aan meer wiskundige concepten? Bekijk dan deze resources:

Kullback–Leibler-divergence: veelgestelde vragen

Waarom is KL-divergence niet symmetrisch?

KL-divergence vergelijkt hoe goed verdeling Q P benadert. Maar ze omwisselen verandert de betekenis:

  • KL(P‖Q): Hoe kostbaar het is om Q in plaats van P te gebruiken.
  • KL(Q‖P): Hoe kostbaar het is om P in plaats van Q te gebruiken.

Door de aard van de formule leidt dit tot verschillende resultaten, daarom is het niet symmetrisch.

Wat gebeurt er als Q(x) nul is en P(x) niet?

We krijgen een deling door nul binnen de term log(P(x)/Q(x)), en de KL‑divergence schiet naar oneindig. Om dit te vermijden, kunnen we JS‑divergence gebruiken.

Wanneer gebruik ik KL-divergence versus cross‑entropie?

We gebruiken KL-divergence wanneer we willen meten hoe verschillend twee verdelingen zijn. 

We gebruiken cross‑entropie wanneer we direct het verlies van een classificatiemodel tegen de ground‑truthlabels evalueren.

Wat is het verschil tussen bits en nats bij KL-divergence?

De eenheid van KL-divergence hangt af van de logbasis:

  • log basis 2 → resultaat in bits
  • natuurlijke log → resultaat in nats

De basis beïnvloedt het concept niet, alleen de schaal van het resultaat.

Waarom wordt KL-divergence “relatieve entropie” genoemd?

Omdat het het verschil in entropie (verwachte verrassing) meet tussen de ware verdeling P en de benaderende verdeling Q.

Vaibhav Mehra

Auteur

Vaibhav Mehra

Onderwerpen

Gerelateerd