Softmax: вероятности для классификации
Урок объясняет softmax — слой, превращающий выходы сети в вероятности классов.
Softmax — это функция, которая берёт вектор произвольных чисел (логитов) и превращает его в набор положительных чисел, сумма которых равна 1.
Зачем он нужен
Для классификации на несколько классов (кот / собака / птица) выходной слой выдаёт по одному числу на класс — это логиты, сырые «очки». Но очки трудно интерпретировать: они могут быть отрицательными, большими, несравнимыми. Softmax приводит их к вероятностям: каждое число в (0, 1), а вся сумма равна 1. Тогда самый большой выход — самый вероятный класс.
Формула словами
Для каждого логита берём экспоненту, затем делим на сумму всех экспонент: p_i = exp(z_i) / сумма(exp(z_j)). Экспонента делает все значения положительными и резко усиливает разрыв между большими и малыми логитами — сеть становится «увереннее» в лидере.
Устойчивая реализация
Прямое exp(большое число) переполняется. Стандартный приём — вычесть из всех логитов их максимум: результат softmax от этого не меняется, но переполнение исчезает.
import math
def softmax(scores):
m = max(scores) # сдвиг для устойчивости
exps = [math.exp(s - m) for s in scores]
total = sum(exps)
return [e / total for e in exps]
logits = [2.0, 1.0, 0.1]
probs = softmax(logits)
print("Логиты:", logits)
print("Вероятности:", [round(p, 3) for p in probs])
print("Сумма:", round(sum(probs), 3))
print("Предсказанный класс:", probs.index(max(probs)))
Вывод:
Логиты: [2.0, 1.0, 0.1] Вероятности: [0.659, 0.242, 0.099] Сумма: 1.0 Предсказанный класс: 0
Логит 2.0 превратился в вероятность 0.659 — больше половины уверенности на класс 0. Сумма ровно 1.0, как и положено распределению.
Свойства, которые стоит запомнить
- Softmax усиливает различия: разрыв 2.0 против 0.1 даёт уверенность 66% против 10%.
- Он чувствителен к «температуре»: если поделить логиты на большое число, распределение станет более ровным; на маленькое — более резким (этот приём используют при генерации текста в LLM).
- Для двух классов softmax сводится к одной sigmoid — это её многоклассовое обобщение.
Softmax + кросс-энтропия
На практике softmax почти всегда идёт в паре с функцией потерь кросс-энтропии (следующий раздел). Эта пара удобна математически: их совместная производная вычисляется на удивление просто — p - y. Это сильно упрощает обучение классификаторов.
Температура: как менять «уверенность»
У softmax есть полезный параметр — температура T: логиты делят на неё перед экспонированием. При T < 1 распределение становится резче (модель «увереннее»: лидер забирает почти всю вероятность), при T > 1 — ровнее (вероятности выравниваются, ответы разнообразнее). Именно температурой регулируют «креативность» при генерации текста в языковых моделях: низкая температура даёт предсказуемый, почти детерминированный текст, высокая — более неожиданный. При T → 0 softmax вырождается в выбор строго самого вероятного класса (argmax).
Обратите внимание и на интерпретацию: вероятности softmax — это уверенность модели, а не истинная вероятность правоты. Хорошо обученная сеть может быть уверенно неправа на необычном входе. Поэтому высокий выход softmax — повод доверять ответу, но не гарантия его корректности.
Итог
- Softmax превращает логиты в вероятности классов, сумма которых равна 1.
- Вычитание максимума делает вычисление устойчивым к переполнению.
- Softmax — обобщение sigmoid на много классов, работает в паре с кросс-энтропией.