中文翻译暂不可用,显示俄语原文。

Что такое logits и как они связаны с вероятностями? temperature scaling?

Краткий тезис

Logits — это необработанные выходы последнего линейного слоя языковой модели (LLM) перед функцией softmax. Они могут быть любыми вещественными числами от -∞ до +∞. Вероятности токенов получаются применением softmax к logits, а temperature scaling (масштабирование температуры) — это приём, при котором logits делятся на параметр T перед softmax. При T=1 получается стандартное распределение, при T<1 распределение становится «острее» (модель увереннее), при T>1 — более равномерным (больше разнообразия). При T→0 модель становится детерминированной (greedy decoding).


1. Что такое logits?

Logits — это выходы последнего полносвязного слоя нейронной сети (обычно размерности vocab_size). Они не нормированы и не ограничены по значению.

  • Размерность: batch_size, Вики/vocabulary size|vocab_size — для каждого токена из словаря модели.
  • Диапазон: любое вещественное число (положительное, отрицательное, ноль).
  • Смысл: «сырая» оценка модели, насколько вероятен данный токен в данной позиции. Чем больше logit, тем выше «шанс» токена после softmax.

Пример: для словаря из 5 токенов logits могут быть [2.0, 0.5, -1.0, 3.2, 0.0].


2. Связь logits с вероятностями: softmax

Softmax — функция, преобразующая logits в распределение вероятностей (сумма = 1, каждое значение от 0 до 1).

Формула для токена i:

p_i = exp(z_i) / sum_{j=1}^{V} exp(z_j)

где z_i — logit i-го токена, V — размер словаря.

Свойства:

  • Если logit одного токена сильно больше остальных, его вероятность близка к 1.
  • Если все logits равны, вероятности равномерны (1/V).
  • Экспонента гарантирует положительность, деление — нормировку.

Пример для logits [2.0, 0.5, -1.0, 3.2, 0.0]:

  • exp(2.0) ≈ 7.39, exp(0.5) ≈ 1.65, exp(-1.0) ≈ 0.37, exp(3.2) ≈ 24.53, exp(0.0) = 1.0.
  • Сумма ≈ 34.94.
  • Вероятности: [0.21, 0.05, 0.01, 0.70, 0.03]. Токен с logit 3.2 получает 70% вероятности.

3. Temperature scaling: зачем и как

Temperature scaling — это деление logits на положительный скаляр T (температура) перед softmax:

p_i = exp(z_i / T) / sum_{j} exp(z_j / T)

Параметр T контролирует «остроту» распределения.

TВлияние на распределениеЭффект на генерацию
T → 0Распределение вырождается в точку (argmax)Детерминированный выбор самого вероятного токена (greedy)
0 < T < 1Распределение становится более острым (peaked)Модель «увереннее», меньше случайности
T = 1Стандартный softmaxБаланс
T > 1Распределение становится более равномерным (flat)Больше разнообразия, модель «менее уверена»
T → ∞Распределение стремится к равномерномуПолная случайность

Интуиция: деление на T «растягивает» или «сжимает» logits перед экспонентой. При T<1 разница между logits усиливается, при T>1 — сглаживается.


4. Математическая иллюстрация

Пусть logits = [2, 1, 0.5].

  • T = 1: softmax([2, 1, 0.5]) → вероятности ≈ [0.67, 0.24, 0.09].
  • T = 0.5: softmax([4, 2, 1]) → [0.94, 0.05, 0.01] (очень уверенно).
  • T = 2: softmax([1, 0.5, 0.25]) → [0.42, 0.33, 0.25] (более равномерно).
  • T = 10: softmax([0.2, 0.1, 0.05]) → [0.36, 0.33, 0.31] (почти равномерное).

Видно, как меняется распределение.


5. Практическое применение temperature в LLM

  • Генерация текста: T < 1 даёт более предсказуемые, «безопасные» ответы; T > 1 — креативные, но потенциально бессвязные.
  • Agentic RAG: агенты используют temperature для баланса между исследованием (exploration) и эксплуатацией (exploitation) при выборе действий (например, какой инструмент вызвать). Низкая T — агент чаще выбирает самое вероятное действие; высокая T — пробует разные варианты.
  • Fine-tuning: temperature scaling применяется при дистилляции знаний (knowledge distillation) — «мягкие» метки (soft labels) от учителя получаются с T > 1.
  • Оценка неопределённости: разброс вероятностей при разных T может указывать на уверенность модели.

