Материалы · Машинное обучение

Шпаргалка формул нейросетей

Функции активации, функции потерь и оптимизаторы в одном месте. У каждой формулы — смысл, производная, пример с числами, код на NumPy, главное, что стоит запомнить, и отдельная страница с подробным разбором и интерактивными 2D- и 3D-рисунками.

Javharbek Abdulatipov
18 формул с подробным разбором7 активаций9 функций потерь2 оптимизатора

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

Нелинейность нейрона: без неё любая глубокая сеть сводится к одному линейному слою.

Sigmoidлогистическая функция

(0; 1)
$$\sigma(x)=\frac{1}{1+e^{-x}}$$
Полный разбор →
Подробнее
Смысл

Сжимает любое число в интервал $(0;\,1)$, поэтому выход читается как вероятность. Кривая S-образная, симметрична относительно точки $(0;\,0{,}5)$; асимптоты — $y=0$ и $y=1$.

Производная
$$\sigma'(x)=\sigma(x)\,\bigl(1-\sigma(x)\bigr)$$
Пример

$\sigma(0)=0{,}5$, $\sigma(2)\approx0{,}881$, $\sigma(-2)\approx0{,}119$. Наклон максимален в нуле: $\sigma'(0)=0{,}25$, а уже $\sigma'(2)\approx0{,}105$.

В коде
def sigmoid(x):
    return 0.5 * (1 + np.tanh(0.5 * x))  # = 1 / (1 + e^-x), no overflow

def sigmoid_grad(x):
    s = sigmoid(x)
    return s * (1 - s)
Запомни: производная выражается через саму функцию, поэтому при обратном распространении экспоненту заново не считают. Минус: на хвостах наклон почти ноль и градиент затухает.

Tanhгиперболический тангенс

(−1; 1)
$$\tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$$
Полный разбор →
Подробнее
Смысл

Та же S-образная форма, но центрирована в нуле, а диапазон — $(-1;\,1)$. Функция нечётная: $\tanh(-x)=-\tanh(x)$.

Производная
$$\tanh'(x)=1-\tanh^{2}(x)$$
Пример

$\tanh(1)\approx0{,}762$, $\tanh'(0)=1$ — в четыре раза круче сигмоиды в нуле, $\tanh'(1)\approx0{,}420$.

В коде
def tanh_grad(x):
    t = np.tanh(x)
    return 1 - t ** 2
Связь: $\tanh(x)=2\sigma(2x)-1$. Выходы центрированы в нуле, поэтому градиенты следующего слоя не смещены в одну сторону — в скрытых слоях tanh обучается лучше сигмоиды.

ReLUrectified linear unit

max(0, x)
$$\operatorname{ReLU}(x)=\max(0,\,x)$$
Полный разбор →
Подробнее
Смысл

Положительное пропускает как есть, отрицательное обнуляет. Считается дёшево, а справа от нуля градиент не затухает.

Производная
$$\operatorname{ReLU}'(x)=\begin{cases}1, & x>0\\ 0, & x<0\end{cases}$$
Пример

$\operatorname{ReLU}(-3)=0$, $\operatorname{ReLU}(2{,}5)=2{,}5$. В точке $x=0$ производной нет; библиотеки по соглашению берут $0$.

В коде
def relu(x):
    return np.maximum(0, x)

def relu_grad(x):
    return (x > 0).astype(float)
Проблема: «умирающий ReLU» (dying ReLU). Если вход нейрона всегда отрицательный, он выдаёт 0, градиент тоже 0 — и нейрон больше не учится.

Leaky ReLU«протекающий» ReLU

α ≈ 0.01
$$\operatorname{LReLU}(x)=\begin{cases}x, & x>0\\ \alpha x, & x\le 0\end{cases}=\max(\alpha x,\,x)\ \ (0<\alpha<1)$$
Полный разбор →
Подробнее
Смысл

Как ReLU, но отрицательная часть не обнуляется, а умножается на маленький $\alpha$ (при $0<\alpha<1$). Лечит «умирающий ReLU».

Производная
$$\operatorname{LReLU}'(x)=\begin{cases}1, & x>0\\ \alpha, & x<0\end{cases}$$
Пример

