Activation Function
Функция активации — это нелинейная функция, которую нейрон применяет к взвешенному входу, позволяя сети обучаться распознавать сложные закономерности. Сравнение распространённых вариантов.
Функция активации — функция, которую нейрон в нейронной сети (NN) применяет к взвешенной сумме входов, чтобы получить выход. Её главная задача — добавить нелинейность: без неё любой стек слоёв сводится к одному линейному преобразованию, и глубина ничего не даёт. Благодаря нелинейности сеть может представлять криволинейные границы решений — от штрихов рукописных цифр до силуэта пешехода в кадре камеры. Функции активации выполняют две роли. В скрытых слоях такие функции, как ReLU, SiLU и GELU, помогают сети формировать признаки. В выходном слое функции вроде sigmoid и softmax преобразуют исходные оценки в вероятности.
Зачем сетям нужна нелинейность#
Слой без функции активации вычисляет Wx + b. Два таких слоя дают W₂(W₁x + b₁) + b₂, что равно (W₂W₁)x + (W₂b₁ + b₂), то есть ещё одному линейному слою. Функция активации между слоями не даёт выполнить это сведение, а теорема об универсальной аппроксимации утверждает, что один скрытый слой с достаточным числом нелинейных элементов может аппроксимировать любую непрерывную функцию на ограниченной области.
Производная функции активации не менее важна, чем её форма, поскольку при обратном распространении ошибки эти производные перемножаются слой за слоем. Производная sigmoid не превышает 0,25, а производная tanh при больших входных значениях стремится к нулю. Поэтому градиенты уменьшаются при прохождении через множество насыщаемых слоёв — это проблема затухающих градиентов. Для всех положительных входов производная ReLU равна 1; это одна из главных причин, по которым стало возможно обучать очень глубокие сети.
Распространённые функции активации#
- ReLU: max(0, x). Вычисляется быстро: градиент равен 1 для положительных входов и точно равен нулю для отрицательных. С 2012 года, после выхода AlexNet, она стала стандартной функцией активации скрытых слоёв CNN, однако нейроны, получающие только отрицательные входы, перестают обучаться.
- Leaky ReLU: Умножает отрицательные входы на небольшой коэффициент, например 0,01 или 0,1, благодаря чему градиент сохраняется для каждого нейрона.
- SiLU (Swish): x · σ(x) — плавная кривая, которая немного опускается ниже нуля при отрицательных входах. Часто используется в эффективных CNN и детекторах реального времени.
- GELU: x · Φ(x), где Φ — функция стандартного нормального распределения. Это стандартная функция активации в BERT, GPT-2 и визуальных Transformer-моделях.
- Tanh: Преобразует входные значения в диапазон от −1 до 1 с центром в нуле. Она формирует скрытое состояние рекуррентных сетей, таких как GRU.
- Sigmoid: Преобразует входные значения в диапазон от 0 до 1, что подходит для бинарных выходов, многометочных выходов и вентилей рекуррентных ячеек.
- Softmax: Преобразует весь вектор оценок в распределение вероятностей с суммой 1. Используется для классификации с одной меткой и весов внимания.
- SwiGLU: Слой с вентильной структурой, который умножает проекцию, активированную SiLU, на вторую обучаемую проекцию. Он заменил обычную функцию активации в полносвязных слоях многих современных больших языковых моделей (LLM).
PyTorch предоставляет каждую поэлементную функцию в виде модуля в torch.nn, поэтому их удобно сравнивать на одних и тех же входных данных:
import torch
from torch import nn
x = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0])
# Common activations, each applied element-wise to the same inputs
activations = {
"ReLU": nn.ReLU(),
"Leaky ReLU": nn.LeakyReLU(0.1),
"SiLU": nn.SiLU(),
"GELU": nn.GELU(),
"Tanh": nn.Tanh(),
"Sigmoid": nn.Sigmoid(),
}
for name, act in activations.items():
print(f"{name:>10}: {[round(v, 3) for v in act(x).tolist()]}")Для входных значений −3, −1, 0, 1 и 3 ReLU выводит [0.0, 0.0, 0.0, 1.0, 3.0], а Leaky ReLU — [-0.3, -0.1, 0.0, 1.0, 3.0]. SiLU даёт [-0.142, -0.269, 0.0, 0.731, 2.858], а GELU — [-0.004, -0.159, 0.0, 0.841, 2.996]: обе функции пропускают небольшие отрицательные значения и при больших входах приближаются к ReLU. Tanh даёт [-0.995, -0.762, 0.0, 0.762, 0.995], а sigmoid — [0.047, 0.269, 0.5, 0.731, 0.953]; обе функции выравниваются при ±3, где их градиенты уже малы.
Как выбрать функцию активации#
Для скрытых слоёв обычно используют функцию, принятую в соответствующем семействе архитектур, а для выходного слоя выбор зависит от задачи. Softmax подходит, когда каждому входу соответствует ровно один класс, sigmoid — когда метки могут сочетаться, а для регрессионных выходов не используют функцию активации, чтобы они могли принимать любые значения. Выбор может ограничиваться и оборудованием: некоторые периферийные ускорители изначально поддерживают только простые функции, такие как ReLU, Leaky ReLU и Hard-Swish. YOLO26 применяет SiLU после свёртки и пакетной нормализации в каждом блоке Conv, оценивает каждый класс детекции с помощью независимой sigmoid, поэтому оценки классов рамки не обязаны суммироваться до 1, а в моделях классификации применяет softmax к 1000 классам ImageNet.
Функции активации и связанные понятия#
- Функция потерь: Функция активации определяет выход каждого нейрона при прямом проходе, а функция потерь оценивает итоговое предсказание сети относительно метки. Для численной стабильности библиотеки часто объединяют последнюю функцию активации с функцией потерь, как
CrossEntropyLossделает с softmax. - Пакетная нормализация: Пакетная или послойная нормализация масштабирует активации до стабильного диапазона с помощью статистических данных и обучаемых параметров. Она располагается рядом с функцией активации, обычно непосредственно перед ней, и сама по себе не добавляет нелинейности.
- Активации: Во множественном числе этот термин обозначает выходные значения, которые создаёт слой. «Нелинейность» и устаревший термин «передаточная функция» — синонимы функции активации. Во время обучения фреймворки хранят активации каждого слоя в памяти для обратного прохода. Поэтому контрольные точки градиентов экономят память: часть активаций удаляется и вычисляется повторно во время обратного распространения ошибки.










