Шпаргалка формул нейросетей · Функции активации

Сигмоида: логистическая функция

Функция, которая превращает любое число в вероятность. Разбираем её по косточкам: из чего собрана формула, откуда берётся производная σ(1 − σ), как сигмоида строит решающую границу логистической регрессии и почему из-за неё затухают градиенты в глубоких сетях.

Javharbek Abdulatipov · 30 мин чтения
$$\sigma(x)=\frac{1}{1+e^{-x}}$$

Зачем она нужна

Нейросеть, логистическая регрессия, градиентный бустинг — внутри у всех получается просто число: $3{,}7$, $-12$, $0{,}2$. Но вопрос часто звучит иначе: с какой вероятностью письмо — спам, клиент вернёт кредит, на кадре человек. Вероятность обязана лежать между 0 и 1. Сигмоида — самый естественный мост от «любого числа» к «вероятности».

Где она встречается:

  • выход бинарного классификатора — логистическая регрессия, последний нейрон сети, $p=\sigma(z)$;
  • вентили (gates) в LSTM и GRU — число от 0 до 1 решает, какую долю информации пропустить, а какую забыть;
  • градиентный бустинг для классификации — XGBoost, LightGBM и CatBoost складывают деревья в «сырой» счёт, а сигмоида превращает его в вероятность;
  • современные активации — SiLU (Swish) — это $x\cdot\sigma(x)$; на ней построен блок SwiGLU в LLaMA и Qwen;
  • статистика — функция распределения логистического закона и связь вероятности с логарифмом шансов (logit).
Главное за минуту

$\sigma$ сжимает всю числовую прямую в интервал $(0;\,1)$, проходит через $(0;\,0{,}5)$, симметрична: $\sigma(-x)=1-\sigma(x)$. Её производная $\sigma'=\sigma(1-\sigma)$ не больше $0{,}25$ — отсюда и удобство (дешёвый backprop), и беда (затухание градиента).

Интуиция: сжать бесконечность

Представьте дорогу между полом $y=0$ и потолком $y=1$. Слева дорога почти лежит на полу, справа почти касается потолка, а посередине плавно поднимается. Сколько бы вы ни шли влево или вправо, пол и потолок останутся недостижимы — это асимптоты.

Потяните точку на графике. Оранжевая прямая — касательная: её наклон и есть производная $\sigma'(x)$. В центре подъём самый крутой, а на краях дорога почти горизонтальна — производная там близка к нулю.

Рисунок 1. Сигмоида, её касательная и производная. Тяните синюю точку или нажимайте стрелки, когда она в фокусе. Максимум производной $0{,}25$ — ровно под центром $x=0$.
Что заметить

При $x=4$ сигмоида уже $0{,}982$, а производная — всего $0{,}018$, в 14 раз меньше, чем в центре. Это насыщение (saturation): дальше вход растёт, а выход почти не меняется.

Формула по косточкам

Соберём сигмоиду из трёх простых действий и проследим, что каждое делает с числом $x$.

$$x\;\xrightarrow{\;\cdot(-1)\;}\;-x\;\xrightarrow{\;\exp\;}\;e^{-x}\in(0;\,\infty)\;\xrightarrow{\;+1\;}\;1+e^{-x}\in(1;\,\infty)\;\xrightarrow{\;1/\cdot\;}\;\sigma(x)\in(0;\,1)$$
$e^{-x}$
экспонента всегда положительна: при $x\to+\infty$ она стремится к 0, при $x\to-\infty$ — к бесконечности;
$1+e^{-x}$
знаменатель всегда больше 1 — поэтому дробь всегда меньше 1;
$\frac{1}{1+e^{-x}}$
обратная величина положительного числа больше 1 лежит строго между 0 и 1.

Ту же функцию полезно узнавать в других записях:

$$\sigma(x)=\frac{1}{1+e^{-x}}=\frac{e^{x}}{1+e^{x}}=\frac{1}{2}\Bigl(1+\tanh\frac{x}{2}\Bigr)$$

Вторая форма получается умножением числителя и знаменателя на $e^x$; она удобна для отрицательных $x$ (см. раздел про код). Третья связывает сигмоиду с гиперболическим тангенсом: $\tanh x=2\sigma(2x)-1$ — та же S-кривая, сжатая вдвое по горизонтали, растянутая вдвое по высоте и сдвинутая вниз на 1.