При $\alpha=0{,}01$: $\operatorname{LReLU}(-3)=-0{,}03$, $\operatorname{LReLU}(2)=2$.

В коде
def leaky_relu(x, alpha=0.01):
    return np.where(x > 0, x, alpha * x)
Отличие от ReLU: слева градиент равен $\alpha$, а не 0. Слабый сигнал течёт всегда, и нейрон не «умирает».

Softmax«мягкий argmax»

Σ = 1
$$\operatorname{softmax}(x)_i=s_i=\frac{e^{x_i}}{\sum_{j} e^{x_j}}$$
Полный разбор →
Подробнее
Смысл

Превращает вектор логитов (logits — сырых выходов сети) в распределение вероятностей: все $s_i\in(0;\,1)$, сумма равна 1. Стоит в конце многоклассового классификатора.

Устойчивость

На практике из всех логитов вычитают максимум: $\dfrac{e^{x_i-\max x}}{\sum_j e^{x_j-\max x}}$. Результат тот же, а переполнения экспоненты нет.

Производная
$$\frac{\partial s_i}{\partial x_j}=\begin{cases}s_i(1-s_i), & i=j\\ -\,s_i s_j, & i\ne j\end{cases}$$
Пример

Логиты $(2;\,1;\,0)$ дают вероятности $\approx(0{,}665;\,0{,}245;\,0{,}090)$.

В коде
def softmax(x):
    e = np.exp(x - x.max())
    return e / e.sum()
Запомни: диагональ $s_i(1-s_i)$ — ровно производная сигмоиды. Для двух классов softmax и есть сигмоида разности логитов.

Потери — регрессия

Предсказываем число. Функция потерь (loss) говорит, насколько прогноз $\hat{y}$ далёк от ответа $y$.

MAEmean absolute error

|·|
$$\mathrm{MAE}=\frac{1}{n}\sum_{i=1}^{n}\bigl|y_i-\hat{y}_i\bigr|$$
Полный разбор →
Подробнее
Смысл

Средний модуль ошибки. Измеряется в тех же единицах, что и целевая переменная, и проще всего интерпретируется. К выбросам устойчивее, чем MSE.

Производная
$$\frac{\partial\,\mathrm{MAE}}{\partial\hat{y}_i}=-\frac{1}{n}\operatorname{sign}\bigl(y_i-\hat{y}_i\bigr)$$
Пример

Сквозной пример: $y=(3;\,5;\,8)$, $\hat{y}=(2{,}5;\,5;\,10)$, ошибки $y-\hat{y}=(0{,}5;\,0;\,-2)$. $\mathrm{MAE}=(0{,}5+0+2)/3\approx0{,}833$.

В коде
mae = np.mean(np.abs(y - y_hat))
Модуль нужен, чтобы ошибки разного знака не гасили друг друга; $|x|=\sqrt{x^2}$. Градиент по модулю всегда одинаков — и для ошибки 0,1, и для ошибки 100.

MSEmean squared error

(·)²
$$\mathrm{MSE}=\frac{1}{n}\sum_{i=1}^{n}\bigl(y_i-\hat{y}_i\bigr)^2$$
Полный разбор →
Подробнее
Смысл

Средний квадрат ошибки. Квадрат сильно штрафует крупные промахи. Единицы — квадрат единиц целевой переменной.

Производная
$$\frac{\partial\,\mathrm{MSE}}{\partial\hat{y}_i}=-\frac{2}{n}\bigl(y_i-\hat{y}_i\bigr)$$
Пример

Сквозной пример: $y=(3;\,5;\,8)$, $\hat{y}=(2{,}5;\,5;\,10)$, ошибки $y-\hat{y}=(0{,}5;\,0;\,-2)$. $\mathrm{MSE}=(0{,}25+0+4)/3\approx1{,}417$: одна ошибка $-2$ даёт 94% суммы.

В коде
mse = np.mean((y - y_hat) ** 2)
Градиент пропорционален ошибке: чем больше промах, тем сильнее модель тянет к нему. Поэтому MSE чувствительнее к выбросам, чем MAE, — один аномальный объект даёт огромный вклад.

RMSEroot mean squared error

√MSE
$$\mathrm{RMSE}=\sqrt{\frac{1}{n}\sum_{i=1}^{n}\bigl(y_i-\hat{y}_i\bigr)^2}$$
Полный разбор →
Подробнее
Смысл

