Back to archive
#ai#llm#glossary#aigen

KL Divergence

KL Divergence, czyli Kullback–Leibler Divergence, porównuje dwa rozkłady prawdopodobieństwa nad tymi samymi zdarzeniami. Dla rozkładu odniesienia qq i przybliżającego go rozkładu pp:

DKL(qp)=iqilnqipiD_{\mathrm{KL}}(q\|p)=\sum_i q_i\ln\frac{q_i}{p_i}

qiq_i oraz pip_i są prawdopodobieństwami tego samego zdarzenia ii, np. konkretnego tokena. Wzór i związek z Cross-entropy podaje dokumentacja SciPy: entropy. Zachodzi DKL(qp)=H(q,p)H(q)D_{\mathrm{KL}}(q\|p)=H(q,p)-H(q): od Cross-entropy odejmujemy entropię rozkładu odniesienia. Gdy qq jest stałe, ta różnica nie zmienia minimum względem parametrów modelu wyznaczającego pp.

Kierunek porównania ma znaczenie

Własny przykład: dla q=[0,9;0,1]q=[0{,}9;0{,}1] i p=[0,5;0,5]p=[0{,}5;0{,}5] otrzymujemy około 0,368. Po zamianie ról rozkładów wynik wynosi około 0,511. Używamy logarytmu naturalnego, więc jednostką są nats. KL Divergence nie jest symetryczną odległością: zawsze trzeba powiedzieć, który rozkład stoi po której stronie.

Jeśli qi>0q_i>0, lecz pi=0p_i=0, wynik jest nieskończony. Składnik z qi=0q_i=0 przyjmuje się jako zero. Takie przypadki brzegowe definiuje SciPy: rel_entr.

W Knowledge Distillation rozkładem odniesienia może być przewidywanie nauczyciela, a przybliżeniem — przewidywanie studenta. Mała wartość mówi o zgodności tych rozkładów na ocenianych danych, nie o prawdziwości odpowiedzi nauczyciela.

Przy implementacji trzeba uważać na kolejność argumentów. PyTorch: KLDivLoss oczekuje jako input logarytmów prawdopodobieństw modelu, a jako target rozkładu odniesienia przy log_target=False. Dla macierzy „przykłady × klasy” redukcja batchmean sumuje składniki po klasach i uśrednia po przykładach; mean uśrednia wszystkie elementy, dając inną skalę.