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.
W praktyce
- W
transformers:model.generate(do_sample=True, temperature=0.7, top_p=0.9, top_k=50);do_sample=Falsedaje 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