Температура — это числовой параметр, который задаёт степень случайности при выборе следующего токена языковой моделью. Формально он масштабирует логиты (сырые оценки модели для каждого токена словаря) перед преобразованием в вероятностное распределение через softmax.
Как это работает
Языковая модель на каждом шаге генерации вычисляет логиты — числовые оценки для всех токенов словаря. Чем выше логит, тем вероятнее, что модель выберет этот токен. Функция softmax превращает логиты в вероятности:
p(xi = w) = exp(hw / T) / Σ exp(hw’ / T)
где hw — логит токена w, T — температура. При T = 1 распределение остаётся исходным. При T < 1 распределение «заостряется»: вероятности высокооценённых токенов растут, а низкооценённых — падают. Модель чаще выбирает очевидные варианты. При T > 1 распределение «разглаживается»: различия между вероятностями сглаживаются, и у маловероятных токенов появляется шанс быть выбранными. При T → 0 softmax превращается в argmax: модель всегда выбирает токен с максимальным логитом.
Температура применяется после фильтрации кандидатов через top-p и top-k — то есть сначала модель отсекает заведомо неподходящие токены, а затем температурное масштабирование перераспределяет вероятности среди оставшихся[reference:2].
Зачем это нужно
Температура — основной инструмент управления балансом между предсказуемостью и креативностью генерации. Для задач, где требуется точность и повторяемость (извлечение данных, классификация, ответы на фактические вопросы), используют низкие значения — 0.0–0.3. Для творческих задач (написание текстов, генерация идей, брейншторминг) — 0.7–1.2. Значение 1.0 обычно является настройкой по умолчанию[reference:3].
Примеры
- Классификация тональности отзыва. При температуре 0.0 модель каждый раз выдаёт один и тот же ответ на один и тот же отзыв — критично для стабильности бизнес-логики.
- Генерация слоганов. При температуре 1.0 и запросе «придумай 5 слоганов для кофейни» модель выдаст более разнообразные варианты, чем при 0.3, где все слоганы будут похожи по структуре.
- Чат-бот поддержки. При температуре 0.2–0.4 ответы остаются связными и по делу, но не становятся механически одинаковыми, что снижает ощущение «роботизированности».
- Написание кода. При температуре 0.1–0.2 модель реже допускает синтаксические ошибки и «галлюцинации» в названиях функций, так как выбирает наиболее вероятные токены.
Формула или метрика
Температурное масштабирование softmax: pT(xi = w) = exp(hw / T) / Σw’ exp(hw’ / T). При T = 1 формула совпадает со стандартным softmax. При T < 1 распределение становится островершинным. При T > 1 — плоским[reference:4].
Типичные ошибки
- Установка слишком высокой температуры для фактологических задач. При T > 1.5 модель начинает генерировать бессвязный текст и выдумывать факты — распределение становится настолько плоским, что выбор токена почти не зависит от контекста.
- Использование T = 0 для творческих задач. Модель будет выдавать шаблонные, повторяющиеся ответы, что сводит на нет ценность генеративного подхода.
- Игнорирование взаимодействия с top-p и top-k. Температура применяется после отсечения кандидатов, поэтому при узком top-k эффект высокой температуры ограничен: «креативность» будет только среди нескольких наиболее вероятных токенов[reference:5].
- Ожидание полной воспроизводимости при T > 0. Даже при фиксированном seed температура выше нуля вносит случайность, и ответы могут различаться между запусками[reference:6].
Как улучшить
- Начинайте с значений по умолчанию (T = 1.0 или T = 0.7) и корректируйте в зависимости от задачи. Для большинства диалоговых сценариев 0.7 даёт хороший баланс между связностью и вариативностью[reference:7].
- Для задач с извлечением данных используйте T = 0. Это обеспечит детерминированный результат и упростит тестирование.
- Комбинируйте температуру с top-p. Если нужно ограничить «фантазию» модели, но сохранить вариативность, установите T = 0.8–1.0 и top-p = 0.9–0.95.
- Тестируйте несколько значений на небольшой выборке промтов. Оптимальная температура зависит от модели, длины ответа и домена — универсального значения не существует.
- Фиксируйте seed при отладке. Это позволит изолировать эффект температуры от других источников вариативности.