Какова роль softmax в модели и для чего он используется
Что проверяют
Понимаете ли вы, что softmax делает с логитами и почему его ставят в пару с кросс-энтропией. Следом часто спрашивают, чем он отличается от сигмоиды, где ещё встречается и как его считают без переполнения.
Как отвечать
Softmax превращает вектор логитов z в распределение: p_i = exp(z_i) / sum_j exp(z_j). Все выходы положительны и в сумме дают 1, а порядок логитов сохраняется, поэтому argmax до и после softmax совпадает. Для самого предсказания класса его можно не считать.
Ключевые свойства:
- пара с кросс-энтропией: градиент их комбинации по логитам равен разности вектора
pи one-hot вектораy. Он простой и не затухает, в отличие от связки сигмоиды с MSE; - численная устойчивость: результат не меняется от вычитания константы из всех логитов, поэтому перед экспонентой вычитают максимум. Иначе
exp(1000)даёт переполнение; - температура:
softmax(z / T). При T больше 1 распределение мягче, при T меньше 1 острее. Используется при сэмплировании в языковых моделях и в дистилляции знаний; - внимание: в трансформерах softmax превращает оценки
QK^T / sqrt(d_k)в веса по токенам.
Практическая деталь для PyTorch: nn.CrossEntropyLoss принимает сырые логиты и сам применяет log_softmax. В Keras за то же отвечает флаг from_logits=True. Для multi-label задачи softmax не подходит: там у каждого класса своя сигмоида и BCEWithLogitsLoss.
Где спотыкаются
Применяют softmax перед nn.CrossEntropyLoss. Функция потерь применяет его второй раз, градиенты сжимаются, обучение идёт хуже, а ошибку долго не замечают, потому что код не падает.
Называют выход softmax «уверенностью модели». Нейросети часто переуверены, и откалиброванными вероятностями выходы становятся только после калибровки, например temperature scaling на валидационной выборке.
Используют softmax для классов, которые не исключают друг друга. Он заставляет вероятности конкурировать: если на картинке и кошка, и собака, модель вынуждена делить между ними единицу.