Функция активации — это правило, которое преобразует выход нейрона после линейной комбинации входов. Без неё многослойная нейросеть в основном сводится к одной линейной модели и теряет способность учить сложные зависимости. Выбор активации влияет на градиенты, устойчивость обучения, скорость сходимости и смысл выходного значения. Подход не универсален: в линейных моделях, деревьях решений и многих классических алгоритмах активации просто не нужны, а неудачный выбор — например, saturating-функции в глубоких сетях без нормализации — может замедлить обучение или привести к исчезающим градиентам.
Простыми словами
Нейрон сначала считает взвешенную сумму входов: z = w1x1 + w2x2 + ... + b. Функция активации берёт это число z и превращает его в новый сигнал a = f(z). Именно этот шаг делает сеть нелинейной.
Практический смысл простой: активация решает, как сильно нейрон «сработает» и в каком диапазоне будет его ответ. Если использовать только линейные преобразования, сколько слоёв ни добавляй, результат останется линейным. Поэтому скрытые слои почти всегда содержат нелинейную активацию.
Есть два частых сценария:
- Скрытые слои: активация нужна, чтобы модель учила сложные зависимости.
- Выходной слой: активация задаёт формат ответа модели, например вероятность класса или неограниченное числовое значение.
На практике это значит, что выбор активации связан не только с архитектурой, но и с постановкой задачи, функцией потерь и типом целевой переменной.
Как это работает
Типичный шаг в слое нейросети выглядит так:
- Вычисляется линейная часть:
z = Wx + b. - К результату применяется функция активации:
a = f(z). - Во время обратного распространения ошибка проходит через производную этой функции.
Именно производная определяет, насколько удобно оптимизатору обновлять веса. Если производная часто близка к нулю, градиенты затухают. Если ответы функции плохо ограничены или распределены неудачно, обучение может стать нестабильным.
| Функция | Формула | Где обычно применяют | Что учитывать |
|---|---|---|---|
| ReLU | max(0, x) |
Скрытые слои MLP и CNN | Проста и быстра, но часть нейронов может «умереть» и всегда выдавать 0 |
| Leaky ReLU | max(ax, x) |
Скрытые слои, если у ReLU много нулевых нейронов | Сохраняет небольшой градиент для отрицательных значений |
| Sigmoid | 1 / (1 + exp(-x)) |
Выход для бинарной классификации | Даёт значения от 0 до 1, но в скрытых слоях часто насыщается |
| tanh | (exp(x)-exp(-x)) / (exp(x)+exp(-x)) |
Иногда скрытые слои и рекуррентные сети | Центрирована около 0, но тоже склонна к насыщению |
| Softmax | exp(x_i) / sum(exp(x_j)) |
Выход для многоклассовой классификации с одним правильным классом | Применяется к вектору логитов, а не к одному числу |
| GELU / SiLU | x * Phi(x) / x * sigmoid(x) |
Современные языковые модели и трансформеры | Гладкие функции, часто удобны в больших моделях, но не являются универсально лучшими |
Ключевой момент для практики: скрытая активация и выходная активация выбираются по разным причинам. Внутри сети вы обычно ищете хороший поток градиента и достаточную нелинейность. На выходе — соответствие целевой задаче.
Зачем нужно
Функции активации нужны как минимум по четырём причинам.
- Добавить нелинейность. Без неё сеть не сможет выразить сложные границы решений, взаимодействия признаков и составные зависимости.
- Управлять оптимизацией. Разные активации по-разному пропускают градиент. Это влияет на сходимость, чувствительность к инициализации и глубине сети.
- Ограничить или интерпретировать выход. Вероятность для бинарного класса требует диапазона от 0 до 1, а многоклассовая классификация — нормированного распределения.
- Задать свойства представления. Например, ReLU создаёт разреженные активации, а гладкие функции вроде GELU дают более плавный отклик.
Практическое правило выбора обычно такое:
- Для скрытых слоёв в обычных MLP и CNN чаще всего начинают с ReLU или близких вариантов.
- Для бинарной классификации на выходе используют sigmoid.
- Для многоклассовой классификации с одним правильным классом — softmax.
- Для регрессии — часто линейный выход, то есть без ограничивающей активации.
В трансформерах и больших языковых моделях в скрытых слоях часто применяют GELU или SiLU, потому что они хорошо сочетаются с современной архитектурой, нормализацией и масштабом обучения. Но это не значит, что их автоматически стоит переносить в любую табличную задачу.
Пример
Допустим, вы строите нейросеть для бинарной классификации: предсказать, уйдёт ли клиент в отток по 50 числовым признакам.
Рабочая схема может быть такой:
- Вход: 50 признаков
- Скрытый слой 1: 128 нейронов + ReLU
- Скрытый слой 2: 64 нейрона + ReLU
- Выход: 1 нейрон + sigmoid
Почему так:
- ReLU в скрытых слоях помогает сети учить нелинейные зависимости между признаками и обычно обучается проще, чем sigmoid или tanh в тех же слоях.
- Sigmoid на выходе переводит логит в число от 0 до 1, которое удобно трактовать как вероятность положительного класса.
Что будет плохим выбором:
- Поставить softmax на один выходной нейрон — смысла нет, потому что softmax нужен для распределения по нескольким классам.
- Поставить sigmoid во все скрытые слои глубокой сети без дополнительных мер — обучение может стать медленным из-за насыщения.
- Поставить ReLU на выходе для вероятности оттока — выход перестанет быть корректной вероятностью.
Если же задача меняется на прогнозирование суммы покупки, выходной слой обычно делают линейным, потому что целевая переменная не обязана лежать в диапазоне от 0 до 1. Это типичный пример того, что активация на выходе определяется не модой, а форматом ответа.
Заблуждения и ограничения
Заблуждение 1: есть одна лучшая функция активации. На практике лучшая функция зависит от архитектуры, глубины, данных, нормализации и цели модели. ReLU — хороший базовый выбор, но не универсальный стандарт для всего.
Заблуждение 2: softmax — это просто «вероятность» для любой классификации. Нет. Softmax подходит, когда классы взаимно исключают друг друга. Для multi-label задач, где объект может принадлежать нескольким классам сразу, обычно используют отдельный sigmoid на каждый класс.
Заблуждение 3: если обучение идёт плохо, достаточно сменить активацию. Проблема может быть в масштабе признаков, функции потерь, дисбалансе классов, инициализации, learning rate, нормализации или самой архитектуре.
Ограничение 1: исчезающие и взрывающиеся градиенты. Некоторые активации затрудняют обучение в глубоких сетях, особенно без корректной инициализации и нормализации.
Ограничение 2: «мёртвые» нейроны у ReLU. Если нейрон стабильно попадает в отрицательную область, его выход равен нулю, а обновления могут почти прекратиться. В таких случаях иногда помогают Leaky ReLU, инициализация, меньший learning rate или нормализация.
Ограничение 3: несоответствие задаче. Активация на выходе должна соответствовать целевой переменной. Нельзя бездумно ставить sigmoid или softmax «потому что это классификация».
Где метод не подходит. Само понятие функции активации относится к нейросетям и близким дифференцируемым моделям. В линейной регрессии, градиентном бустинге по деревьям, случайных лесах и большинстве правил на основе if-else этот механизм либо отсутствует, либо не играет центральной роли.
Частые вопросы
Что ставить в скрытых слоях по умолчанию?
Для многих задач разумная отправная точка — ReLU. Если возникают проблемы с «мёртвыми» нейронами или архитектура ближе к современным трансформерам, можно проверить Leaky ReLU, GELU или SiLU.
Когда использовать sigmoid, а когда softmax?
Sigmoid обычно используют для бинарной классификации или для multi-label сценариев, где каждый класс предсказывается независимо. Softmax применяют, когда из нескольких классов верен ровно один.
Нужна ли активация на выходе при регрессии?
Часто нет: ставят линейный выход без ограничивающей функции. Исключение — случаи, когда выход должен лежать в заданном диапазоне, например быть строго положительным или находиться между 0 и 1.
Почему sigmoid плохо работает в глубоких скрытых слоях?
На больших по модулю входах она насыщается, а её производная становится маленькой. Из-за этого градиенты затухают и обучение идёт медленно.
Можно ли убрать все активации из сети?
Технически да, но тогда композиция слоёв останется линейной. Такая сеть теряет главное преимущество глубины — способность моделировать нелинейные зависимости.
Связанные понятия
- Логит: значение до применения выходной активации, например до sigmoid или softmax.
- Функция потерь: должна быть согласована с выходной активацией, например binary cross-entropy с sigmoid.
- Обратное распространение ошибки: механизм, через который производная активации влияет на обновление весов.
- Инициализация весов: неправильная инициализация может усилить проблемы активации, особенно в глубоких сетях.
- Нормализация: batch normalization и layer normalization часто стабилизируют распределение активаций.
- Линейный слой: часть вычисления до нелинейного преобразования.
Если нужен короткий практический вывод: начинайте с ReLU в скрытых слоях, подбирайте выходную активацию под тип задачи и не оценивайте выбор изолированно от потерь, нормализации и данных. Функция активации — важная деталь, но она работает только как часть всей обучающей схемы.