Стратегии отбора проб: температура, top-k, top-p и поиск по лучу.
После того как модель вычислила распределение вероятностей по словарю, что-то должно выбрать следующий токен. Этот выбор определяет, будет ли результат творческим или консервативным, разнообразным или повторяющимся. В этом уроке рассматриваются пять наиболее распространенных стратегий — и когда использовать каждую из них.
Стратегия 1 — Жадное декодирование
ℹ️
Жадное декодирование всегда выбирает токен с наибольшей вероятностью: `next = argmax P(t | context)`. Он детерминирован: одно и то же приглашение всегда выдает один и тот же результат. Проблема: жадный алгоритм склонен к повторяющимся циклам и «безопасным», но скучным завершениям. Выбирая на каждом этапе лучший локально токен, он может пропустить глобально лучшие последовательности.
Стратегия 2 — Температура
ℹ️
Температура T делит все логиты до softmax: `probs = softmax(logits / T)`. При T < 1 распределение становится более четким — модель становится более уверенной в топовых токенах. При T > 1 оно выравнивается — токены с меньшей вероятностью получают большую долю. При T → 0 поведение приближается к жадному. Типичные значения: 0,6–0,8 для точных задач (код, факты), 1,0–1,2 для творческого письма.
Попробуйте: переместите ползунки и наблюдайте за изменением распределения.
Столбики ниже показывают вероятности появления токенов после применения всех трех фильтров по порядку: сначала температура, затем top-k, затем top-p. Затененные токены исключаются из выборки.
Стратегия 3. Выборка Top-k
ℹ️
Выборка Top-k сохраняет только k токенов с наибольшей вероятностью, остальные обнуляет и выполняет повторную нормализацию. Это обрезает хвост распределения, не позволяя модели когда-либо выбирать очень невероятный (и обычно бессвязный) токен. Типичные значения: k = 20–100. Ограничение: k фиксировано и не адаптируется к тому, насколько уверенно модель находится в каждой позиции.
Стратегия 4 — Выборка Top-p (ядра)
ℹ️
Выборка Top-p (ядро) выбирает наименьший набор токенов, кумулятивная вероятность которых ≥ p (обычно 0,9–0,95), обнуляет остальные и перенормирует. В отличие от top-k, размер ядра является адаптивным: когда модель достоверна (один токен при p = 0,95), ядро имеет 1 токен; в случае неопределенности его может быть 50. Это делает top-p устойчивым на разных уровнях достоверности.
Стратегия 5 — Поиск луча
ℹ️
Поиск луча сохраняет k лучших частичных последовательностей (ширину луча) на каждом этапе. Каждый расширяется до всех возможных следующих токенов; k последовательностей с наивысшей оценкой выживают. Победителем становится последовательность с наибольшей общей логарифмической вероятностью. Поиск по лучу является детерминированным и популярен в машинном переводе (ширина 4–8). Это дает плохие результаты для открытой генерации — результаты однообразны, повторяются и им не хватает разнообразия.
Параллельное сравнение
💡
Практический рецепт для моделей чата: температура = 0,7–0,8 в сочетании с топ-p = 0,9–0,95. OpenAI рекомендует не использовать температуру и top-p одновременно (измените одно, оставьте другое по умолчанию), но на практике часто работает умеренное сочетание. Для генерации кода: температура = 0,2, top-p = 0,95 или просто жадно.