6. Связь с другими техниками семплирования

Temperature часто комбинируют с top-k и top-p (nucleus) sampling.

  • Top-k: оставить только k токенов с наибольшими вероятностями, пересчитать softmax.
  • Top-p: оставить наименьшее множество токенов, чья суммарная вероятность ≥ p.
  • Temperature применяется до этих фильтров: сначала logits / T, потом softmax, потом top-k/top-p.

Типичный порядок в коде:

logits = model(input_ids)
logits = logits / temperature
probs = softmax(logits, dim=-1)
# затем top-k / top-p фильтрация

7. Реализация в Python (PyTorch)

import torch
import torch.nn.functional as F

def sample_with_temperature(logits, temperature=1.0, top_k=0, top_p=0.0):
    # масштабирование
    scaled_logits = logits / temperature
    # softmax
    probs = F.softmax(scaled_logits, dim=-1)
    # top-k фильтрация
    if top_k > 0:
        top_k_vals, _ = torch.topk(probs, top_k)
        threshold = top_k_vals[:, -1].unsqueeze(-1)
        probs = torch.where(probs < threshold, torch.tensor(0.0), probs)
        probs = probs / probs.sum(dim=-1, keepdim=True)
    # top-p фильтрация
    if top_p > 0.0:
        sorted_probs, sorted_indices = torch.sort(probs, descending=True)
        cumsum = torch.cumsum(sorted_probs, dim=-1)
        mask = cumsum - sorted_probs > top_p
        sorted_probs[mask] = 0.0
        sorted_probs = sorted_probs / sorted_probs.sum(dim=-1, keepdim=True)
        probs = sorted_probs.scatter(-1, sorted_indices, sorted_probs)
    # семплирование
    next_token = torch.multinomial(probs, num_samples=1)
    return next_token

8. Ограничения и нюансы

  • T = 0: формально softmax не определён (деление на ноль). На практике используют argmax (выбор токена с максимальным logit).
  • Численная стабильность: при очень низкой T (например, 0.001) значения z_i / T становятся огромными, экспонента может переполниться. Решение — вычитать максимум logits перед softmax (стандартный трюк).
  • Не единственный способ: существуют альтернативы, например, Gumbel-softmax для дифференцируемого семплирования.
  • Влияние на все токены: temperature масштабирует все logits одинаково, не учитывая контекстную важность отдельных токенов.

9. Роль temperature в Agentic RAG

В архитектурах Agentic RAG (например, ReAct, Toolformer, AutoGPT) LLM выступает как планировщик и принимает решения: какой инструмент вызвать, какой запрос сформулировать.

  • Низкая T (0.1–0.3): агент действует детерминированно, повторяет успешные паттерны. Полезно для стабильных задач.
  • Высокая T (0.8–1.2): агент исследует разные стратегии, может найти неочевидные решения. Риск: нестабильность, зацикливание.
  • Динамическая T: можно менять температуру в зависимости от этапа (например, высокая на этапе исследования, низкая на этапе исполнения).

Пример: в RAG-агенте, который выбирает между поиском по базе знаний и вызовом внешнего API, temperature влияет на то, насколько часто агент будет пробовать менее вероятный, но потенциально более полезный инструмент.


Пет-проект для закрепления

Задача: Написать скрипт, который визуализирует влияние temperature на распределение вероятностей для фиксированного набора logits.

Инструменты: Python, NumPy, Matplotlib.

Шаги:

  1. Задать массив logits (например, [2.0, 1.0, 0.5, -0.5, -1.0]).
  2. Реализовать функцию softmax_with_temperature(logits, T).
  3. Для T = [0.1, 0.5, 1.0, 2.0, 5.0] вычислить вероятности.
  4. Построить столбчатую диаграмму (группированную) для каждого T.
  5. Добавить подписи: для T→0 показать argmax (столбец высотой 1 для max токена).
  6. Вывести таблицу с численными значениями.

Ожидаемый результат: График, наглядно демонстрирующий, как при T<1 распределение становится острым, при T>1 — плоским. Понимание, почему temperature — ключевой гиперпараметр генерации.


Связь с другими вопросами

ВопросТема
660Что такое softmax и зачем он нужен в LLM?
661Как работает top-k и top-p sampling?
663Что такое greedy decoding и beam search?
664Как устроена функция потерь cross-entropy при обучении LLM?
670Как работает дистилляция знаний (knowledge distillation)?
690Как балансировать exploration/exploitation в AI-агентах?

Навигация