Корень из MSE возвращает ошибку в единицы целевой переменной. Наглядна, как MAE, но по-прежнему сильнее наказывает крупные ошибки.

Пример

Сквозной пример: $y=(3;\,5;\,8)$, $\hat{y}=(2{,}5;\,5;\,10)$, ошибки $y-\hat{y}=(0{,}5;\,0;\,-2)$. $\mathrm{RMSE}=\sqrt{1{,}417}\approx1{,}190$ против $\mathrm{MAE}\approx0{,}833$.

В коде
rmse = np.sqrt(np.mean((y - y_hat) ** 2))
Всегда $\mathrm{RMSE}\ge\mathrm{MAE}$, равенство — только когда все ошибки одинаковы по модулю. Чем больше разрыв, тем неравномернее ошибки по модулю: это индикатор выбросов.

MAPEmean absolute percentage error

%
$$\mathrm{MAPE}=\frac{100\%}{n}\sum_{i=1}^{n}\left|\frac{y_i-\hat{y}_i}{y_i}\right|$$
Полный разбор →
Подробнее
Смысл

Ошибка в процентах от факта: «в среднем модель ошибается на MAPE %». Удобна, когда важна относительная, а не абсолютная ошибка.

Пример

Сквозной пример: $y=(3;\,5;\,8)$, $\hat{y}=(2{,}5;\,5;\,10)$, ошибки $y-\hat{y}=(0{,}5;\,0;\,-2)$. $\mathrm{MAPE}=\frac{100\%}{3}\bigl(\tfrac{0{,}5}{3}+0+\tfrac{2}{8}\bigr)\approx13{,}9\%$.

В коде
mape = 100 * np.mean(np.abs((y - y_hat) / y))
⚠ Не определена при $y_i=0$ и взрывается возле нуля. Асимметрична: заниженный положительный прогноз даёт не больше 100%, а завышенный — сколько угодно. «Симметричный» вариант — sMAPE, но он симметричен лишь в разах, а не в единицах.

Huberгибрид MSE и MAE

порог δ
$$L_\delta(r)=\begin{cases}\tfrac{1}{2}r^2, & |r|\le\delta\\[1mm] \delta\bigl(|r|-\tfrac{1}{2}\delta\bigr), & |r|>\delta\end{cases}\qquad r=y-\hat{y}$$
Полный разбор →
Подробнее
Смысл

Возле нуля квадратична, как MSE (точная подстройка), на больших ошибках линейна, как MAE (не боится выбросов). Обе ветви и их производные сходятся в точке $|r|=\delta$.

Производная
$$\frac{\partial L_\delta}{\partial\hat{y}}=\begin{cases}-r, & |r|\le\delta\\ -\delta\operatorname{sign}(r), & |r|>\delta\end{cases}$$
Пример

Сквозной пример: $y=(3;\,5;\,8)$, $\hat{y}=(2{,}5;\,5;\,10)$, ошибки $y-\hat{y}=(0{,}5;\,0;\,-2)$. При $\delta=1$: потери $0{,}125$, $0$ и $1\cdot(2-0{,}5)=1{,}5$; среднее $\approx0{,}542$.

В коде
def huber(y, y_hat, delta=1.0):
    r = np.abs(y - y_hat)
    return np.mean(np.where(r <= delta, 0.5 * r ** 2,
                            delta * (r - 0.5 * delta)))
На выбросах градиент ограничен по модулю числом $\delta$ и не взрывается. Хорошо подходит, например, для цен недвижимости с аномалиями. $\delta\downarrow$ — ближе к MAE, $\delta\uparrow$ — ближе к MSE.

Потери — классификация

Предсказываем класс. Модель выдаёт вероятности, а потеря наказывает за малую вероятность правильного ответа. Логарифм — натуральный.

BCEбинарная кросс-энтропия

+ sigmoid
$$\mathrm{BCE}=-\frac{1}{n}\sum_{i=1}^{n}\Bigl[y_i\log\hat{y}_i+(1-y_i)\log\bigl(1-\hat{y}_i\bigr)\Bigr]$$
Полный разбор →
Подробнее
Смысл

