KL Divergence
KL Divergence, czyli Kullback–Leibler Divergence, porównuje dwa rozkłady prawdopodobieństwa nad tymi samymi zdarzeniami. Dla rozkładu odniesienia i przybliżającego go rozkładu :
oraz są prawdopodobieństwami tego samego zdarzenia , np. konkretnego tokena. Wzór i związek z Cross-entropy podaje dokumentacja SciPy: entropy. Zachodzi : od Cross-entropy odejmujemy entropię rozkładu odniesienia. Gdy jest stałe, ta różnica nie zmienia minimum względem parametrów modelu wyznaczającego .
Kierunek porównania ma znaczenie
Własny przykład: dla i 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 , lecz , wynik jest nieskończony. Składnik z 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ę.