$x$$\sigma(x)$$\sigma'(x)$
−60,00250,0025
−40,01800,0177
−20,11920,1050
−10,26890,1966
00,50000,2500
10,73110,1966
20,88080,1050
40,98200,0177
60,99750,0025

Таблица показывает две симметрии: значения сигмоиды при $\pm x$ дополняют друг друга до единицы, а производная — чётная функция.

Свойства и форма

  • Область определения — все действительные числа; область значений — открытый интервал $(0;\,1)$.
  • Монотонность: строго возрастает, потому что $\sigma'(x)>0$ при любом $x$.
  • Асимптоты: $\lim_{x\to-\infty}\sigma(x)=0$ и $\lim_{x\to+\infty}\sigma(x)=1$.
  • Центральная симметрия относительно точки $(0;\,0{,}5)$: $\sigma(-x)=1-\sigma(x)$.
  • Точка перегиба — единственная, $x=0$: слева функция выпукла вниз, справа — вверх.
  • Липшицевость: $|\sigma(a)-\sigma(b)|\le\tfrac14|a-b|$ — выход меняется не быстрее, чем на четверть изменения входа.
Почему σ(−x) = 1 − σ(x)
$$1-\sigma(x)=1-\frac{1}{1+e^{-x}}=\frac{e^{-x}}{1+e^{-x}}=\frac{1}{e^{x}+1}=\sigma(-x)$$

В предпоследнем шаге числитель и знаменатель умножены на $e^{x}$.

Вес и сдвиг: как нейрон перестраивает сигмоиду

В нейроне сигмоида получает не $x$, а $z=wx+b$. Вес $w$ растягивает кривую по горизонтали, сдвиг $b$ двигает её. Центр, где выход равен $0{,}5$, оказывается в точке $x_0=-b/w$, а наклон в центре равен $w/4$.

Рисунок 2. $\sigma(wx+b)$. При большом $|w|$ кривая превращается почти в ступеньку, при $w<0$ — переворачивается. Бледные кривые — $\sigma\bigl((wx+b)/4\bigr)$ и $\sigma\bigl((wx+b)/2\bigr)$: центр тот же, а наклон в 4 и 2 раза меньше.
Ступенька как предел

При $w\to+\infty$ функция $\sigma(w x)$ стремится к ступеньке Хевисайда: 0 слева от нуля, 1 справа (в самой точке $x=0$ значение всегда $0{,}5$). Так сигмоида исторически и появилась в нейросетях — как гладкая, дифференцируемая замена пороговому нейрону Маккаллока — Питтса.

Производная: σ′ = σ(1 − σ)

Это главная формула страницы. Выведем её двумя способами — «в лоб» и изящно.

Способ 1. Цепное правило (по шагам)

Запишем $\sigma(x)=(1+e^{-x})^{-1}$ и применим правило производной сложной функции:

$$\sigma'(x)=-(1+e^{-x})^{-2}\cdot\bigl(1+e^{-x}\bigr)'=-(1+e^{-x})^{-2}\cdot(-e^{-x})=\frac{e^{-x}}{(1+e^{-x})^{2}}$$

Разобьём дробь на произведение двух сомножителей:

$$\frac{e^{-x}}{(1+e^{-x})^{2}}=\underbrace{\frac{1}{1+e^{-x}}}_{\sigma(x)}\cdot\underbrace{\frac{e^{-x}}{1+e^{-x}}}_{1-\sigma(x)}$$

Второй сомножитель — это $1-\sigma(x)$, мы доказали это в разделе о свойствах.

Способ 2. Через логарифм

Возьмём логарифм: $\ln\sigma(x)=-\ln(1+e^{-x})$. Продифференцируем обе части:

$$\frac{\sigma'(x)}{\sigma(x)}=\frac{e^{-x}}{1+e^{-x}}=1-\sigma(x)\quad\Longrightarrow\quad\sigma'(x)=\sigma(x)\bigl(1-\sigma(x)\bigr)$$
$$\sigma'(x)=\sigma(x)\bigl(1-\sigma(x)\bigr)$$

Почему это важно на практике: на прямом проходе сеть уже посчитала $s=\sigma(z)$. На обратном проходе производная обходится одним умножением $s(1-s)$ — без новой экспоненты.

Максимум производной и вторая производная

Произведение $s(1-s)$ при $s\in(0;1)$ — перевёрнутая парабола с вершиной в $s=\tfrac12$. Значит, $\max\sigma'=\tfrac12\cdot\tfrac12=\tfrac14$, и достигается он при $x=0$. Дифференцируя ещё раз:

$$\sigma''(x)=\sigma(x)\bigl(1-\sigma(x)\bigr)\bigl(1-2\sigma(x)\bigr)$$

Вторая производная обращается в ноль при $\sigma=\tfrac12$, то есть в точке перегиба $x=0$. Её экстремумы — в точках $x=\pm\ln(2+\sqrt3)\approx\pm1{,}317$, где наклон сигмоиды меняется быстрее всего; значение там $\mp\sqrt3/18\approx\mp0{,}096$.

Ряд Тейлора около нуля

Из связи с tanh получаем разложение:

$$\sigma(x)=\frac12+\frac{x}{4}-\frac{x^{3}}{48}+\frac{x^{5}}{480}-\frac{17x^{7}}{80640}+\dots$$

Около нуля сигмоида почти линейна: $\sigma(x)\approx\tfrac12+\tfrac{x}{4}$. Именно поэтому при маленьких весах сеть с сигмоидами ведёт себя почти как линейная модель. Ряд сходится только при $|x|<\pi$: у функции есть особые точки в комплексной плоскости, $x=\pm i\pi$.

Рисунок 3. Многочлены Тейлора порядков 1, 3, 5, 7. Внутри полосы $|x|<\pi$ точность растёт с порядком, за её пределами многочлены уходят от сигмоиды тем сильнее, чем выше порядок. При $x=2$ приближение третьего порядка даёт $0{,}833$ вместо $0{,}881$.

Вероятностный смысл: шансы и логит

Почему выход сигмоиды разумно читать как вероятность? Пусть $p$ — вероятность события. Отношение $p/(1-p)$ называют шансами (odds): при $p=0{,}8$ шансы $4:1$. Логарифм шансов — логит:

$$\operatorname{logit}(p)=\ln\frac{p}{1-p}\qquad\Longleftrightarrow\qquad p=\sigma\bigl(\operatorname{logit}(p)\bigr)$$

Логит и сигмоида — взаимно обратные функции. Логит переводит вероятность из $(0;1)$ на всю числовую прямую, где удобно складывать вклады признаков. Логистическая регрессия предполагает ровно это: логарифм шансов линейно зависит от признаков, $\ln\frac{p}{1-p}=w^\top x+b$. Отсюда и сигмоида на выходе.

Рисунок 4. Слева сигмоида переводит логит $z$ в вероятность $p$, справа логит возвращает обратно. При $p=0{,}8$ шансы равны 4, логит $\ln4\approx1{,}386$. Обратите внимание: логит быстро растёт у краёв — от $p=0{,}99$ до $p=0{,}999$ он меняется на $2{,}3$.
Ещё одна интерпретация

Сигмоида — функция распределения логистического закона: если шум $\varepsilon$ имеет логистическое распределение, то $P(\varepsilon\le x)=\sigma(x)$. Похожая модель с нормальным шумом, $\Phi(x)$, называется пробит-регрессией; её кривая почти совпадает с $\sigma(1{,}7x)$.

Сигмоида в многомерном пространстве

У нейрона много входов: $z=w_1x_1+w_2x_2+\dots+b$. Сигмоида от такой линейной функции — это «складка», которая поднимается от 0 до 1 поперёк границы $w^\top x+b=0$ и не меняется вдоль неё. Вектор весов $w$ указывает направление самого крутого подъёма, а его длина — крутизну складки.

Рисунок 5. Логистическая регрессия на двух признаках. Слева — поверхность вероятности в 3D (её можно вращать), точки стоят на высоте своего класса. Справа — вид сверху: сплошная линия — граница $p=0{,}5$, пунктир — $p=0{,}1$ и $p=0{,}9$, стрелка — направление $w$. Нажмите «Пуск»: градиентный спуск по BCE с шагом $0{,}5$ сам находит веса.

Обучение использует ту же производную. Для потери BCE градиент по логиту равен $\sigma(z)-y$ (вывод — на странице BCE), поэтому шаг градиентного спуска по весам:

$$w\leftarrow w-\eta\,\frac1n\sum_{i=1}^{n}\bigl(\sigma(w^\top x_i+b)-y_i\bigr)\,x_i$$
Линейно разделимые данные

Если классы можно идеально разделить прямой, BCE продолжает уменьшаться при росте $\|w\|$: складка становится всё круче и стремится к ступеньке, веса уходят в бесконечность. На практике это лечат регуляризацией ($L_2$) или ранней остановкой.

Сигмоида в обучении: насыщение и затухание градиента

Если входы нейрона $z$ велики по модулю, сигмоида работает на плоских хвостах, где $\sigma'(z)\approx0$. Градиент через такой нейрон почти не проходит — нейрон насыщен. Насыщение $\sigma'<0{,}01$ начинается при $|z|>4{,}6$.

Рисунок 6. Синяя область — распределение входов $z\sim N(\mu,\,s^2)$, оранжевая — производная (высота синей кривой показана в условном масштабе). При $s=1$ средняя производная $0{,}207$ и насыщенных входов почти нет; при $s=4$ средняя производная падает до $0{,}091$, а насыщена уже четверть входов ($25\%$).

Отсюда правило инициализации: веса выбирают так, чтобы дисперсия $z$ была порядка единицы (инициализация ЛеКуна, $\operatorname{Var}w=1/n_{\text{in}}$, или Глоро (Xavier), $\operatorname{Var}w=2/(n_{\text{in}}+n_{\text{out}})$), а данные нормализуют.

Затухание градиента в глубокой сети

Пусть $h_k=\sigma(z_k)$, $z_k=W_kh_{k-1}$. По цепному правилу градиент потери $\mathcal L$ по выходу слоя $l$ — произведение якобианов всех слоёв выше, и в каждый входит $\operatorname{diag}\bigl(\sigma'(z_k)\bigr)$:

$$\frac{\partial \mathcal L}{\partial h_l}=\frac{\partial \mathcal L}{\partial h_L}\,\frac{\partial h_L}{\partial h_{L-1}}\cdots\frac{\partial h_{l+1}}{\partial h_l},\qquad \frac{\partial h_k}{\partial h_{k-1}}=\operatorname{diag}\bigl(\sigma'(z_k)\bigr)\,W_k$$

У сигмоиды каждое $\sigma'\le\tfrac14$, поэтому через 10 слоёв множитель от одних только производных не больше $0{,}25^{10}\approx9{,}5\cdot10^{-7}$. Веса $W_k$ при инициализации Глоро этот множитель не компенсируют: они сохраняют норму сигнала примерно на уровне единицы.

Рисунок 7. Норма градиента на каждом слое случайной сети ширины 64 (инициализация Глоро для sigmoid и tanh, Хе для ReLU). Шкала по вертикали логарифмическая, пунктир — оценка $0{,}25^{L-l}$. При глубине 10 у сигмоиды градиент у входа в $2{,}4\cdot10^{-6}$ раза меньше, чем у выхода; у tanh отношение около $0{,}2$, у ReLU — около $2{,}4$ (градиент даже немного растёт).
Почему сигмоида ушла из скрытых слоёв

До 2010 года глубокие сети с сигмоидами обучались плохо, если не прибегать к послойному предобучению (Хинтон и др., 2006). Глоро и Бенжио (2010) показали роль насыщения и предложили инициализацию, а ReLU (Наир и Хинтон, 2010; Глоро и др., 2011) почти сняли проблему. Сегодня сигмоида живёт там, где нужна именно доля от 0 до 1: на выходе бинарного классификатора и в вентилях.

В коде: устойчиво и без сюрпризов

Наивная формула $1/(1+e^{-x})$ при $x=-1000$ вычисляет $e^{1000}$ — переполнение. Результат всё равно получится 0, но с предупреждением, а в $\log\sigma(x)$ уже появится $-\infty$. Вторая проблема — потеря точности: $1-\sigma(40)$ в float64 равно ровно 0, хотя истинное значение $\sigma(-40)\approx4{,}25\cdot10^{-18}$.

pythonimport numpy as np

def sigmoid(x):
    """Устойчивая сигмоида: exp никогда не получает большой положительный аргумент."""
    x = np.asarray(x, dtype=float)
    out = np.empty_like(x)
    pos = x >= 0
    out[pos] = 1.0 / (1.0 + np.exp(-x[pos]))
    ex = np.exp(x[~pos])
    out[~pos] = ex / (1.0 + ex)
    return out

def sigmoid_grad(x):
    s = sigmoid(x)
    return s * (1.0 - s)

def log_sigmoid(x):
    # log σ(x) = −softplus(−x) = −log(1 + e^(−x)), без log(0)
    return -np.logaddexp(0.0, -x)

print(sigmoid([-40.0, 0.0, 40.0]))        # [4.24835426e-18 5.00000000e-01 1.00000000e+00]
print(1 - sigmoid(40.0), sigmoid(-40.0))  # 0.0 4.248354255291589e-18 — разность «съела» всё
print(log_sigmoid(-1000.0))               # -1000.0 (наивный np.log(sigmoid) дал бы -inf)
pythonimport torch
import torch.nn as nn

z = torch.tensor([-2.0, 0.0, 2.0], requires_grad=True)
p = torch.sigmoid(z)            # tensor([0.1192, 0.5000, 0.8808])
p.sum().backward()
print(z.grad)                   # tensor([0.1050, 0.2500, 0.1050]) = σ(1 − σ)

# Для классификации отдавайте в потерю логиты, а не σ(z):
loss_fn = nn.BCEWithLogitsLoss()  # внутри — устойчивый log σ(z)
loss = loss_fn(z, torch.tensor([0.0, 1.0, 1.0]))
Правило

Если дальше идёт логарифм — не считайте $\sigma$ отдельно. Используйте $\log\sigma(x)=-\operatorname{softplus}(-x)$ или готовые потери на логитах: BCEWithLogitsLoss в PyTorch, from_logits=True в Keras.

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

  1. Сигмоида в скрытых слоях глубокой сети — затухание градиента и смещённые (не центрированные) активации. Берите ReLU, GELU, SiLU; сигмоиду — только на выходе или в вентилях.
  2. Сигмоиды вместо softmax для взаимоисключающих классов. Для $K>2$ взаимоисключающих классов нужен softmax; сигмоида на каждом выходе — это multi-label, где классы независимы.
  3. Двойная сигмоида: модель уже возвращает вероятность, а потеря применяет σ ещё раз (например, BCEWithLogitsLoss поверх sigmoid). Обучение идёт, но «вероятности» сжаты в $(0{,}5;\,0{,}73)$, потеря не может стать малой, а градиенты искажены.
  4. Порог 0,5 «по умолчанию». Для откалиброванных вероятностей он минимизирует долю ошибок, но только если обе ошибки стоят одинаково. При разной цене ошибок, а также для F1 или полноты при дисбалансе классов лучший порог другой — его подбирают по метрике на валидации.
  5. Вывод «σ(z) = 0,9, значит модель уверена на 90%» без калибровки. Сигмоида даёт число в $(0;1)$, но откалиброванность — свойство обучения (BCE способствует ей, переобучение — портит).
  • tanh: $\tanh x=2\sigma(2x)-1$ — центрированная сигмоида с максимальным наклоном 1.
  • Softmax: для двух классов $\operatorname{softmax}(z_1,z_2)_1=\sigma(z_1-z_2)$.
  • BCE: в паре с сигмоидой даёт градиент по логиту $\hat y-y$ — без множителя $\sigma'$, а значит без насыщения при ошибке.
  • SiLU / Swish: $x\,\sigma(x)$ — сигмоида как «мягкий вентиль» для самого входа.
  • Focal Loss: обычно считается от вероятности правильного класса $p_t$: $\sigma(z)$ при $y=1$ и $1-\sigma(z)=\sigma(-z)$ при $y=0$.

Итоги

1) $\sigma(x)=1/(1+e^{-x})$ отображает $\mathbb R$ в $(0;1)$, проходит через $(0;\,0{,}5)$ и симметрична: $\sigma(-x)=1-\sigma(x)$. 2) $\sigma'=\sigma(1-\sigma)\le\tfrac14$: backprop дешёвый, но на хвостах градиент гаснет. 3) Сигмоида обратна логиту: логистическая регрессия моделирует логарифм шансов линейной функцией. 4) В многомерном случае это складка вдоль гиперплоскости $w^\top x+b=0$. 5) В коде — устойчивые формы и потери на логитах.

Проверь себя

1. Чему равна $\sigma(-3)$, если $\sigma(3)\approx0{,}953$?
2. Какое наибольшее значение принимает производная сигмоиды?
3. Нейрон считает $\sigma(wx+b)$ с $w=2$, $b=-4$. Где выход равен $0{,}5$?
4. Почему в PyTorch для бинарной классификации советуют BCEWithLogitsLoss вместо sigmoid + BCELoss?
5. Какой множитель затухания градиента даёт цепочка из 5 сигмоид в лучшем случае?