# Сэмплирование: temperature, top-k, top-p

> Сэмплирование в LLM: temperature, top-k и top-p — как из распределения выбрать токен. От этого зависит стиль текста; частый вопрос на собеседовании.

Раздел: [LLM: обучение и инференс](https://ml-book.com/s/llm/) · Страница темы: https://ml-book.com/t/sampling/ · Обновлено: 2026-09-16 · Источник: ml-book.com, учебник делается сообществом

## Интуиция

После каждого шага генерации трансформер возвращает вектор логитов (logits) — по одному числу на каждый токен словаря. Softmax превращает их в вероятности: «коврик» — 30%, «подоконник» — 18%, «стол» — 12% и так далее. Дальше решаем мы: можно всегда брать самый вероятный токен, а можно «кидать кубик» по этому распределению.

Самый простой вариант — жадная генерация (greedy decoding): всегда берём argmax. Звучит разумно, но на практике текст быстро вырождается: модель зацикливается и повторяет одни и те же фразы («я думаю, что я думаю, что я думаю…»). Дело в том, что самый вероятный токен на каждом шаге — не то же самое, что самая осмысленная последовательность в целом, а повторение уже сказанного часто локально «безопасно» для модели.

## Как это работает: температура

Температура (temperature) — это деление логитов на число T *до* softmax:

`p_i = exp(z_i / T) / Σ_j exp(z_j / T)`

При T → 0 разрывы между логитами раздуваются, и почти вся масса уходит одному токену — получаем жадную генерацию. При T = 1 распределение остаётся «как обучено». При T → ∞ различия стираются и распределение стремится к равномерному — модель начинает нести случайный набор токенов. Важно: температура не добавляет модели «креативности» в буквальном смысле — она лишь перераспределяет массу между вариантами, которые модель и так считала возможными.

> **💡 Ключевая мысль**
>
> Модель предсказывает распределение, а декодер решает, как из него выбирать. Temperature управляет остротой распределения, top-k и top-p — тем, какой хвост маловероятных токенов мы вообще допускаем к розыгрышу.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/sampling/

## Top-k, top-p и min-p: обрезаем хвост

Даже при разумной температуре в словаре остаются тысячи токенов с крошечной, но ненулевой вероятностью. Изредка кубик падает на один из них — и предложение уезжает в бессмыслицу. Поэтому хвост распределения обрезают:

- **Top-k** — оставить k самых вероятных токенов (например, 50), остальные занулить и перенормировать. Просто, но негибко: когда модель уверена, k = 50 — слишком много, когда не уверена — слишком мало.
- **Top-p / nucleus sampling** — оставить минимальный набор токенов, чья суммарная вероятность ≥ p (например, 0.9). Размер «ядра» адаптивный: у уверенной модели в нём 1–2 токена, у неуверенной — десятки. Именно поэтому top-p почти вытеснил top-k.
- **Min-p** — оставить токены с вероятностью не меньше доли от максимальной (например, 10% от p_{max}). Ещё один адаптивный вариант, популярный в open-source-инференсе.

Частотные штрафы (frequency / presence penalty) бьют по другой проблеме — повторам: логиты уже использованных токенов понижаются, и модели становится «дороже» ходить по кругу.

## Beam search и практика

Лучевой поиск (beam search) держит несколько лучших префиксов и ищет последовательность с максимальной суммарной вероятностью. Для машинного перевода и распознавания речи это работает, но для открытой генерации — плохо: максимально вероятный текст оказывается предсказуемым, обрубленным и полным повторов, потому что человеческая речь на самом деле не «максимально вероятна».

Практические ориентиры: для кода, извлечения фактов и структурированных ответов температуру опускают к 0–0.3 — важна точность, а не разнообразие. Для брейншторма и художественного текста поднимают к 0.8–1.2 и включают top-p ≈ 0.9–0.95.

> **⚠️ Подводный камень**
>
> «T = 0 гарантирует одинаковые ответы» — не совсем. Жадная генерация детерминирована лишь в идеальном мире: недетерминизм плавающей точки на GPU, разный батчинг на сервере и обновления модели дают чуть разные логиты, а один изменившийся токен меняет всё продолжение. Seed и фиксированное окружение помогают воспроизводимости, но у большинства API-провайдеров строгих гарантий нет.

> **🎤 На собеседовании**
>
> - «Что делает температура математически?» — делит логиты до softmax: T < 1 обостряет распределение, T > 1 сглаживает, в пределах — argmax и равномерное.
> - «Чем top-p лучше top-k?» — размер отсечки адаптируется к уверенности модели, а не фиксирован заранее.
> - «Почему greedy вырождается?» — локально вероятный токен ≠ глобально хороший текст; типичный симптом — циклы повторов, лечится сэмплированием и штрафами.
> - «Какие параметры поставишь для генерации SQL?» — низкая температура (≈0–0.2), можно top-p пониже; разнообразие тут вредно.

## Связанные темы

- [Инференс: KV-cache, квантизация, спекулятивный декодинг](https://ml-book.com/t/inference/)
- [Fine-tuning: SFT, LoRA, PEFT](https://ml-book.com/t/finetuning/)
- [Претрейнинг и scaling laws](https://ml-book.com/t/pretraining/)
- [Alignment: RLHF и DPO](https://ml-book.com/t/alignment/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/sampling/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
