Привет, Хабр, в этой статье я хочу представить новую функцию активации для нейронных сетей под названием Kazry, которая по результатам тестов обогнала SiLU. Сразу перейдем к делу.

Индустрия повсеместно использует активации типа SiLU из‑за их бесконечной дифференцируемости, но за это приходится платить высокую цену, в виде производной, которая глушит сигнал. Взглянем на график одной из самых популярных активаций — SiLU:

 На этом графике можно увидеть то, что функция приближается к линейной функции f(x) = x не сразу.
На этом графике можно увидеть то, что функция приближается к линейной функции f(x) = x не сразу.

А теперь взглянем на график её производной:

 Здесь можно увидеть главную слабость SiLU - урезание градиента. Из-за этого на старте обучения функция по правилу backpropagation урезает градиент, что может вызывать затухание сигнала в глубоких сетях и замедлять сходимость.
Здесь можно увидеть главную слабость SiLU — урезание градиента. Из‑за этого на старте обучения функция по правилу backpropagation урезает градиент, что может вызывать затухание сигнала в глубоких сетях и замедлять сходимость.

Моя активация решает эту проблему, имея в формуле две части: отрицательную и положительную. Это позволяет при неотрицательных x сразу пропускать сигнал без изменений.

f(x) = \begin{cases} x, & \text{} x \ge 0 \\ x \cdot e^x, & \text{} x < 0 \end{cases}
График Kazry в сравнении с SiLU.
График Kazry в сравнении с SiLU.

А теперь взглянем на производную Kazry.

Производная Kazry в сравнении с SiLU.
Производная Kazry в сравнении с SiLU.

Здесь отчётливо видно главное преимущество Kazry — более мощный пропуск сигнала в начале отрицательной части и сохранение сигнала без изменений в положительной части, что может ускорить сходимость глубоких сетей.

Но как известно, за любой прирост эффективности в одном месте приходится платить в другом. У Kazry тоже есть свои минусы:

Излом второй производной: Из‑за кусочно‑заданной структуры на стыке в нуле вторая производная имеет разрыв. Большинство современных оптимизаторов первого порядка (вроде AdamW или SGD) используют только первую производную, поэтому обучение не ломается. Однако в теории такой излом может усложнить ландшафт функции потерь для более чувствительных алгоритмов.

Скорость вычислений: Математически на отрицательной ветви Kazry требует меньше операций (1 экспонента и 1 умножение против 1 экспоненты, 1 сложения и 1 деления у SiLU). Однако на практике из‑за кусочной структуры в коде возникает логическое ветвление (например, через torch.where). Кроме того, SiLU опирается на сигмоиду, вычисление которой эффективно оптимизировано на уровне библиотек для GPU (CUDA). В итоге реальная скорость выполнения моей активации оказывается незначительно ниже.


Перейдем к тестам. Для проверки был взят датасет CIFAR-100 и две архитектуры: CNN и Transformer (с GLU‑модификациями активаций и NoPE‑кодированием позиций), имеющие конфигурацию из 10 слоев и скрытую размерность dim=64. Ссылки на код самой активации и скриптов обучения приведены в конце статьи.

KazGLU Transformer

SwiGLU Transformer

Kazry CNN

SiLU CNN

Top val loss

2.929

2.986

2.240

2.367

Top train loss

2.764

2.845

2.091

2.243

Final val loss

2.931

2.987

2.242

2.372

Final train loss

2.764

2.845

2.093

2.246

Top val loss reduction absolute

0.057

-

0.127

-

Top val loss reduction relative

1.9%

-

5.3%

-

Mean time (sec)

4.141

4.031

15.649

14.517

Mean time increasing absolute

0.110

-

1.132

-

Mean time increasing relative

2.7%

-

7.8%

-

Здесь наглядно видны результаты обучения с Kazry и SiLU. Kazry демонстрирует лучшую сходимость при сравнительно низком повышении длительности обучения. Взглянем на графики сходимости train выборки:

Kazry (и ее модификация KazGLU) показывает лучшую сходимость по сравнению с SiLU и SwiGLU на протяжении всего обучения.
Kazry (и ее модификация KazGLU) показывает лучшую сходимость по сравнению с SiLU и SwiGLU на протяжении всего обучения.

Рассмотрим график сходимости на validation выборке:

Здесь видно осцилляции на графике как у KazGLU, так и у SwiGLU, но у моего решения они выражены меньше.
Здесь видно осцилляции на графике как у KazGLU, так и у SwiGLU, но у моего решения они выражены меньше.

Подытоживая, можно сказать, что Kazry и её модификация KazGLU доказала свою эффективность: несмотря на выявленные изъяны, они продемонстрировали лучшие результаты по сравнению с SiLU и SwiGLU. Буду рад конструктивной критике и предложениям в комментариях!

Ссылка на логи и скрипты обучения: https://github.com/artxelbrus/Kazry_trainers_and_logs
Ссылка на репозиторий с моей библиотекой: https://github.com/artxelbrus/Kazry

Комментарии (0)