Для двух классов. Метка $y\in\{0,1\}$ работает как переключатель: из двух слагаемых остаётся одно, $-\log$ вероятности правильного ответа.

Производная по логиту
$$\hat{y}=\sigma(z):\qquad \frac{\partial\,\mathrm{BCE}_i}{\partial z_i}=\hat{y}_i-y_i$$
Пример

Правильный ответ $y=1$. Модель уверена и права, $\hat{y}=0{,}9$: потеря $-\ln0{,}9\approx0{,}105$. Уверена и ошибается, $\hat{y}=0{,}1$: $-\ln0{,}1\approx2{,}303$ — в 22 раза больше.

В коде
p = np.clip(y_hat, 1e-7, 1 - 1e-7)
bce = -np.mean(y * np.log(p)
               + (1 - y) * np.log(1 - p))
Сильнее всего наказывает уверенную ошибку: при $\hat{y}\to0$ для $y=1$ потеря уходит в бесконечность. Связка sigmoid + BCE даёт чистый градиент «предсказание − правда».

Categorical CEкатегориальная кросс-энтропия

+ softmax
$$\mathrm{CE}=-\sum_{k=1}^{K} y_k\log\hat{y}_k$$
Полный разбор →
Подробнее
Смысл

Для $K$ классов; $y$ — one-hot вектор (единица на месте правильного класса). В сумме выживает одно слагаемое — $-\log$ вероятности правильного класса.

Градиент связки softmax + CE
$$\hat{y}=\operatorname{softmax}(x):\qquad \frac{\partial\,\mathrm{CE}}{\partial x_k}=s_k-y_k$$
Пример

Логиты $(2;\,1;\,0)$, правильный класс — первый. $s\approx(0{,}665;\,0{,}245;\,0{,}090)$, $\mathrm{CE}=-\ln0{,}665\approx0{,}408$, градиент $s-y\approx(-0{,}335;\,0{,}245;\,0{,}090)$: правильный логит тянется вверх, остальные — вниз.

В коде
def cross_entropy(logits, k):
    z = logits - logits.max()
    return np.log(np.exp(z).sum()) - z[k]
Главная развязка: вся матрица Якоби softmax вместе с логарифмом схлопывается в $s_k-y_k$. Эта связка стоит в конце большинства классификаторов и языковых моделей (LLM): там классы — токены словаря.

Оптимизатор

Как двигать веса $\theta$ по градиенту $g_t$ потерь, чтобы потери уменьшались.

Adamadaptive moment estimation

momentum + adaptive
$$\theta_t=\theta_{t-1}-\eta\,\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}$$
Полный разбор →
Подробнее
Шаг 1 · первый момент (инерция)
$$m_t=\beta_1 m_{t-1}+(1-\beta_1)\,g_t$$
Шаг 2 · второй момент (масштаб)
$$v_t=\beta_2 v_{t-1}+(1-\beta_2)\,g_t^2$$
Шаг 3 · поправка смещения
$$\hat{m}_t=\frac{m_t}{1-\beta_1^{\,t}}\qquad \hat{v}_t=\frac{v_t}{1-\beta_2^{\,t}}$$
Гиперпараметры по умолчанию

$\eta=0{,}001$ (темп обучения, learning rate), $\beta_1=0{,}9$, $\beta_2=0{,}999$, $\epsilon=10^{-8}$. Все операции — поэлементные: у каждого веса свои $m$ и $v$.

Пример

Первый шаг, $g_1=0{,}5$, $m_0=v_0=0$: $m_1=0{,}05$, $v_1=0{,}00025$. Без поправки шаг был бы в $3{,}16$ раза больше: $0{,}05/\sqrt{0{,}00025}\approx3{,}16$, потому что $v$ занижен сильнее, чем $m$; с поправкой $\hat{m}_1=0{,}5$, $\hat{v}_1=0{,}25$, и $\hat{m}_1/\sqrt{\hat{v}_1}=1$. На первом шаге вес сдвигается ровно на $\eta$ — каким бы ни был масштаб градиента.

