Giriş: Ölçüm Bilgisi
La bilgi teorisi1948'de Claude Shannon tarafından kurulan bize gerekli araçları sağlıyor Belirsizliği ölçmek, bir mesajda yer alan bilgi miktarını ölçmek Bir modelin gerçeğe ne kadar iyi yaklaştığını değerlendirin. Makine öğrenmesinde bu kavramlar ortaya çıkıyor her yerde: çapraz entropi ve sınıflandırma için varsayılan kayıp fonksiyonu, the KL farklılığı VAE'nin ve bilgi damıtmanın kalbinde yer alır.
Ne Öğreneceksiniz
- Bilgi içeriği: -log(p) olarak sürpriz
- Entropi: bir dağılımın belirsizliğinin ölçüsü
- Çapraz entropi: sınıflandırma için en çok kullanılan kayıp
- KL sapması: dağılımlar arasındaki asimetrik mesafe
- Karşılıklı bilgi: değişkenler arasındaki bağımlılık
- Şaşkınlık ve dil modelleriyle bağlantıları
Bilgi İçeriği: Sürpriz
L'bilgi içeriği Olasılığı olan bir olayın (veya kişisel bilgisinin) p bu olayın ne kadar "şaşırtıcı" olduğunu ölçer:
Sezgi: çok muhtemel bir olay (P \\yaklaşık 1) çok az bilgi taşır (düşük sürpriz). Nadir bir olay (P \\yaklaşık 0) çok fazla bilgi getirir (yüksek sürpriz). 2. tabandaki birim biraz: bir bit ve adil bir yazı tura atmanın bilgi miktarı.
Entropi: Ortalama Belirsizlik
L'entropi ve bilgi içeriğinin beklenen değeri, yani orta sürpriz bir dağıtım:
Sürekli dağıtım için:
Temel özellikler:
- H(X) \\geq 0 her zaman (belirsizlik asla olumsuz değildir)
- H(X) = 0 sadece eğer X ve deterministik (tek bir olayın olasılığı 1'dir)
- H(X) ve tekdüze dağılım için maksimum (maksimum belirsizlik)
Örnek: adil bir para için (P(T) = P(C) = 0,5), entropi e H = -0,5\\log_2(0,5) - 0,5\\log_2(0,5) = 1 biraz. Hileli bir para için P(T) = 0,99, entropi yaklaşık 0,08 bittir: neredeyse hiç belirsizlik yok, neredeyse her zaman sonucu biliyoruz.
import numpy as np
def entropy(probs):
"""Calcola entropia in bit (log base 2)."""
probs = np.array(probs)
probs = probs[probs > 0] # Evita log(0)
return -np.sum(probs * np.log2(probs))
# Moneta equa
print(f"Moneta equa: H = {entropy([0.5, 0.5]):.4f} bit")
# Moneta truccata
print(f"Moneta truccata (0.99): H = {entropy([0.99, 0.01]):.4f} bit")
# Dado a 6 facce (uniforme)
print(f"Dado equo: H = {entropy([1/6]*6):.4f} bit")
# Dado truccato (3 esce il 50%)
probs_loaded = [0.1, 0.1, 0.5, 0.1, 0.1, 0.1]
print(f"Dado truccato: H = {entropy(probs_loaded):.4f} bit")
Çapraz Entropi: Sınıflandırmanın Kaybı
La çapraz entropi gerçek dağılım arasında p ve model tarafından tahmin edilen dağılım q kaç bitin gerekli olduğunu ölç ortalama olarak gelen verileri kodlamak için p kullanarak için en uygun kod q:
Sınıflandırmada, p ve hedef dağılımı (tek sıcak) e q ve softmax'ın çıktısı. Etiketli tek bir numune için y (tek-sıcak) ve tahmin \\hat{y}:
İkili sınıflandırma için basitleştirir ikili çapraz entropi:
Temel bağlantı: çapraz entropinin en aza indirilmesi şuna eşdeğerdir: günlük olasılığını en üst düzeye çıkarın modelin. Bu neden çapraz entropinin ve sınıflandırma için doğal kayıp: Maksimum değeri atayan modeli arıyoruz gözlemlenen verilere olasılık.
import numpy as np
def cross_entropy(p, q):
"""Cross-entropy H(p, q) usando logaritmo naturale."""
q = np.clip(q, 1e-15, 1 - 1e-15) # Evita log(0)
return -np.sum(p * np.log(q))
def binary_cross_entropy(y_true, y_pred):
"""Binary cross-entropy per un singolo campione."""
y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)
return -(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
# Classificazione a 3 classi
y_true = np.array([0, 0, 1]) # Classe 3
# Predizione buona
y_pred_good = np.array([0.05, 0.05, 0.90])
print(f"Buona predizione: CE = {cross_entropy(y_true, y_pred_good):.4f}")
# Predizione mediocre
y_pred_mid = np.array([0.2, 0.3, 0.5])
print(f"Predizione media: CE = {cross_entropy(y_true, y_pred_mid):.4f}")
# Predizione sbagliata
y_pred_bad = np.array([0.7, 0.2, 0.1])
print(f"Predizione errata: CE = {cross_entropy(y_true, y_pred_bad):.4f}")
# Binary cross-entropy
print(f"\nBCE(y=1, pred=0.9) = {binary_cross_entropy(1, 0.9):.4f}")
print(f"BCE(y=1, pred=0.5) = {binary_cross_entropy(1, 0.5):.4f}")
print(f"BCE(y=1, pred=0.1) = {binary_cross_entropy(1, 0.1):.4f}")
KL Diverjansı: Dağılımlar Arasındaki Mesafe
La KL farklılığı (Kullback-Leibler) dağılımın ne kadar olduğunu ölçer q referans dağılımından farklı p:
Önemli özellikler:
- D_{\\text{KL}}(p \\| q) \\geq 0 her zaman (Gibbs eşitsizliği)
- D_{\\text{KL}}(p \\| q) = 0 ancak ve ancak p = q
- Simetrik değil: D_{\\text{KL}}(p \\| q) \\neq D_{\\text{KL}}(q \\| p)
ilişki H(p, q) = H(p) + D_{\\text{KL}}(p \\| q) bize bunu söylüyor çapraz entropi ve entropi p artı KL sapması. sürece H(p) ve sabit (modele bağlı değildir), en aza indirmek çapraz entropi KL sapmasını en aza indirmeye eşdeğerdir.
VAE'lerde KL Farklılığı
içinde Varyasyonel Otomatik Kodlayıcılar, kayıp bir KL sapma terimini içerir; gizli dağılımı standart Gaussian'a yakın olmaya zorlar:
import numpy as np
def kl_divergence(p, q):
"""KL divergence D_KL(p || q)."""
p = np.array(p, dtype=float)
q = np.array(q, dtype=float)
mask = p > 0
return np.sum(p[mask] * np.log(p[mask] / q[mask]))
# Due distribuzioni su 4 classi
p = np.array([0.25, 0.25, 0.25, 0.25]) # Uniforme
q1 = np.array([0.3, 0.2, 0.3, 0.2]) # Leggermente diversa
q2 = np.array([0.9, 0.03, 0.04, 0.03]) # Molto diversa
print(f"KL(p || q1) = {kl_divergence(p, q1):.6f}")
print(f"KL(p || q2) = {kl_divergence(p, q2):.6f}")
# Asimmetria della KL
print(f"\nKL(p || q1) = {kl_divergence(p, q1):.6f}")
print(f"KL(q1 || p) = {kl_divergence(q1, p):.6f}")
# KL per VAE (Gaussiana vs standard normal)
def kl_gaussian(mu, log_var):
"""KL divergence tra N(mu, sigma^2) e N(0, 1)."""
return -0.5 * np.sum(1 + log_var - mu**2 - np.exp(log_var))
mu = np.array([0.5, -0.3, 0.1])
log_var = np.array([-0.5, 0.2, -0.1])
print(f"\nKL(N(mu,sigma^2) || N(0,1)) = {kl_gaussian(mu, log_var):.4f}")
Karşılıklı Bilgi
La karşılıklı bilgi bir rastgele değişkenin ne kadar bilgiye sahip olduğunu ölçer bir başkasında şunu sağlar:
Se ben(X; Y) = 0değişkenler bağımsızdır. ML'de karşılıklı bilgi ve aşağıdakiler için kullanılır: özellik seçimi (en bilgilendirici özellikleri seçin), kümelenmenin değerlendirilmesi ve bir amaç olarakInfoNCE kaybı karşılaştırmalı öğrenme.
Şaşkınlık: Dil Kalıplarını Değerlendirmek
La şaşkınlık ve dil modellerini değerlendirmek için standart bir ölçüm. Ve olarak tanımlandı jeton başına ortalama çapraz entropinin üstel değeri:
Bir şaşkınlık k ortalama olarak e modelinin olduğu anlamına gelir sanki ikisi arasında tekdüze bir seçim yapmak zorundaymış gibi "kafası karışmış" k seçenekler her adımda. Karışıklık ne kadar düşük olursa model o kadar iyi olur.
Özet ve ML ile Bağlantılar
Hatırlanması Gereken Önemli Noktalar
- Entropi H(X): Tekdüze dağılım için maksimum belirsizliği ölçer
- Çapraz entropi H(p,q): sınıflandırma için standart kayıp
- KL farklılığı: VAE'de kullanılan dağılımlar arasındaki mesafe (asimetrik)
- Çapraz entropiyi en aza indirin = log olasılığını en üst düzeye çıkarın = KL'yi en aza indirin
- Karşılıklı bilgi: özellik seçiminde ve karşılaştırmalı öğrenmede kullanılan bağımlılık ölçüsü
- Şaşkınlık: dil modelleri için standart metrik, ne kadar düşük olursa o kadar iyi ve
Bir sonraki makalede: Keşfedeceğiz PCA ve boyut küçültme. Kovaryans matrisinin, özvektörlerin ve SVD'nin verileri sıkıştırmamıza nasıl izin verdiğini göreceğiz bilgilerin çoğunu saklıyor.







