EssayAI
Блог
Блог
Естественные науки

Функция активации softmax: формула и расчёт

11 июня 2026Время чтения: 8 минут
#softmax#функция активации#нейронные сети#классификация#кросс-энтропия

Функция активации softmax превращает произвольный вектор чисел (логитов) в распределение вероятностей: каждый выход попадает в диапазон от нуля до единицы, а сумма всех выходов равна единице. Именно поэтому softmax почти всегда стоит на последнем слое нейронной сети, решающей задачу классификации на несколько классов: сеть выдаёт сырые оценки уверенности, а softmax переводит их в понятные вероятности. Ниже разберём, как устроена формула, как softmax связан с экспонентой и нормировкой, зачем вводят температуру, как считать его численно устойчиво и где студенты чаще всего ошибаются. Чтобы сразу почувствовать связь логитов и вероятностей, покрути калькулятор ниже: он показывает экспоненты, их сумму и итоговое распределение по классам, а дальше мы разберём каждый шаг строго.

Что такое функция активации softmax

Softmax - это функция, которая берёт вектор из KK вещественных чисел и возвращает вектор той же длины, но уже из вероятностей. Входные числа называют логитами: это сырые, ничем не ограниченные выходы предыдущего слоя сети. Логит может быть любым - положительным, отрицательным, большим или маленьким. Softmax делает с ними две вещи: сначала прогоняет каждый через экспоненту (это убирает знак и усиливает разрыв между большими и малыми значениями), а потом нормирует, деля на общую сумму. В результате получается набор чисел, который можно честно трактовать как «сеть считает, что объект относится к классу A с вероятностью 66%, к классу B с вероятностью 24%, к классу C с вероятностью 10%».

Три логита проходят через экспоненту и нормировку: сначала растут столбики экспонент, затем они делятся на общую сумму и складываются в распределение, где высота столбиков всегда даёт в сумме единицу

Название говорит само за себя: softmax - это «мягкий максимум». Жёсткий максимум (argmax) выбрал бы один класс и поставил ему вероятность 1, а остальным 0. Softmax делает то же самое мягко: победитель получает наибольшую вероятность, но и у остальных классов она не обнуляется. Это критично для обучения: по нулевым выходам нельзя считать градиент, а по мягкому распределению - можно.

Формула функции softmax

Для вектора логитов z=(z1,z2,,zK)z = (z_1, z_2, \dots, z_K) вероятность ii-го класса задаётся формулой:

pi=ezij=1Kezj.p_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}.

В числителе стоит экспонента от логита нужного класса, в знаменателе - сумма экспонент по всем классам. Знаменатель одинаков для всех выходов, он играет роль нормировочного множителя. Из этой формулы сразу видны два ключевых свойства softmax: каждое pip_i строго больше нуля (экспонента всегда положительна) и сумма всех вероятностей равна единице:

i=1Kpi=iezijezj=1.\sum_{i=1}^{K} p_i = \frac{\sum_i e^{z_i}}{\sum_j e^{z_j}} = 1.

Разберём на числах. Пусть логиты равны z=(2,0; 1,0; 0,1)z = (2{,}0;\ 1{,}0;\ 0{,}1). Считаем экспоненты: e27,389e^{2} \approx 7{,}389, e12,718e^{1} \approx 2{,}718, e0,11,105e^{0{,}1} \approx 1{,}105. Их сумма S11,213S \approx 11{,}213. Теперь делим каждую экспоненту на сумму:

p1=7,38911,2130,659,p2=2,71811,2130,242,p3=1,10511,2130,099.p_1 = \frac{7{,}389}{11{,}213} \approx 0{,}659, \quad p_2 = \frac{2{,}718}{11{,}213} \approx 0{,}242, \quad p_3 = \frac{1{,}105}{11{,}213} \approx 0{,}099.

Сумма 0,659+0,242+0,099=1,0000{,}659 + 0{,}242 + 0{,}099 = 1{,}000, как и должно быть. Класс A с логитом 2,0 получил наибольшую вероятность около 66%. Эти же числа считает калькулятор выше при настройках по умолчанию - можно сверить.

Столбики логитов и соответствующих им вероятностей: экспонента усиливает разрыв, нормировка приводит сумму к единице, наибольший логит даёт наибольшую вероятность
Столбики логитов и соответствующих им вероятностей: экспонента усиливает разрыв, нормировка приводит сумму к единице, наибольший логит даёт наибольшую вероятность

Температура softmax

У softmax есть полезный параметр - температура TT. Логиты перед экспонентой делят на TT:

pi=ezi/Tj=1Kezj/T.p_i = \frac{e^{z_i / T}}{\sum_{j=1}^{K} e^{z_j / T}}.

При T=1T = 1 это обычный softmax. Температура управляет «остротой» распределения. Когда TT маленькая (меньше единицы), разрывы между логитами усиливаются, распределение становится острее и стягивается к одному классу - softmax приближается к жёсткому argmax. Когда TT большая, логиты сжимаются, экспоненты сближаются, и распределение выравнивается, стремясь к равномерному, где у всех классов вероятность 1/K1/K. Температуру используют при генерации текста языковыми моделями (низкая TT даёт предсказуемый текст, высокая - более разнообразный) и при дистилляции знаний, когда «мягкие» метки от большой модели передают маленькой.

