Lewati ke konten utama

Menjelaskan KL-Divergence: Intuisi, Rumus, dan Contoh

Jelajahi KL-Divergence, salah satu alat paling umum namun esensial yang digunakan dalam machine learning.
· 12 mnt Baca

Jelajahi bersama AI

Dalam machine learning, sangat penting untuk mengukur seberapa akurat model kita memprediksi hasil di dunia nyata. Baik Anda membangun model prakiraan cuaca maupun mengoptimalkan sistem rekomendasi, Anda memerlukan cara untuk mengkuantifikasi seberapa dekat prediksi Anda dengan kenyataan. Salah satu pendekatan ampuh untuk mencapai hal ini adalah KL-Divergence.

Dalam artikel ini, saya akan membahas apa itu KL-Divergence, mengapa penting, interpretasi intuitifnya, dasar matematisnya, dan contoh praktis yang menunjukkan penerapannya.

Jika Anda menjelajahi konsep machine learning, saya sangat merekomendasikan untuk melihat Machine Learning Fundamentals in Python skill track. 

Apa Itu KL-Divergence?

KL-Divergence (Kullback-Leibler Divergence) adalah sebuah ukuran statistik yang digunakan untuk menentukan seberapa jauh suatu distribusi probabilitas menyimpang dari distribusi acuan lainnya.

Misalkan kita membangun model bersama untuk memprediksi cuaca besok. Di balik layar, model kita bertaruh—memberikan probabilitas pada kemungkinan hasil. Namun ada pertanyaan penting yang harus diajukan:

Bagaimana Anda mengukur seberapa jauh tebakan tersebut dari kenyataan? 

Kita memerlukan cara untuk mengkuantifikasi perbedaan ini, dan di sinilah KL-Divergence berperan. Ini adalah alat matematis yang mengukur perbedaan antara apa yang diyakini model kita dan apa yang sebenarnya benar.

Seperti yang telah saya nyatakan sebelumnya, KL-Divergence (atau lebih formal dikenal sebagai Kullback-Leibler Divergence) adalah tulang punggung data science modern, machine learning, dan AI. Ini memberi tahu kita, dalam bit atau nat (lebih lanjut tentang ini nanti), berapa banyak “kejutan ekstra” atau “kehilangan informasi” yang kita tanggung ketika menggunakan satu distribusi probabilitas (misalnya, prediksi model kita, Q) untuk mendekati yang lain (kenyataan dunia nyata, P). 

Ini bertindak sebagai hakim di balik evaluasi model, regularisasi pada jaringan saraf, pembaruan Bayesian, dan bahkan bagaimana kita memampatkan data atau mengirim pesan secara efisien.

Untuk benar-benar menyoroti betapa pentingnya KL-Divergence, pikirkan seperti ini. Setiap kali model kita membuat prediksi, sebenarnya ia sedang bertaruh tentang masa depan. KL-Divergence adalah papan skor yang menghitung seberapa mahal taruhan tersebut. Prinsip yang sama berlaku di berbagai topik machine learning, seperti saat kita melatih chatbot, mendiagnosis penyakit, atau mengoptimalkan kampanye iklan.

Secara matematis, KL-Divergence didefinisikan sebagai berikut:

Rumus KL Divergence

Di atas adalah rumus untuk kasus diskret, dan rumus di bawah ini untuk kasus kontinu.

Rumus KL Divergence kasus diskret

Intuisi di Balik KL-Divergence

Pada bagian ini, kita akan menurunkan KL-Divergence secara intuitif. Mari mulai dengan mengajukan serangkaian pertanyaan.

Memahami kejutan (surprise)

“Jika Anda melempar koin dan saya menebak hasilnya dengan tepat, apakah Anda akan terkejut?” Saya kira Anda akan sedikit terkejut tapi tidak terlalu kaget. Sekarang, mari beralih ke skenario kedua.

“Jika Anda melempar dadu dan saya menebak hasilnya dengan tepat, apakah Anda akan lebih terkejut daripada skenario sebelumnya?” Saya kira Anda akan menjawab ya, karena peluang saya menebak hasil yang benar lebih kecil.

Sekarang, satu skenario terakhir:

“Jika saya dengan benar menebak nomor lotre yang akan menang, apakah sekarang Anda akan lebih terkejut daripada skenario sebelumnya?” Saya kira Anda akan menjawab ya dan benar-benar kaget. Tapi mengapa?

