ML Atlas

08 · LLM · 4 min czytania · Interaktywne · aktualizacja

Co robi parametr temperature w LLM i czym są top-k oraz top-p?

W skrócie

Temperatura dzieli logity przed softmaksem: niska wyostrza rozkład, wysoka go spłaszcza. Top-k i top-p odcinają mało prawdopodobny ogon przed losowaniem.

Co to jest

Próbkowanie (sampling) to sposób wyboru kolejnego tokenu z rozkładu prawdopodobieństwa, który zwraca model językowy. Temperatura T to liczba, przez którą dzieli się logity przed funkcją softmax: T < 1 wzmacnia różnice i sprawia, że model trzyma się najbardziej prawdopodobnych tokenów, a T > 1 je wygładza i zwiększa różnorodność. Top-k i top-p (próbkowanie jądrowe) dodatkowo ograniczają losowanie do najbardziej prawdopodobnych kandydatów.

Model sam w sobie nie wybiera słów — podaje rozkład. O tym, czy tekst będzie przewidywalny i suchy, czy kreatywny i chaotyczny, decyduje w dużej mierze strategia dekodowania, czyli to, co robimy z tym rozkładem.

Dlatego ten sam model raz brzmi jak ostrożny urzędnik, a raz jak poeta: często różni się tylko kilkoma parametrami próbkowania.

Mechanizm — dlaczego tak działa

Temperatura. Softmax z temperaturą to p_i = e^(z_i / T) / Σ e^(z_j / T). Gdy T maleje do zera, największy logit dominuje coraz bardziej i rozkład zbiega do wyboru jednego tokenu (dekodowanie zachłanne). Gdy T rośnie, różnice między logitami się kurczą i rozkład zbliża się do jednostajnego. Kolejność tokenów nigdy się nie zmienia — zmienia się tylko to, jak bardzo faworyzujemy czołówkę. Nazwa pochodzi z fizyki statystycznej, gdzie identyczny wzór (rozkład Boltzmanna) opisuje stany cząstek w danej temperaturze.

Dlaczego nie zawsze wybierać najlepszy token. Intuicja podpowiada, że najbardziej prawdopodobny token jest „najlepszy”. Holtzman i in. (2020) pokazali jednak, że dekodowanie zachłanne i przeszukiwanie wiązkowe dają tekst powtarzalny i zapętlony, wyraźnie mniej różnorodny niż tekst pisany przez ludzi. Ludzie nie wybierają zawsze najbardziej oczywistego słowa. Z kolei czyste losowanie z pełnego rozkładu czasem trafia w długi ogon tysięcy mało prawdopodobnych tokenów — a jeden absurdalny token potrafi wykoleić resztę tekstu, bo zostaje w kontekście.

Top-k. Fan i in. (2018) zaproponowali losowanie tylko spośród k najbardziej prawdopodobnych tokenów (po ponownym znormalizowaniu). Wada: stałe k nie pasuje do każdej sytuacji. Po „Stolicą Polski jest” sensowny jest praktycznie jeden token, a po „Lubię jeść” — setki.

Top-p (nucleus sampling). Holtzman i in. (2020) proponują brać najmniejszy zbiór tokenów, których łączne prawdopodobieństwo przekracza p (np. 0,9). Gdy model jest pewny, jądro ma jeden–dwa tokeny; gdy niepewny — dziesiątki. Odcięcie dopasowuje się do kształtu rozkładu.

Czego temperatura nie robi. Niska temperatura nie czyni modelu mądrzejszym ani prawdomówniejszym — wybiera to, co model uważa za najbardziej prawdopodobne, a to bywa błędne. Zmniejsza jednak przypadkowe pomyłki wynikające z losowania słabych tokenów, więc do ekstrakcji danych i kodu zwykle się ją obniża.

Na przykładzie

Po „Na obiad zjem” model dał logity: „ zupę” 2,0, „ pierogi” 1,0, „ kanapkę” 0,5, „ kamień” −1,0. Przy T = 1 softmax daje 0,609; 0,224; 0,136; 0,030. Przy T = 0,5 rozkład się wyostrza: 0,842; 0,114; 0,042; 0,002 — „kamień” praktycznie znika. Przy T = 2 się spłaszcza: 0,434; 0,263; 0,205; 0,097 — absurdalny „kamień” wypada już prawie w co dziesiątym losowaniu. Entropia rozkładu rośnie z 0,78 bita (T = 0,5) przez 1,46 do 1,82 bita (T = 2).

Teraz top-p = 0,9 przy T = 1. Skumulowane prawdopodobieństwa to 0,609; 0,834; 0,970. Próg 0,9 przekraczamy dopiero przy trzecim tokenie, więc zostają „zupę”, „pierogi” i „kanapkę”, a po normalizacji mają 0,629; 0,231; 0,140. „Kamień” jest odcięty całkowicie. Top-k = 2 zostawiłoby tylko dwa pierwsze tokeny z prawdopodobieństwami 0,731 i 0,269.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: dla zdania „Kot siedzi na …” suwak temperatury zmienia rozkład prawdopodobieństw następnego słowa: przy T = 1 „parapecie” ma 35%, przy T = 0,1 już 95%.

W praktyce

  • W transformers: model.generate(do_sample=True, temperature=0.7, top_p=0.9, top_k=50); do_sample=False daje dekodowanie zachłanne.
  • Typowe ustawienia: 0–0,3 do ekstrakcji, klasyfikacji i kodu; 0,7–1,0 do swobodnego pisania i burzy mózgów.
  • Zmieniaj zwykle jeden parametr naraz — temperatura i top-p wzajemnie się wzmacniają i trudno potem ocenić efekt.
  • Kara za powtórzenia (repetition_penalty) obniża logity tokenów już użytych; pomaga przy zapętleniach, ale za duża psuje gramatykę.
  • Do ewaluacji i powtarzalnych testów ustaw stałe ziarno losowe lub temperaturę 0 — inaczej różnice między wersjami promptu mogą być szumem losowania.

Najczęstsze pytania

Czy temperatura 0 daje zawsze tę samą odpowiedź?
W teorii tak, bo wybierany jest token o najwyższym logicie. W praktyce obliczenia równoległe na GPU i grupowanie zapytań mogą minimalnie zmienić logity i przy remisach dać inną odpowiedź.
Czy wyższa temperatura zwiększa kreatywność?
Zwiększa różnorodność, co często odbieramy jako kreatywność. Powyżej pewnego poziomu rośnie jednak głównie liczba błędów i niespójności, bo model częściej wybiera tokeny, które sam uznał za słabe.
Co lepsze: top-k czy top-p?
Top-p lepiej dopasowuje się do pewności modelu, dlatego jest częściej używane. W praktyce stosuje się je razem: top-k jako twardy limit bezpieczeństwa, top-p jako główne odcięcie.

Źródła

  • Holtzman A. i in., 2020, „The Curious Case of Neural Text Degeneration”, ICLR 2020.
  • Fan A., Lewis M., Dauphin Y., 2018, „Hierarchical Neural Story Generation”, ACL 2018.
  • Hinton G., Vinyals O., Dean J., 2015, „Distilling the Knowledge in a Neural Network”, arXiv:1503.02531 (softmax z temperaturą).
  • Jurafsky D., Martin J. H., „Speech and Language Processing”, 3rd ed. (wersja robocza online), rozdz. o dużych modelach językowych (próbkowanie).
  • Dokumentacja Hugging Face Transformers, „Generation strategies”, https://huggingface.co/docs/transformers/generation_strategies

Zobacz też