Урок по треку Глубокое обучение 6 мин

Активации и функции потерь за 6 минут

ReLU, GELU, сигмоида, softmax, кросс-энтропия, MSE и устойчивые вычисления из логитов.

Выбор активации и функции потерь кажется мелочью, но именно здесь живут частые баги: двойной softmax, MSE для классификации, переполнение exp. На собесе спрашивают и теорию, и эти практические ловушки.

Функции активации

АктивацияФормулаГде
Сигмоида1 / (1 + e⁻ˣ)выход бинарной классификации, гейты
tanh(eˣ - e⁻ˣ) / (eˣ + e⁻ˣ)гейты и состояние RNN
ReLUmax(0, x)скрытые слои CNN и MLP
LeakyReLUmax(αx, x)против мёртвых нейронов
GELU, SiLUx·Φ(x), x·σ(x)трансформеры
SwiGLUSiLU(xW)⊙(xV)MLP-блоки современных LLM
  • Сигмоида насыщается, её производная не больше 0.25: в глубоких сетях градиент затухает.
  • ReLU не насыщается справа и дешёвая, но в нуле излом, а при отрицательных входах градиент ноль.
  • GELU и SiLU гладкие и пропускают немного отрицательных значений.

Выход и потеря под задачу

ЗадачаВыходПотеря
РегрессиялинейныйMSE, MAE, Huber
Бинарная классификация1 логитBCEWithLogitsLoss
K классов, один верныйK логитовCrossEntropyLoss
Multi-labelK логитовBCEWithLogitsLoss по каждому

Главная ловушка PyTorch: CrossEntropyLoss принимает логиты, внутри у неё log_softmax и NLL. Если подать вероятности после softmax, softmax применится дважды: модель будет учиться, но хуже.

Устойчивый softmax

import math

def softmax(z):
    m = max(z)
    e = [math.exp(v - m) for v in z]
    s = sum(e)
    return [v / s for v in e]

Сдвиг на константу не меняет результат, но спасает от переполнения exp(1000). Кросс-энтропию считают через log-sum-exp:

CE = logsumexp(z) - z_y

Так она конечна даже при огромных логитах.

Почему не MSE для классификации

С сигмоидой градиент MSE по логиту равен 2(p - y)·σ'(z). При уверенной ошибке сигмоида насыщена, σ' ≈ 0, и модель почти не учится на своих худших ошибках. У кросс-энтропии множитель σ' сокращается, градиент равен p - y.

Huber и выбросы

MSE возводит ошибки в квадрат, и выбросы тянут модель. Huber квадратичен при малых ошибках и линеен при больших. MAE ещё устойчивее, но негладкая в нуле.

Температура

softmax(z / T): при T → 0 распределение стремится к argmax, при большом T к равномерному. Применяется в генерации текста, дистилляции и калибровке. Порядок классов не меняется.

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

  • softmax перед CrossEntropyLoss.
  • Sigmoid + BCELoss вместо BCEWithLogitsLoss.
  • softmax для multi-label задачи.
  • ReLU на выходе регрессии, где цель бывает отрицательной.

Что спросят на собесе

  • Почему ReLU лучше сигмоиды в скрытых слоях, какие активации в трансформерах.
  • Какой выход и потерю взять для регрессии, multi-class и multi-label.
  • Зачем вычитать максимум в softmax.
  • Почему MSE плохо подходит для классификации.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.