Karena saat kita maju melalui skenario, probabilitas saya menebak hasil yang benar berkurang, dan karenanya tingkat keterkejutan Anda terhadap hasilnya meningkat. Jadi kita baru saja melihat sebuah hubungan:

Probabilitas terjadinya suatu peristiwa berbanding terbalik dengan tingkat kejutan. 

Untuk memperjelas, saat probabilitas suatu peristiwa menurun, kejutan meningkat, dan sebaliknya. 

Namun, kita dapat membuat pengamatan menarik lainnya di sini. Jika kita kembali ke lemparan dadu, dan bayangkan skenario di mana Anda melempar dadu yang sama 3 kali, dan saya menebaknya dengan benar setiap kali, seberapa jauh lebih terkejutkah Anda dibandingkan jika hanya ada 1 lemparan dadu dan saya menebaknya dengan benar. 

Nah, keterkejutan Anda tidak akan hanya sedikit lebih tinggi daripada satu tebakan yang benar; itu akan meningkat drastis, idealnya tiga kali lipat. Mengapa? Karena setiap tebakan benar yang baru memperkuat ketidakpercayaan Anda. Ini bukan sekadar menambah jumlah kejutan yang tetap—ini melipatgandakan betapa tak masuk akalnya situasi tersebut.

Oleh karena itu, saat mencoba mendefinisikan Kejutan secara matematis, kita menginginkannya memiliki:

  1. Sifat aditif: Jika dua peristiwa independen terjadi, kejutan gabungannya harus merupakan jumlah dari kejutan masing-masing.
    1. Contoh: Menebak 1 lemparan dadu dengan benar → Kejutan = S. Menebak 2 lemparan dadu dengan benar → Kejutan = S + S = 2S.
  2. Hubungan terbalik dengan probabilitas. Semakin kecil kemungkinan suatu peristiwa, semakin mengejutkan itu.
    1. Contoh: Lemparan koin (50%) kurang mengejutkan daripada menang lotre (0,000001%).
  3. Kejutan nol untuk peristiwa pasti. Jika sesuatu selalu terjadi (probabilitas = 1), maka kejutan harus nol.
    1. Contoh: "Matahari terbit hari ini." → Tidak mengejutkan sama sekali.
  4. Skala kontinu. Perubahan kecil dalam probabilitas harus menghasilkan perubahan kejutan yang mulus dan logis (tidak ada lompatan tiba-tiba).

Sekilas, karena ada banyak persyaratan, kita mungkin berpikir definisi matematisnya akan cukup rumit. Namun, tidak demikian!

Semua persyaratan di atas dapat diatasi dengan memanipulasi fungsi logaritma. Fungsi log yang berdiri sendiri (sering kali, log(x) dan ln(x) digunakan secara bergantian) memiliki bentuk sebagai berikut:

Grafik yang menunjukkan fungsi ln(x) kl divergence

Kita sudah memenuhi cukup banyak persyaratan. Mari fokus pada Sifat Aditif terlebih dahulu. Ingat bagaimana kita mengatakan bahwa jika dua peristiwa independen terjadi, total kejutannya harus merupakan jumlah dari kejutan masing-masing? Nah, inilah yang dilakukan fungsi log!

Begini caranya:

Probabilitas keluar angka 6 pada dadu adil adalah ⅙ , dan mari kita definisikan kejutan dari peristiwa tersebut sebagai berikut:

probabilitas dengan contoh dadu

Sekarang, ambil peristiwa keluar angka 6 tiga kali berturut-turut, probabilitas gabungannya adalah: ⅙ * ⅙ * ⅙ = 1/216. 

Dalam hal kejutan, nilainya akan menjadi:

Ini adalah pengamatan yang cukup penting, karena total kejutan meningkat sebesar faktor 3, akibat penggunaan logaritma. Selain itu, ini juga memenuhi Sifat 3, di mana log(1) = 0, karena peristiwa dengan kepastian penuh tidak memiliki unsur kejutan. 

Selain itu, Sifat 4 juga terpenuhi karena log(x) adalah fungsi monoton kontinu! Namun, Sifat 2 belum terpenuhi, karena kejutan kita menurun saat probabilitas menurun (karena menjadi lebih negatif). 

Kita dapat mengatasinya cukup mudah, dengan menambahkan tanda negatif! Jadi, fungsi kita sekarang adalah -log(x), yang memiliki bentuk seperti di bawah ini. 

Grafik menunjukkan -ln(x) bernilai positif antara x=0 dan x=1 (tempat probabilitas berada)

Penting juga untuk dicatat bahwa ketiga sifat lainnya tetap terpenuhi dengan perubahan ini. Oleh karena itu, kita dapat mendefinisikan kejutan secara matematis sebagai: 

Entropi

Dalam machine learning, kita tidak hanya tertarik pada kejutan dari satu peristiwa, tetapi rata-rata kejutan di seluruh kemungkinan peristiwa. Ini disebut kejutan ekspektasi. Lebih spesifiknya, kita tertarik untuk mencari kejutan ekspektasi dari suatu distribusi.

Ini adalah rumus yang terkenal, dan merupakan kejutan ekspektasi, atau lebih umum dikenal sebagai Entropi. Namun agak membingungkan, kita sering menggunakan P dan Q untuk menyatakan distribusi kita, jadi jangan bingung dengan p, yang menyatakan probabilitas!

Secara intuitif, yang kita lakukan hanyalah mengalikan probabilitas setiap hasil dengan kejutannya, lalu menjumlahkan di seluruh kemungkinan hasil.

Mulai dari titik ini, kita akan menyatakan bahwa P(x) adalah distribusi dasar sejati kita dan Q(x)adalah distribusi yang kita coba gunakan untuk mendekati P(x) (yakni Q(X) adalah distribusi “salah”). Ini sangat umum dalam machine learning—model kita terus-menerus mencoba memperkirakan dunia nyata.

Sekarang tibalah pertanyaan besarnya:

Apa yang terjadi jika kita menghitung kejutan menggunakan distribusi yang salah?

Kita masih bisa menghitung kejutan, tetapi alih-alih menggunakan P(x), kini kita mengukurnya terhadap Q(x). Ini memberi kita ekspektasi baru:

Langkah ini sering membingungkan saat menurunkan KL-Divergence. Kita masih melakukan sampling menurut P(x) (karena itulah distribusi yang sebenarnya), tetapi kita mengukur kejutan menggunakan Q(x) (keyakinan model kita).

Kuantitas ini kadang disebut cross-entropy antara P(x) dan Q(x).

Rumus KL-Divergence

Sampai titik ini, kita telah mendefinisikan dua kuantitas:

  1. Entropi: kejutan ekspektasi jika kita menggunakan distribusi sejati P(x)
  2. Cross-entropy: kejutan ekspektasi jika kita menggunakan distribusi yang salah yaitu Q(x)

Untuk memperoleh rumus KL-Divergence, kita cukup mengurangkan kedua kuantitas ini dan mendapatkan hal berikut: 

Dan ya, pertanyaan yang mungkin Anda miliki adalah kenapa? 

Mari kembali pada intuisi tentang kejutan.

  • Entropi memberi tahu kita jumlah kejutan minimum yang mungkin jika kita mengetahui distribusi sejati P(x). Anggaplah sebagai “biaya ideal.”
  • Cross-entropy memberi tahu kita jumlah kejutan aktual yang kita tanggung ketika menggunakan pendekatan Q(x). Anggaplah sebagai “biaya nyata.”

Jadi ketika kita menghitung KL-Divergence dengan mengurangkan kuantitas ini, kita menanyakan berapa banyak kejutan ekstra yang kita bayar karena kita menggunakan distribusi yang salah Q(x) alih-alih yang sebenarnya P(x). Ini adalah penalti atas keyakinan yang keliru.

Hal penting lainnya untuk dicatat adalah jika Q(x) sama dengan P(x), maka KL-Divergence akan bernilai 0. Ini masuk akal—jika prediksi model kita benar-benar cocok dengan distribusi sejati, maka tidak ada kejutan ekstra, dan karenanya tidak ada penalti.

Ini berbeda dari cross-entropy, yang tidak menjadi nol meskipun P(x) sama dengan Q(x); nilainya hanya sama dengan entropi dari P(x).

Jadi kita dapat menganggap KL-Divergence “berjangkar” pada nol, artinya nilainya baru mulai meningkat ketika distribusi prediksi kita mulai menyimpang dari yang sebenarnya. 

Contoh KL-Divergence

Kerja bagus menurunkan persamaannya! Untuk memantapkan konsep kita, mari lakukan sebuah contoh untuk memantapkannya. 

Bayangkan kita ditugaskan memprediksi genre film favorit seorang pengguna. Dari data masa lalu, kita diberi distribusi sejati atas empat genre film (yakni ini adalah P(x) kita). 

Genre Film

Probabilitas

Laga

0.4

Komedi

0.3

Drama

0.2

Horor

0.1

