Активационная функция — это математическая операция, которая применяется к взвешенной сумме входных сигналов нейрона и определяет, какой сигнал он передаст дальше. Именно она превращает линейную комбинацию входов в нелинейный выход, позволяя сети моделировать сложные зависимости.
Без активационной функции нейронная сеть с любым числом слоёв остаётся линейным преобразованием: последовательное применение линейных операций всегда сводится к одной матрице. Нелинейность — единственный способ научить сеть распознавать кривые, циклы, взаимодействия признаков и другие нетривиальные структуры в данных.
Как это работает
Каждый нейрон получает вектор входов x, умножает его на веса w, складывает результаты и добавляет смещение b. Полученная скалярная величина z = w·x + b называется взвешенной суммой или логитом. Затем к z применяется активационная функция f:
output = f(z)
Результат output передаётся на входы нейронов следующего слоя. В выходном слое активационная функция часто выполняет дополнительную роль: Sigmoid и Softmax преобразуют логиты в вероятности, Tanh ограничивает выход диапазоном от -1 до 1.
Выбор функции влияет на скорость обучения, устойчивость к исчезающим градиентам и итоговое качество модели. В глубоких сетях с десятками слоёв неправильная активация может полностью остановить обучение.
Зачем это нужно
Активационные функции решают три задачи:
- Введение нелинейности. Позволяют сети аппроксимировать любую непрерывную функцию при достаточном числе нейронов (теорема об универсальной аппроксимации).
- Управление градиентами. Правильная активация сохраняет градиент при обратном распространении ошибки, не давая ему затухнуть или взорваться.
- Формирование выхода. В финальном слое активация задаёт формат предсказания: вероятность, класс, вещественное число.
В компьютерном зрении, обработке текста, рекомендательных системах и генеративных моделях активационные функции подбираются под архитектуру и задачу. Например, в трансформерах стандартом стала GELU, а в свёрточных сетях — ReLU и её вариации.
Примеры
- ReLU (Rectified Linear Unit):
f(x) = max(0, x). Если вход положительный — пропускает его без изменений, если отрицательный — выдаёт ноль. Самая популярная активация в скрытых слоях глубоких сетей: быстрая, не насыщается на положительных значениях, создаёт разреженные активации. - Sigmoid:
f(x) = 1 / (1 + e^(-x)). Сжимает любое число в диапазон от 0 до 1. Используется в выходном слое для бинарной классификации и в старых сетях, но в глубоких слоях страдает от исчезающего градиента. - Tanh:
f(x) = (e^x - e^(-x)) / (e^x + e^(-x)). Похожа на Sigmoid, но выдаёт значения от -1 до 1. Центрирована относительно нуля, что ускоряет сходимость по сравнению с Sigmoid, однако проблема затухающих градиентов сохраняется. - Softmax: преобразует вектор логитов в распределение вероятностей по классам. Применяется в выходном слое для многоклассовой классификации: сумма выходов равна 1.
- GELU (Gaussian Error Linear Unit): сглаженная версия ReLU, взвешивающая вход по значению функции нормального распределения. Популярна в BERT, GPT и других трансформерах.
Формула или метрика
Общая схема вычисления выхода нейрона:
y = f(Σ(w_i · x_i) + b), где f — активационная функция.
Для ReLU: f(z) = max(0, z).
Для Sigmoid: f(z) = 1 / (1 + e^(-z)).
Для Tanh: f(z) = (e^z - e^(-z)) / (e^z + e^(-z)).
Типичные ошибки
- Использование Sigmoid или Tanh в глубоких скрытых слоях. Градиент затухает экспоненциально с глубиной, и сеть перестаёт обучаться. Для скрытых слоёв глубже 5–7 уровней выбирайте ReLU, Leaky ReLU, GELU или SELU.
- Применение ReLU в выходном слое для вероятностей. ReLU не ограничивает выход, поэтому не подходит для задач классификации. Для бинарной классификации используйте Sigmoid, для многоклассовой — Softmax.
- Игнорирование проблемы «мёртвых» нейронов. Классический ReLU может «умереть»: если нейрон надолго уходит в отрицательную область, его градиент становится нулём навсегда. Это лечится Leaky ReLU, ELU или SELU.
- Смена активации без переобучения. Архитектура и инициализация весов подбираются под конкретную функцию. Замена Sigmoid на ReLU без корректировки инициализации может дестабилизировать обучение.
Как улучшить
- Начните с ReLU для скрытых слоёв. Это быстрый и надёжный выбор по умолчанию для большинства задач. Если видите «мёртвые» нейроны — переходите на Leaky ReLU с отрицательным наклоном 0,01–0,1.
- Для трансформеров и современных архитектур выбирайте GELU или SiLU. Они дают более плавную нелинейность и лучше работают с механизмами внимания.
- В выходном слое всегда ставьте активацию под задачу: Sigmoid — бинарная классификация, Softmax — многоклассовая, линейная (без активации) — регрессия.
- Экспериментируйте с SELU и инициализацией LeCun. Эта комбинация обеспечивает самонормализацию сети и может убрать необходимость в Batch Normalization.
- Следите за масштабом логитов. Если значения перед активацией слишком большие или маленькие, Sigmoid и Tanh насыщаются. Нормализуйте входы и используйте правильную инициализацию весов (He для ReLU, Xavier для Tanh).