Зачем она нужна
Нейросеть, логистическая регрессия, градиентный бустинг — внутри у всех получается просто число: $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)$. В центре подъём самый крутой, а на краях дорога почти горизонтальна — производная там близка к нулю.
При $x=4$ сигмоида уже $0{,}982$, а производная — всего $0{,}018$, в 14 раз меньше, чем в центре. Это насыщение (saturation): дальше вход растёт, а выход почти не меняется.
Формула по косточкам
Соберём сигмоиду из трёх простых действий и проследим, что каждое делает с числом $x$.
- $e^{-x}$
- экспонента всегда положительна: при $x\to+\infty$ она стремится к 0, при $x\to-\infty$ — к бесконечности;
- $1+e^{-x}$
- знаменатель всегда больше 1 — поэтому дробь всегда меньше 1;
- $\frac{1}{1+e^{-x}}$
- обратная величина положительного числа больше 1 лежит строго между 0 и 1.
Ту же функцию полезно узнавать в других записях:
Вторая форма получается умножением числителя и знаменателя на $e^x$; она удобна для отрицательных $x$ (см. раздел про код). Третья связывает сигмоиду с гиперболическим тангенсом: $\tanh x=2\sigma(2x)-1$ — та же S-кривая, сжатая вдвое по горизонтали, растянутая вдвое по высоте и сдвинутая вниз на 1.
| $x$ | $\sigma(x)$ | $\sigma'(x)$ |
|---|---|---|
| −6 | 0,0025 | 0,0025 |
| −4 | 0,0180 | 0,0177 |
| −2 | 0,1192 | 0,1050 |
| −1 | 0,2689 | 0,1966 |
| 0 | 0,5000 | 0,2500 |
| 1 | 0,7311 | 0,1966 |
| 2 | 0,8808 | 0,1050 |
| 4 | 0,9820 | 0,0177 |
| 6 | 0,9975 | 0,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)
В предпоследнем шаге числитель и знаменатель умножены на $e^{x}$.
Вес и сдвиг: как нейрон перестраивает сигмоиду
В нейроне сигмоида получает не $x$, а $z=wx+b$. Вес $w$ растягивает кривую по горизонтали, сдвиг $b$ двигает её. Центр, где выход равен $0{,}5$, оказывается в точке $x_0=-b/w$, а наклон в центре равен $w/4$.
При $w\to+\infty$ функция $\sigma(w x)$ стремится к ступеньке Хевисайда: 0 слева от нуля, 1 справа (в самой точке $x=0$ значение всегда $0{,}5$). Так сигмоида исторически и появилась в нейросетях — как гладкая, дифференцируемая замена пороговому нейрону Маккаллока — Питтса.
Производная: σ′ = σ(1 − σ)
Это главная формула страницы. Выведем её двумя способами — «в лоб» и изящно.
Способ 1. Цепное правило (по шагам)
Запишем $\sigma(x)=(1+e^{-x})^{-1}$ и применим правило производной сложной функции:
Разобьём дробь на произведение двух сомножителей:
Второй сомножитель — это $1-\sigma(x)$, мы доказали это в разделе о свойствах.
Способ 2. Через логарифм
Возьмём логарифм: $\ln\sigma(x)=-\ln(1+e^{-x})$. Продифференцируем обе части:
Почему это важно на практике: на прямом проходе сеть уже посчитала $s=\sigma(z)$. На обратном проходе производная обходится одним умножением $s(1-s)$ — без новой экспоненты.
Максимум производной и вторая производная
Произведение $s(1-s)$ при $s\in(0;1)$ — перевёрнутая парабола с вершиной в $s=\tfrac12$. Значит, $\max\sigma'=\tfrac12\cdot\tfrac12=\tfrac14$, и достигается он при $x=0$. Дифференцируя ещё раз:
Вторая производная обращается в ноль при $\sigma=\tfrac12$, то есть в точке перегиба $x=0$. Её экстремумы — в точках $x=\pm\ln(2+\sqrt3)\approx\pm1{,}317$, где наклон сигмоиды меняется быстрее всего; значение там $\mp\sqrt3/18\approx\mp0{,}096$.
Ряд Тейлора около нуля
Из связи с tanh получаем разложение:
Около нуля сигмоида почти линейна: $\sigma(x)\approx\tfrac12+\tfrac{x}{4}$. Именно поэтому при маленьких весах сеть с сигмоидами ведёт себя почти как линейная модель. Ряд сходится только при $|x|<\pi$: у функции есть особые точки в комплексной плоскости, $x=\pm i\pi$.
Вероятностный смысл: шансы и логит
Почему выход сигмоиды разумно читать как вероятность? Пусть $p$ — вероятность события. Отношение $p/(1-p)$ называют шансами (odds): при $p=0{,}8$ шансы $4:1$. Логарифм шансов — логит:
Логит и сигмоида — взаимно обратные функции. Логит переводит вероятность из $(0;1)$ на всю числовую прямую, где удобно складывать вклады признаков. Логистическая регрессия предполагает ровно это: логарифм шансов линейно зависит от признаков, $\ln\frac{p}{1-p}=w^\top x+b$. Отсюда и сигмоида на выходе.
Сигмоида — функция распределения логистического закона: если шум $\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$ указывает направление самого крутого подъёма, а его длина — крутизну складки.
Обучение использует ту же производную. Для потери BCE градиент по логиту равен $\sigma(z)-y$ (вывод — на странице BCE), поэтому шаг градиентного спуска по весам:
Если классы можно идеально разделить прямой, BCE продолжает уменьшаться при росте $\|w\|$: складка становится всё круче и стремится к ступеньке, веса уходят в бесконечность. На практике это лечат регуляризацией ($L_2$) или ранней остановкой.
Сигмоида в обучении: насыщение и затухание градиента
Если входы нейрона $z$ велики по модулю, сигмоида работает на плоских хвостах, где $\sigma'(z)\approx0$. Градиент через такой нейрон почти не проходит — нейрон насыщен. Насыщение $\sigma'<0{,}01$ начинается при $|z|>4{,}6$.
Отсюда правило инициализации: веса выбирают так, чтобы дисперсия $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)$:
У сигмоиды каждое $\sigma'\le\tfrac14$, поэтому через 10 слоёв множитель от одних только производных не больше $0{,}25^{10}\approx9{,}5\cdot10^{-7}$. Веса $W_k$ при инициализации Глоро этот множитель не компенсируют: они сохраняют норму сигнала примерно на уровне единицы.
До 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.
Частые ошибки
- Сигмоида в скрытых слоях глубокой сети — затухание градиента и смещённые (не центрированные) активации. Берите ReLU, GELU, SiLU; сигмоиду — только на выходе или в вентилях.
- Сигмоиды вместо softmax для взаимоисключающих классов. Для $K>2$ взаимоисключающих классов нужен softmax; сигмоида на каждом выходе — это multi-label, где классы независимы.
- Двойная сигмоида: модель уже возвращает вероятность, а потеря применяет σ ещё раз (например,
BCEWithLogitsLossповерхsigmoid). Обучение идёт, но «вероятности» сжаты в $(0{,}5;\,0{,}73)$, потеря не может стать малой, а градиенты искажены. - Порог 0,5 «по умолчанию». Для откалиброванных вероятностей он минимизирует долю ошибок, но только если обе ошибки стоят одинаково. При разной цене ошибок, а также для F1 или полноты при дисбалансе классов лучший порог другой — его подбирают по метрике на валидации.
- Вывод «σ(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) В коде — устойчивые формы и потери на логитах.