Sekarang bersama-sama, kita telah membangun model yang memprediksi ini (yakni ini adalah Q(x) kita).

Genre Film

Probabilitas

Laga

0.3

Komedi

0.4

Drama

0.2

Horor

0.1

Jelas ada perbedaan dalam distribusi kita, tetapi seberapa besar? Di sinilah kita akan menggunakan KL-Divergence, menggunakan persamaan berikut:

Perhatikan bagaimana suku tersebut menjadi 0 ketika kedua distribusi memiliki probabilitas yang sama untuk hasil itu. 

KL-Divergence dalam Python

Kita juga dapat menyelesaikan masalah di atas menggunakan 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₂ ⇒ bits

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

Kode ini cukup sederhana dan intuitif, terlepas dari fakta bahwa kita tidak menggunakan istilah KL-Divergence di kode sama sekali! Sebaliknya, saya sering menggunakan istilah entropy. 

Ini membawa kita pada poin penting — KL-Divergence sering disebut Entropi Relatif. Jadi, sebenarnya kita menghitung KL-Divergence karena modul entropy menghitung entropi relatif antara dua distribusi. 

Ini tampak membingungkan, jadi saya ingin berhenti sejenak dan merangkum setiapthing:

Istilah

Notasi

Rumus

Entropi atau Shannon-Entropy

H(P)

−∑Pi logPi

Cross-Entropy

H(P,Q)

−∑Pi logQi

KL-Divergence atau Entropi Relatif

D_KL (P∥Q)

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

atau

∑Pi* log(Pi/Qi)

Properti KL-Divergence

Sekarang setelah kita menghitung contoh pertama menggunakan rumus KL-Divergence, mari luangkan waktu untuk mengeksplorasi beberapa propertinya yang paling penting.

  1. Non-negatif: KL-Divergence tidak pernah negatif. Ini masuk akal secara intuitif, karena nilai terendah yang dapat diambil adalah 0, yaitu ketika distribusi prediksi kita persis sama dengan distribusi sejati. Dan kita tidak pernah bisa memiliki biaya negatif karena kita tidak bisa “lebih tidak terkejut” daripada kejutan minimum teoritis.
  2. Berjangkar pada nol: KL-Divergence bernilai nol ketika distribusi prediksi kita cocok dengan distribusi sejati.
  3. Satuan: Bit vs nat: Saat kita menghitung KL-Divergence, kita menggunakan logaritma. Namun basis logaritma tersebut menentukan satuan hasil akhirnya:
  • Jika kita menggunakan log basis 2, hasilnya diukur dalam bit
  • Jika kita menggunakan log natural (ln), hasilnya diukur dalam nat (singkatan dari “natural units of information”)
  1. Asimetri: Ini adalah properti penting — KL-Divergence tidak simetris. Menggunakan Q(x) untuk mendekati P(x) memberikan nilai yang berbeda dibandingkan menggunakan P(x) untuk mendekati Q(x). Inilah alasan mengapa KL-Divergence bukan metrik jarak sejati — ia tidak berperilaku seperti jarak pada umumnya.

Animasi yang menunjukkan bagaimana nilai KL-Divergence berubah saat distribusi semakin tumpang tindih.

Aplikasi KL-Divergence dalam Machine Learning

KL-Divergence berguna di banyak bidang dalam Machine Learning:

  • Evaluasi model: mengukur seberapa jauh prediksi Anda dari label yang benar
  • Variational Inference: meminimalkan DKL, seperti pada Variational Autoencoders.
  • Reinforcement Learning: Trust Region Policy Optimization (TRPO) menggunakan kendala KL
  • Pemodelan Bahasa: membandingkan prediksi token dengan ground truth

KL-Divergence sangat terkait dengan Maximum Likelihood Estimation (MLE), yang merupakan metode dasar untuk mengestimasi parameter model. Untuk mempelajari lebih lanjut tentang MLE dan bagaimana ia melengkapi konsep yang kita bahas di sini, lihat tutorial mendetail saya, Introduction to Maximum Likelihood Estimation (MLE).

Keterbatasan KL-Divergence dan Solusinya 

