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

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

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

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

Здесь отчётливо видно главное преимущество 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 выборки:

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

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