Активационная функция
Активационная функция (также функция активации, пороговая функция, передаточная функция) — это математическая функция, применяемая к выходному сигналу нейрона в искусственной нейронной сети (ИНС) для определения его выходного значения. Она преобразует взвешенную сумму входных сигналов нейрона (линейную комбинацию) в нелинейный выходной сигнал, который затем передаётся нейронам следующего слоя. Активационные функции являются ключевым элементом, обеспечивающим способность нейронных сетей моделировать сложные нелинейные зависимости, аппроксимировать произвольные функции и решать задачи классификации, регрессии и генерации данных.
Назначение и роль
Основная цель активационной функции — внесение нелинейности в работу нейронной сети. Если бы активационная функция была линейной (например, тождественной), то вся сеть, независимо от количества слоёв, сводилась бы к линейной комбинации входных сигналов, что резко ограничило бы её выразительную способность. Без нелинейности многослойные сети не могли бы решать задачи, где данные не разделяются линейно (например, задача XOR).
Кроме того, активационные функции выполняют следующие задачи:
- Нормализация выходного сигнала: ограничивают значения выходов нейронов в определённом диапазоне (например, от 0 до 1 или от -1 до 1), что стабилизирует обучение.
- Градиентный спуск: обеспечивают дифференцируемость (или кусочно-дифференцируемость) для возможности обратного распространения ошибки.
- Регуляризация: некоторые функции (например, ReLU и его варианты) обладают свойствами, которые помогают бороться с переобучением.
Классификация активационных функций
Активационные функции можно разделить на несколько основных типов в зависимости от их математических свойств и области применения.
Линейные функции
Линейная (или тождественная) функция: \( f(x) = x \). Она не вносит нелинейности и используется в выходном слое для задач регрессии, где требуется предсказание непрерывной величины. В скрытых слоях линейные функции практически не применяются, так как лишают сеть способности к обучению сложным зависимостям.
Ступенчатые (пороговые) функции
Классическая ступенчатая функция (функция Хевисайда): \( f(x) = 1 \) при \( x \ge 0 \), иначе \( 0 \). Она использовалась в первых моделях нейронов (перцептрон Розенблатта). Недостаток — недифференцируемость, что делает её непригодной для обучения с помощью градиентного спуска. В современных сетях практически не применяется.
Сигмоидальные функции
Сигмоида (логистическая функция): \( f(x) = \frac{1}{1 + e^{-x}} \). Принимает значения в интервале (0, 1). Исторически была одной из самых популярных, но имеет серьёзные недостатки: проблема «исчезающего градиента» (насыщение на больших положительных и отрицательных значениях, где градиент близок к нулю), что замедляет обучение глубоких сетей. Также выход не центрирован относительно нуля, что может приводить к нестабильности градиентов.
Гиперболический тангенс (tanh): \( f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \). Принимает значения в интервале (-1, 1). В отличие от сигмоиды, выход центрирован относительно нуля, что улучшает сходимость. Однако проблема исчезающего градиента сохраняется.
Функции с выпрямлением (ReLU и её варианты)
ReLU (Rectified Linear Unit, выпрямленный линейный блок): \( f(x) = \max(0, x) \). Принимает значение 0 для отрицательных \( x \) и линейно растёт для положительных. Является стандартной активационной функцией для скрытых слоёв глубоких нейронных сетей с середины 2010-х годов. Преимущества: простота вычисления, отсутствие насыщения для положительных значений, что решает проблему исчезающего градиента. Недостатки: «умирающий ReLU» — нейроны могут навсегда перестать активироваться (выход всегда 0) при попадании в область отрицательных значений, что приводит к необратимой потере нейронов.
Варианты ReLU, направленные на решение проблемы «умирающего ReLU»:
- Leaky ReLU: \( f(x) = \max(\alpha x, x) \), где \( \alpha \) — малая константа (обычно 0.01). Для отрицательных значений функция имеет небольшой ненулевой наклон.
- Parametric ReLU (PReLU): аналогична Leaky ReLU, но параметр \( \alpha \) обучается в процессе обучения.
- ELU (Exponential Linear Unit): \( f(x) = x \) при \( x \ge 0 \), иначе \( \alpha (e^x - 1) \). Имеет плавное насыщение для отрицательных значений, что улучшает устойчивость.
- Swish / SiLU (Sigmoid Linear Unit): \( f(x) = x \cdot \sigma(x) \), где \( \sigma(x) \) — сигмоида. Предложена Google в 2017 году. Показывает результаты, сравнимые или превосходящие ReLU, но требует больше вычислений.
Функции для вероятностных выходов
Softmax: не является функцией активации для отдельного нейрона, а применяется к вектору выходов (обычно в последнем слое для многоклассовой классификации). Преобразует вектор \( z \) в вектор вероятностей, где каждый элемент \( p_i = \frac{e^{z_i}}{\sum_{j} e^{z_j}} \). Сумма всех выходов равна 1, что позволяет интерпретировать их как вероятности принадлежности к классам.
Softplus: \( f(x) = \ln(1 + e^x) \). Гладкая аппроксимация ReLU, используется в некоторых вероятностных моделях и вариационных автоэнкодерах.
Выбор активационной функции
Выбор активационной функции зависит от задачи и архитектуры сети:
- Скрытые слои глубоких сетей: чаще всего используется ReLU или его варианты (Leaky ReLU, PReLU, ELU) из-за высокой скорости обучения и отсутствия исчезающего градиента.
- Выходной слой для регрессии: линейная функция (тождественная).
- Выходной слой для бинарной классификации: сигмоида (логистическая функция), дающая вероятность принадлежности к одному из двух классов.
- Выходной слой для многоклассовой классификации: Softmax.
- Рекуррентные нейронные сети (RNN): часто используются tanh или сигмоида, хотя в современных архитектурах (LSTM, GRU) применяются специализированные вентильные механизмы.
- Свёрточные нейронные сети (CNN): стандарт — ReLU.
История развития
Первые модели нейронов (Мак-Каллок и Питтс, 1943) использовали ступенчатую функцию. В 1950-х годах Фрэнк Розенблатт применил её в перцептроне. В 1980-х годах, с появлением алгоритма обратного распространения ошибки, стали популярны сигмоида и tanh, так как они были дифференцируемы. Однако в 2000-х годах глубокие сети столкнулись с проблемой исчезающего градиента. В 2011 году группа исследователей (Glorot, Bordes, Bengio) предложила ReLU, которая быстро стала стандартом де-факто для глубокого обучения. В последующие годы появились многочисленные модификации (Leaky ReLU, ELU, Swish, GELU и другие), направленные на улучшение сходимости и устойчивости.
Интересные факты
- ReLU была впервые предложена в 1975 году в контексте биологических моделей, но не получила широкого распространения до 2011 года.
- Функция Swish была обнаружена автоматическим поиском архитектур нейронных сетей (AutoML) в Google Brain.
- В некоторых архитектурах (например, в генеративно-состязательных сетях, GAN) для скрытых слоёв могут использоваться функции, обеспечивающие более гладкие градиенты, такие как Leaky ReLU или ELU, чтобы избежать коллапса режимов.
- В биологических нейронных сетях активация нейрона не является строго пороговой или сигмоидальной — она имеет более сложную динамику, включая частоту импульсов и временные задержки.
Источники
- Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning. MIT Press.
- Glorot, X., Bordes, A., Bengio, Y. (2011). Deep Sparse Rectifier Neural Networks. Proceedings of the 14th International Conference on Artificial Intelligence and Statistics (AISTATS).
- Ramachandran, P., Zoph, B., Le, Q. V. (2017). Searching for Activation Functions. arXiv preprint arXiv:1710.05941.
- Nair, V., Hinton, G. E. (2010). Rectified Linear Units Improve Restricted Boltzmann Machines. Proceedings of the 27th International Conference on Machine Learning (ICML).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →