Sigmoid
Сигмоидная функция отображает любое действительное число в значение от 0 до 1. Рассматриваются её формула, градиент, вероятностные выходы, гейты и код на PyTorch.
Функция сигмоиды σ(x) = 1 / (1 + e^(−x)) отображает любое действительное число в диапазон от 0 до 1 по S-образной кривой: большие отрицательные входы дают значения, близкие к 0, большие положительные — близкие к 1, а для входа 0 значение точно равно 0.5. В машинном обучении (ML) под «сигмоидой» почти всегда подразумевают логистическую функцию — ту же кривую, которая преобразует линейную оценку в вероятность в логистической регрессии. В нейронной сети (NN) сигмоида выполняет три роли: изначально она служила функцией активации скрытых слоёв, преобразует итоговую оценку в вероятность для бинарных задач и задач с несколькими метками, а также работает как мягкий переключатель в механизмах управления рекуррентных ячеек и других управляемых слоёв. Со временем в скрытых слоях стали использовать такие функции, как ReLU, поэтому в современных моделях сигмоида встречается в основном на выходах и в механизмах управления.
Формула и свойства#
Сигмоида симметрична относительно середины кривой: σ(−x) = 1 − σ(x). Её обратная функция — логит log(p / (1 − p)), преобразующий вероятность обратно в логарифм шансов. Поэтому необработанный выход сети перед сигмоидой называют логитом. Производная имеет простой вид: σ′(x) = σ(x)(1 − σ(x)). Она достигает максимума 0.25 при x = 0 и стремится к нулю по мере уплощения кривой с обоих концов; это называют насыщением. Фрагмент кода на PyTorch ниже вычисляет выходы и градиенты для пяти точек:
import torch
x = torch.tensor([-6.0, -2.0, 0.0, 2.0, 6.0], requires_grad=True)
y = torch.sigmoid(x)
# Backpropagate to get the derivative sigmoid(x) * (1 - sigmoid(x)) at each input
y.sum().backward()
print(f"Sigmoid: {[round(v, 4) for v in y.tolist()]}")
print(f"Gradient: {[round(v, 4) for v in x.grad.tolist()]}")Вывод содержит значения сигмоиды [0.0025, 0.1192, 0.5, 0.8808, 0.9975] и градиенты [0.0025, 0.105, 0.25, 0.105, 0.0025]. При ±6 выход отличается от предельного значения менее чем на 0.0025, а градиент в 100 раз меньше, чем при нуле. Поэтому вход в этом диапазоне почти не меняет породившие его веса.
Сигмоида в скрытых слоях#
В ранних многослойных сетях в каждом скрытом слое использовали сигмоиду, что приводило к двум проблемам. При обратном распространении ошибки градиент последовательно умножается на производную функции активации каждого слоя, и поскольку производная сигмоиды никогда не превышает 0.25, в десяти слоях с сигмоидой одни только эти производные масштабируют градиент множителем не более 0.25¹⁰, то есть уменьшают его до величины менее одной миллионной от исходного значения, что и приводит к проблеме исчезающего градиента. Выходы сигмоиды также всегда положительны, поэтому все градиенты весов нейрона, который их получает, при каждом обновлении имеют одинаковый знак, и веса могут лишь зигзагообразно приближаться к оптимуму. Tanh центрирует выходы относительно нуля, а Ксавье Глорот и Йошуа Бенжио в 2010 году показали, что положительное среднее сигмоиды приводит к насыщению верхнего скрытого слоя случайно инициализированной глубокой сети. ReLU устранила обе проблемы и стала стандартной функцией активации скрытых слоёв, а её гладкие аналоги, такие как SiLU, x · σ(x), по-прежнему используют сигмоиду внутри в роли затвора.
Сигмоида в выходном слое#
При бинарной классификации единственный выход z преобразуется в p = σ(z) — предсказанную вероятность положительного класса. Порог 0,5 для p эквивалентен порогу 0 для z. При обучении сигмоиду объединяют с бинарной кросс-энтропией, градиент которой по логиту равен p − y, то есть предсказанная вероятность минус метка. Для численной устойчивости фреймворки объединяют эти операции: BCEWithLogitsLoss в PyTorch принимает исходные логиты и внутри использует приём log-sum-exp, который позволяет не брать логарифм вероятности, округлившейся ровно до 0 или 1.
Если метки могут встречаться одновременно, модель использует отдельную сигмоиду для каждой метки. Такая схема называется многометочной классификацией. А softmax заставляет классы делить между собой общую вероятность, что подходит для взаимоисключающих меток:
import torch
# Logits from a classifier for the labels "person", "backpack", and "car"
logits = torch.tensor([2.0, 1.5, -3.0])
# Sigmoid scores each label on its own; softmax makes the labels compete for one total
sigmoid_probs = torch.sigmoid(logits)
softmax_probs = torch.softmax(logits, dim=0)
print(f"Sigmoid: {[round(p, 3) for p in sigmoid_probs.tolist()]}, sum {sigmoid_probs.sum():.3f}")
print(f"Softmax: {[round(p, 3) for p in softmax_probs.tolist()]}, sum {softmax_probs.sum():.3f}")Сумма оценок сигмоиды [0.881, 0.818, 0.047] равна 1.746, поэтому и «человек», и «рюкзак» превышают порог 0.5. Softmax распределяет те же логиты между значениями [0.62, 0.376, 0.004], и выше 0.5 остаётся только «человек». Детекторы YOLO26 оценивают классы с помощью независимой сигмоиды для каждого класса, обученной с BCEWithLogitsLoss, поэтому оценки классов рамки не обязаны в сумме давать 1. В моделях поз YOLO26 к логиту видимости каждой ключевой точки также применяется сигмоида, чтобы получить вероятность видимости этой точки.
Сигмоида как управляющий сигнал#
Поскольку выход сигмоиды находится в диапазоне от 0 до 1, с её помощью можно поэлементно масштабировать другой сигнал — от полного блокирования до полного пропускания, сохраняя при этом дифференцируемость:
- Ячейки LSTM и GRU: сигмоидные механизмы управления определяют, какую часть старой памяти сохранить, сколько нового содержимого записать и какую часть состояния передать на каждом шаге времени; tanh преобразует само содержимое.
- SwiGLU: в полносвязных слоях многих больших языковых моделей (LLM) одна обучаемая проекция умножается на вторую проекцию с активацией SiLU — механизм управления на основе сигмоиды.
- SigLIP: эта модель изображений и текста оценивает каждую пару «изображение — подпись» в батче с помощью отдельной сигмоиды, которая вычисляет вероятность соответствия «да» или «нет». Поэтому функция потерь не требует нормализации по всему батчу.
Сигмоида и связанные функции#
- Логистическая функция: синоним сигмоиды в машинном обучении. В математике термин «сигмоида» охватывает и другие S-образные кривые, включая tanh и функцию ошибок.
- Softmax: нормализует целый вектор, преобразуя его в вероятности, сумма которых равна 1. Для двух классов softmax от логитов (z₁, z₂) выдаёт для первого класса σ(z₁ − z₂), поэтому softmax с двумя выходами и сигмоида с одним выходом описывают одну и ту же модель.
- Tanh: масштабированная сигмоида tanh(x) = 2σ(2x) − 1 с выходами от −1 до 1, центрированными относительно нуля, и максимальной производной 1.
- Жёсткая сигмоида: кусочно-линейная аппроксимация, позволяющая избежать вычисления экспоненты на мобильном оборудовании. MobileNetV3 использует ReLU6(x + 3) / 6: функция равна 0 при x < −3, 1 при x > 3, а между этими значениями представляет собой прямую.










