KL Divergence
Dwa modele inaczej rozdzielają szanse między te same odpowiedzi. Jeden stawia 90% na A i 10% na B, drugi daje im po 50%. Chcesz zmierzyć, jak dobrze drugi odtwarza przewidywania pierwszego.
KL Divergence porównuje dwa rozkłady prawdopodobieństwa, czyli zestawy szans tych samych zdarzeń. Trzeba wskazać rozkład odniesienia i ten, który go przybliża. Wkład każdego zdarzenia zależy od jego szansy w rozkładzie odniesienia i stosunku obu szans.
Dla podanych liczb porównanie pierwszego do drugiego wynosi około 0,368, a odwrotne około 0,511, przy logarytmie naturalnym. Kierunek ma znaczenie: nie jest to symetryczna odległość jak liczba kilometrów między miastami.
W Knowledge Distillation można porównywać przewidywania nauczyciela i studenta. Małe KL oznacza ich zgodność, a nie prawdziwość nauczyciela. Przypisanie zera zdarzeniu mającemu dodatnią szansę w rozkładzie odniesienia daje matematycznie nieskończoną karę.
Mechanizm i szczegóły
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ę.