Привет, Хабр, в этой статье я хочу представить новую функцию активации для нейронных сетей под названием 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