Przewidywanie następnego tokenu (Next-Token Prediction)
Fundamentalny mechanizm autoregresyjnych dużych modeli językowych (LLM). Obliczanie logitów, funkcja Softmax, wpływ temperatury i próbkowania (Top-P/Top-K). Wyjaśnienie, dlaczego generowanie tekstu jest sekwencyjnym procesem O(N) oraz jak analizować prawdopodobieństwa przez API.
1. Przegląd koncepcji i istota matematyczna
Gdy obserwujesz, jak sztuczna inteligencja projektuje architekturę mikrousługową lub komponuje poemat, łatwo uwierzyć, że wewnątrz komputera narodziła się świadomość z własnym wewnętrznym monologiem.
Jednak na poziomie obliczeniowym pod maską każdej autoregresyjnej LLM (GPT-4o, Claude 3.7, Llama 3.3, DeepSeek R1) wykonywany jest jeden iteracyjny cykl:
$$P(W) = \prod_{t=1}^{T} P(w_t \mid w_1, w_2, \dots, w_{t-1})$$
- Odczytaj sekwencję wejściowych tokenów $w_1, \dots, w_{t-1}$.
- Przepuść wektory przez warstwy Transformer (Self-Attention + MLP).
- Oblicz wartość liczbową (Logit) dla każdego z 128 000 tokenów w słowniku.
- Zastosuj Softmax oraz algorytmy selekcji (Temperature, Top-P), wybierając pojedynczy token $w_t$.
- Dodaj $w_t$ do kontekstu i powtórz krok.
Model mentalny: to nie wyrocznia, która z góry zna końcową myśl, lecz statystyczny generator trajektorii, który wykonuje krok i dopiero po tym widzi, dokąd może stąpnąć dalej.
┌─────────────────────────────────────────────────────────────┐
│ JEDNOKROKOWY KONWEIER MATEMATYCZNY │
├─────────────────────────────────────────────────────────────┤
│ 1. Kontekst wejściowy: „Kijów — stolica” │
│ Wektoryzacja tokenów ➔ Przejście przez warstwy transformera│
├─────────────────────────────────────────────────────────────┤
│ 2. Warstwa wyjściowa (Unembedding): 128 000 logitów │
│ • Token " Ukrainy" ➔ Logit: +14,2 │
│ • Token " starożytna" ➔ Logit: +8,1 │
│ • Token " Francji" ➔ Logit: -4,5 │
├─────────────────────────────────────────────────────────────┤
│ 3. Normalizacja Softmax(Logits / Temperature): │
│ • " Ukrainy" ➔ 94,2% │
│ • " starożytna" ➔ 5,1% │
│ • " Francji" ➔ 0,0001% │
├─────────────────────────────────────────────────────────────┤
│ 4. Próbkowanie: wybór tokenu " Ukrainy" │
│ Nowy kontekst: „Kijów — stolica Ukrainy” ➔ Następny krok │
└─────────────────────────────────────────────────────────────┘
2. Implementacja samplingu w Pythonie i inspekcja przez CLI
Oto jak wygląda obliczanie prawdopodobieństwa następnego tokenu w języku Python z uwzględnieniem temperatury:
import numpy as np
def compute_next_token_probs(logits: np.ndarray, temperature: float = 0.7) -> np.ndarray:
# 1. Масштабування температурою
scaled = logits / max(temperature, 1e-4)
# 2. Стабільний Softmax (віднімання максимуму для запобігання overflow)
exp_logits = np.exp(scaled - np.max(scaled))
probs = exp_logits / np.sum(exp_logits)
return probs
# Приклад виклику: 4 можливі токени
mock_logits = np.array([12.5, 9.1, 4.0, 1.2])
print("Ймовірності токенів:", np.round(compute_next_token_probs(mock_logits, temperature=0.7), 4))
Jak zobaczyć surowe prawdopodobieństwa tokenów przez cURL w terminalu:
Możesz poprosić API o zwrócenie dokładnych logarytmicznych prawdopodobieństw (logprobs), aby zobaczyć alternatywy rozważane przez model:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Столиця Франції — це"}],
"max_tokens": 1,
"logprobs": true,
"top_logprobs": 3
}'
W odpowiedzi JSON parametr top_logprobs pokaże dokładne wartości matematyczne dla wariantów takich jak Paris, miasto itp.
3. Dlaczego Next-Token prowadzi do halucynacji i jak to leczyć
Ponieważ model generuje tekst lokalnie „tu i teraz”, jest podatny na wpadanie w statystyczne pułapki:
- Błąd przedwczesnego zobowiązania (Early Commitment): Jeśli w pierwszych dwóch słowach model przypadkowo wybrał nieudany token, wszystkie kolejne tokeny będą próbować uzasadnić ten błędny wybór zamiast przyznać się do pomyłki.
- Brak możliwości cofnięcia kroku (No Backtracking): Zwykły inference nie może usunąć już wygenerowanego słowa.
- Dlaczego modele rozumowania (Reasoning Models / DeepSeek R1 / o3) działają lepiej: Wykorzystują one łańcuchy myślowe (
<thought>...</thought>), gdzie przed udzieleniem finalnej odpowiedzi generują setki tokenów wewnętrznej analizy i samokontroli.
4. Praktyczny wniosek dla developera
Pamiętaj o autoregresyjnym potoku:
- Prompty typu "Pomyśl przed odpowiedzią" lub "Rozpisz krok po kroku" działają nie dlatego, że AI staje się bardziej uważne, ale dlatego, że wymuszasz na nim wygenerowanie tokenów rozumowania, które fizycznie stają się kontekstem wejściowym dla finalnego tokenu zawierającego poprawną odpowiedź!
FAQ: Przewidywanie następnego tokenu (Next-Token Prediction)
Powiązane pojęcia
Tokeny w prostych słowach (Ile słów przypada na jeden token)
Podstawowa jednostka miary tekstu w modelach językowych. Wyjaśnienie, jak słowa są dzielone na tokeny, dlaczego wpływa to na koszt zapytań oraz dlaczego słowa ukraińskie zużywają więcej tokenów niż angielskie.
Temperatura generacji (suwak kreatywności i chaosu)
Kluczowy parametr liczbowy generowania tekstu (zazwyczaj od 0.0 do 1.0 lub 2.0). Określa stopień nieprzewidywalności wyboru następnego tokenu: od surowej, deterministycznej matematyki po swobodny lot fantazji.
Architektura Transformer
Architektura sieci neuronowej przedstawiona przez badaczy Google w 2017 roku w artykule „Attention Is All You Need”. Stanowi podstawę wszystkich współczesnych modeli językowych (GPT, Claude, Gemini, Llama), zastępując wolne sieci rekurencyjne i umożliwiając równoległą jednoczesną obróbkę całego tekstu.
Pamięć podręczna KV (Key-Value Cache)
Optymalizacja pamięci w modelach Transformer, która przechowuje wektory kluczy i wartości (Keys and Values) przetworzonych już tokenów w szybkiej pamięci GPU. Umożliwia natychmiastowe generowanie każdego kolejnego słowa, jednak jej rozmiar gwałtownie rośnie wraz z każdym nowym komunikatem w czacie.