При уменьшении температуры столбики распределения вытягиваются к одному классу, при увеличении выравниваются к равномерному; высота столбиков везде даёт в сумме единицу

Численная устойчивость softmax

При прямом вычислении по формуле есть подвох: если логит большой, ezie^{z_i} может переполнить разрядную сетку (например, e1000e^{1000} - это бесконечность для компьютера). Решение простое: из всех логитов вычитают их максимум m=maxjzjm = \max_j z_j перед экспонентой:

pi=ezimj=1Kezjm.p_i = \frac{e^{z_i - m}}{\sum_{j=1}^{K} e^{z_j - m}}.

Результат не меняется: общий множитель eme^{-m} сокращается в числителе и знаменателе. Но теперь наибольший показатель экспоненты равен нулю, а e0=1e^{0} = 1 - переполнения нет. Это стандартный приём, который реализован во всех библиотеках, и его стоит знать: в задачах на «реализуйте softmax» преподаватель почти всегда ждёт именно устойчивый вариант, а не наивную формулу.

Производная softmax и связь с кросс-энтропией

В обучении сети важна производная softmax. Она зависит от того, по какому логиту дифференцируем. Частная производная выхода pip_i по логиту zkz_k задаётся компактной формулой:

pizk=pi(δikpk),\frac{\partial p_i}{\partial z_k} = p_i \left( \delta_{ik} - p_k \right),

где δik\delta_{ik} - символ Кронекера (равен единице при i=ki = k и нулю иначе). Это и есть якобиан softmax. Сам по себе он громоздкий, но softmax почти никогда не используют в одиночку - его ставят в паре с функцией потерь кросс-энтропии. И тут происходит маленькое чудо: при дифференцировании кросс-энтропии по логитам якобиан softmax сокращается, и градиент сводится к простой разности:

Lzi=piyi,\frac{\partial L}{\partial z_i} = p_i - y_i,

где yiy_i - целевая метка (1 для правильного класса, 0 для остальных). То есть градиент равен «предсказанная вероятность минус правда». Именно ради этой красивой формы softmax и кросс-энтропию всегда применяют вместе.

Где применяют softmax

Softmax - рабочая лошадка многоклассовой классификации. Он стоит на последнем слое свёрточных сетей для распознавания изображений, в трансформерах внутри механизма внимания (attention), в языковых моделях для предсказания следующего токена из словаря. Везде, где нужно превратить вектор оценок в распределение вероятностей по взаимоисключающим вариантам, ставят softmax. Важно не путать его с сигмоидой: сигмоида работает с каждым выходом независимо и подходит для бинарной или многометочной классификации (объект может относиться сразу к нескольким классам), а softmax связывает выходы между собой и подходит, когда класс ровно один.

Частые ошибки

  • Забыть про численную устойчивость. Наивное ezie^{z_i} переполняется на больших логитах. Всегда вычитайте максимум: ezime^{z_i - m} даёт тот же результат без переполнения.
  • Путать softmax с сигмоидой. Сигмоида нормирует каждый выход отдельно, softmax - совместно. Для одного класса из многих нужен softmax, для независимых меток - сигмоиды.
  • Считать, что вход softmax уже вероятности. На вход подают логиты (любые числа), а не вероятности. Прогонять softmax дважды или после другой нормировки нельзя.
  • Терять температуру в формуле. Если в задаче фигурирует TT, логиты делятся на TT ДО экспоненты, а не после. Деление результата на TT сломает нормировку.
  • Дифференцировать softmax отдельно от потерь. Якобиан softmax громоздкий, но в паре с кросс-энтропией градиент равен piyip_i - y_i. Считайте их вместе.

FAQ

Чему равна сумма выходов функции softmax? Всегда единице. Это прямое следствие формулы: числитель каждого выхода - экспонента логита, знаменатель - сумма тех же экспонент, поэтому при сложении всех выходов сумма экспонент сокращается и остаётся 1. Поэтому выходы softmax можно трактовать как вероятности.

В чём разница между softmax и argmax? Argmax выбирает один класс с наибольшим логитом и даёт жёсткий ответ (один и ноли), softmax даёт мягкое распределение, где у победителя наибольшая вероятность, но и остальные не нулевые. Argmax недифференцируем, поэтому в обучении используют softmax, а argmax применяют только на финальном предсказании.

Зачем нужна температура в softmax? Температура TT управляет остротой распределения. Маленькая TT делает softmax почти как argmax (один класс доминирует), большая TT выравнивает вероятности. Это используют в генерации текста для управления разнообразием и в дистилляции знаний для передачи мягких меток.

Коротко

Функция активации softmax переводит вектор логитов в распределение вероятностей по формуле pi=ezi/jezjp_i = e^{z_i} / \sum_j e^{z_j}: каждый выход положителен, а их сумма равна единице. На практике логиты сначала уменьшают на максимум для численной устойчивости, а параметр температуры TT регулирует остроту распределения. В паре с кросс-энтропией softmax даёт простой градиент piyip_i - y_i, поэтому именно эта связка стоит на выходе почти любой нейросети-классификатора.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также