Seperti hal lainnya, ada juga keterbatasan dalam menggunakan KL-Divergence. Mari kita jelajahi secara detail:

  1. Ketidakcocokan dukungan membuat KL meledak: Dalam kasus langka di mana Q(x)=0 dan P(x)>0, suku pecahan log(P/Q) menjadi tak hingga. Untuk mengatasinya kita dapat menambahkan pelicinan ε atau beralih ke divergensi Jensen–Shannon.
  2. Fitur kategorikal dengan kardinalitas tinggi: Memiliki banyak nilai akan menghasilkan hitungan jarang dan estimasi KL yang bising. Untuk memperbaikinya, kita dapat menggabungkan kategori langka atau menerapkan pelicinan Bayesian.
  3. Asimetri bisa menyesatkan: Ini karena KL(P || Q) dan KL(Q || P) tidak menghasilkan nilai yang sama. Solusi potensial adalah menggunakan Jensen-Shannon Divergence
  4. Satuan: Sering kali, kita lupa menyertakan satuan KL-Divergence, dan ini menjadi sangat bermasalah karena baik nat maupun bit lazim digunakan. Jadi selalu nyatakan basis log!

Jensen-Shannon divergence

Anda mungkin menyadari saya menyebut Jensen-Shannon Divergence sebelumnya, jadi mari kita bahas secara singkat. 

Rumus Jensen-Shannon Divergence

Meskipun sedikit lebih rumit dan lebih berat secara komputasi daripada KL-Divergence, Jensen-Shannon Divergence bersifat simetris. Ini masih bukan metrik jarak sejati karena tidak memenuhi ketaksamaan segitiga. Namun, jika kita mengakarkan JS-Divergence, maka ia memenuhi ketaksamaan segitiga dan menjadi metrik yang semestinya. 

Ini juga merupakan versi yang dihaluskan (smoothed) dari KL‑divergence yang selalu berada antara 0 dan 1 bit (jika kita menggunakan log basis 2). Jika kita melihat kembali persamaannya, setiap suku KL diukur terhadap titik tengah bersama M, bukan P maupun Q yang akan pernah membagi dengan nol, sehingga tidak ada nilai tak hingga.

Kesimpulan

Singkatnya, KL‑Divergence adalah alat penting yang kita gunakan untuk mengukur biaya informasi ekstra yang kita tanggung ketika kita membiarkan distribusi model kita Q menggantikan distribusi sejati P. Nilainya menjadi nol jika keduanya sama, dan semakin besar ketika tidak sama, serta selalu non‑negatif. KL-Divergence menghubungkan entropi dan cross‑entropy, dan muncul dalam fungsi loss, variational inference, dan kendala kebijakan.

KL-Divergence memang hebat, namun tetap merupakan alat yang kita gunakan saat menangani masalah terkait Machine Learning dan Deep Learning. Untuk dapat menerapkannya lebih jauh pastikan untuk melihat Machine Learning Scientist in Python career track dan Machine Learning Engineer career track kami, yang keduanya mengeksplorasi supervised, unsupervised, dan deep learning. 

Jika Anda juga siap mulai mengaitkan KL-Divergence dengan konsep Matematis lebih lanjut, maka lihat sumber daya berikut:

Kullback–Leibler Divergence FAQs

Mengapa KL-Divergence tidak simetris?

KL-Divergence membandingkan seberapa baik distribusi Q mendekati P. Namun menukarnya akan mengubah maknanya:

  • KL(P‖Q): Seberapa mahal menggunakan Q alih-alih P.
  • KL(Q‖P): Seberapa mahal menggunakan P alih-alih Q.

Karena sifat rumusnya, ini menghasilkan hasil yang berbeda, itulah mengapa nilainya tidak simetris.

Apa yang terjadi jika Q(x) nol dan P(x) tidak?

Kita mendapat pembagian dengan nol di dalam suku log(P(x)/Q(x)), dan KL-Divergence menjadi tak hingga. Untuk menghindarinya, kita dapat menggunakan JS-Divergence.

Kapan saya harus menggunakan KL-Divergence vs Cross-Entropy?

Kita sebaiknya menggunakan KL-Divergence ketika ingin mengukur seberapa berbeda dua distribusi. 

Kita menggunakan Cross-Entropy ketika secara langsung mengevaluasi loss model klasifikasi terhadap label ground truth.

Apa perbedaan antara bit dan nat dalam KL-Divergence?

Satuan KL-Divergence bergantung pada basis log:

  • log basis 2 → Hasil dalam bit
  • log natural → Hasil dalam nat

Basisnya tidak memengaruhi konsepnya, hanya skala hasilnya.

Mengapa KL-Divergence disebut "Entropi Relatif"?

Karena ia mengukur perbedaan entropi (kejutan ekspektasi) antara distribusi sejati P dan distribusi pendekat Q.

Vaibhav Mehra

Penulis

Vaibhav Mehra

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026