Merhaba arkadaşlar! Bugün machine learning ve information theory’nin en temel konseptlerinden birini konuşacağız: Kullback-Leibler (KL) Divergence. VAE’ler, GANlar, language model’ler… Hepsinin arkasında bu konsept var. Gelin birlikte derinlere dalalım!
KL Divergence Nedir?
KL Divergence, iki probability distribution arasındaki “farkı” ölçen bir metrik. Ama dikkat - tam olarak bir mesafe değil! Daha çok “bir dağılımı diğeriyle temsil etmeye çalışırsak ne kadar bilgi kaybederiz?” sorusuna cevap veriyor.
Şöyle düşünün: Gerçek veri dağılımınız var (P) ve siz bunu daha basit bir dağılımla (Q) modellemeye çalışıyorsunuz. KL Divergence size bu yaklaşımın ne kadar “kötü” olduğunu söylüyor.
Neden “Divergence” ve Neden “Mesafe” Değil?
KL Divergence simetrik değil! Yani KL(P||Q) ≠ KL(Q||P). Bu yüzden matematiksel anlamda bir “mesafe” değil, bir “divergence”.
Gerçek hayattan örnek: İstanbul’un hava durumu dağılımını (P) Antalya’nın dağılımıyla (Q) modellemeye çalışmak vs. Antalya’yı İstanbul ile modellemeye çalışmak. İkisi farklı zorluktadır!
Information Theory Perspektifi
KL Divergence aslında “relative entropy” olarak da bilinir. Information theory’de entropy, bir dağılımdaki belirsizliği ölçer. KL Divergence ise iki dağılım arasındaki “ekstra belirsizliği” ölçer.
Başka bir bakış açısı: Eğer gerçek dağılım P iken, Q dağılımına göre tasarlanmış bir kodlama sistemi kullanırsanız, ortalamada kaç ekstra bit’e ihtiyacınız olur? İşte KL Divergence size bunu söylüyor!
Machine Learning’de KL Divergence
Variational Autoencoders (VAE): Latent space distribution’ını standard normal distribution’a yaklaştırmak için KL loss kullanır.
Language Models: Predicted word distribution ile actual word distribution arasındaki farkı ölçmek için.
Knowledge Distillation: Teacher model’in output distribution’ını student model’e transfer etmek için.
Reinforcement Learning: Policy gradient method’larda old policy ile new policy arasındaki farkı kontrol etmek için.
Basit Örnekler
import numpy as np
def kl_divergence(p, q):
"""
Calculate KL divergence KL(P||Q)
p, q: probability distributions (must sum to 1)
"""
# Avoid log(0) by adding small epsilon
epsilon = 1e-10
p = np.clip(p, epsilon, 1)
q = np.clip(q, epsilon, 1)
# KL divergence formula: sum(p * log(p/q))
return np.sum(p * np.log(p / q))
# Example: Two discrete distributions
p = np.array([0.1, 0.4, 0.5]) # True distribution
q = np.array([0.33, 0.33, 0.34]) # Uniform approximation
divergence = kl_divergence(p, q)
print(f"KL(P||Q) = {divergence:.4f}")
# Note: KL is not symmetric!
reverse_divergence = kl_divergence(q, p)
print(f"KL(Q||P) = {reverse_divergence:.4f}")
KL Divergence’ın Özellikleri
Non-negative: KL(P||Q) ≥ 0 her zaman. Sadece P = Q olduğunda 0.
Asymmetric: KL(P||Q) ≠ KL(Q||P) genel durumda.
Not a metric: Triangle inequality sağlamıyor.
Unbounded: Sonsuza gidebilir. Q’da 0 olasılık varken P’de varsa, KL sonsuzdur!
Sonuç
KL Divergence, modern machine learning’in temel taşlarından biri. VAE’lerden policy gradient’lara, knowledge distillation’dan anomaly detection’a kadar her yerde karşımıza çıkıyor.
En önemli nokta: KL Divergence bir mesafe değil, bir “bilgi kaybı” ölçüsü. Bu perspektifi kavradığınızda, neden asimetrik olduğu, nerede kullanılacağı çok daha mantıklı geliyor.