В коде
m = b1 * m + (1 - b1) * g
v = b2 * v + (1 - b2) * g ** 2
m_hat = m / (1 - b1 ** t)
v_hat = v / (1 - b2 ** t)
theta -= lr * m_hat / (np.sqrt(v_hat) + eps)
Числитель $\hat{m}_t$ — куда идти: инерция гасит шум градиента. Знаменатель $\sqrt{\hat{v}_t}$ — насколько большим будет шаг у каждого веса. AdamW — тот же Adam с отделённым от градиента затуханием весов (weight decay); им обучают современные LLM.

Следующий уровень

Активации современных трансформеров, предшественники Adam, метрическое обучение и несбалансированные классы — в порядке изучения.

SiLU / Swishактивация Qwen и LLaMA

x·σ(x)
$$\operatorname{SiLU}(x)=x\cdot\sigma(x)$$
Полный разбор →
Подробнее
Пример

$\operatorname{SiLU}(1)\approx0{,}731$, $\operatorname{SiLU}(-1)\approx-0{,}269$: в отличие от ReLU, небольшие отрицательные значения проходят.

Гладкая активация: ведёт себя как ReLU вдали от нуля, но без излома. Внутри блоков SwiGLU стоит в Qwen, LLaMA и других современных LLM.

GELUBERT, GPT

x·Φ(x)
$$\operatorname{GELU}(x)=x\cdot\Phi(x)$$
Полный разбор →
Подробнее
Пример

$\operatorname{GELU}(1)\approx0{,}841$, $\operatorname{GELU}(-1)\approx-0{,}159$.

$\Phi(x)$ — функция распределения стандартного нормального закона: вход умножается на вероятность того, что он «больше шума». Стандартная активация в BERT, GPT-2 и GPT-3.

SGD → Momentum → RMSPropоснова под Adam

инерция
$$\theta_t=\theta_{t-1}-\eta\,g_t$$
Полный разбор →
Подробнее
Momentum
$$u_t=\beta u_{t-1}+g_t,\qquad \theta_t=\theta_{t-1}-\eta\,u_t$$
RMSProp
$$v_t=\beta v_{t-1}+(1-\beta)\,g_t^2,\qquad \theta_t=\theta_{t-1}-\eta\,\frac{g_t}{\sqrt{v_t}+\epsilon}$$
Предшественники Adam: Momentum добавляет инерцию, RMSProp — свой масштаб шага для каждого веса. Если разобрать их по порядку, Adam становится очевидным.

Triplet Lossповторная идентификация (Re-ID)

зазор m
$$L=\max\bigl(0,\;d(a,p)-d(a,n)+m\bigr)$$
Полный разбор →
Подробнее
Пример

Зазор $m=0{,}2$. $d(a,p)=0{,}4$, $d(a,n)=1{,}1$: $L=0$, тройка уже разделена. $d(a,p)=0{,}9$, $d(a,n)=1{,}0$: $L=0{,}1$ — «чужой» слишком близко.

Обучение метрике (metric learning): якорь $a$ должен быть ближе к «своему» $p$, чем к «чужому» $n$, хотя бы на зазор $m$. Ровно та математика, на которой держится повторная идентификация людей между камерами.

Focal Lossнесбалансированные классы

γ ≈ 2
$$\mathrm{FL}=-(1-p_t)^{\gamma}\log p_t$$
Полный разбор →
Подробнее
Пример

$p_t$ — вероятность правильного класса. При $\gamma=2$ лёгкий пример с $p_t=0{,}9$ весит в 100 раз меньше, чем в CE ($0{,}001$ против $0{,}105$), а трудный с $p_t=0{,}3$ — всего в 2 раза ($0{,}590$ против $1{,}204$).

Кросс-энтропия с множителем $(1-p_t)^\gamma$: гасит вклад лёгких примеров и фокусирует обучение на трудных. Применяется в детекции объектов, где фона гораздо больше, чем людей и лиц.

Backprop и регуляризациятемы, а не формулы

механизмы

Как градиент течёт назад через все слои · L1/L2 · Dropout · BatchNorm / LayerNorm

Подробнее
Следующий шаг — не новая формула, а сборка: понять обратное распространение как процесс, в котором все формулы выше работают вместе.

Маршрут: SiLU и GELU (закрыть активации современных трансформеров) → SGD, Momentum, RMSProp (фундамент под Adam) → Triplet Loss (Re-ID) → затем уже не формулы, а механизмы: обратное распространение ошибки и attention внутри трансформера.

← Все материалы