Transformers without Normalization __Jiachen Zhu, Xinlei Chen, Kaiming He, Yann LeCun, Zhuang Liu__ Статья: https://arxiv.org/abs/2503.10622 Сайт: https://jiachenzhu.github.io/DyT/ Код: https://github.com/jiachenzhu/DyT Интересная работа от интересных авторов. В трансформерах можно заменить слои нормализации на поэлементный гиперболический тангенс, Dynamic Tanh (DyT), DyT(x)=tanh(αx), где параметр α обучаемый, — и перформанс не ниже, без всякого тюнинга гиперпараметров. Это интересный заход. Когда в 2015 появилась одна из первых нормализаций, BatchNorm (BN), она много чего улучшила. Работала она в итоге, кажется, не таким образом, как задумывали, но работала хорошо. После появились другие варианты нормализации, и сейчас в трансформерах доминирует LayerNorm (LN) и RMSNorm. Все они так или иначе нормализуют то, что прилетает на вход, то ли защищая от внутреннего distribution shift, насыщения активаций и т.п. (но это не точно, как показали работы про BN типа https://arxiv.org/abs/1805.11604), то ли сглаживая fitness landscape и делая оптимизацию проще, то ли ещё как. Главное, на практике работают — качество выше, сходимость лучше, глубокие архитектуры обучаются лучше. Внутри нормализации обычно устроены так, что вычитают среднее, делят на дисперсию (могут различаться по чему именно это всё считается или игнорировать что-то из этого, например, среднее), поверх этого реализуют обучаемые shift и scaling, чтобы если надо, можно было бы вернуть к исходному и реализовать identity transformation. Были заходы внести нормализацию внутрь функции активации, например SELU (https://arxiv.org/abs/1706.02515) имени Сеппа Хохрейтера, но как-то совсем в массы они не пошли вроде, там другие функции активации сейчас доминируют. __[Пользуясь случаем хочу сказать, что лаба Сеппа в Линце сейчас ищет 5 постдоков и 10 PhD исследователей, подробности тут ____https://www.jku.at/en/lit-artificial-intelligence-lab/career/deep-learning/____, тут количество позиций ниже почему-то, но он буквально вчера писал про 5 и 10.]__ Так вот, в текущей работе показывают, что скрипач не нужен и есть простая альтернатива нормализации, этот самый DyT. Хотя SELU показывал то же самое, мне кажется. Плюсы такого подхода в том, что не надо считать никакие статистики активаций по всему слою (а также возможно батчу), и не надо ничего хранить для инференса (что было нужно для оригинального BN). Авторы зашли с анализа поведения трансформеров с LN: ViT-B, wav2vec 2.0 Large Transformer, DiT-XL. Обнаружили линейную зависимость между входом и выходом для ранних слоёв и S-образные кривые для глубоких (но с широким линейным участком посередине). Это нелинейное преобразование выглядит сильно похоже на масштабированный tanh, поэтому и решили сделать DyT. Полная форма выгдялит так DyT(x) = γ ∗ tanh(αx) + β, где α, γ и β — обучаемые параметры. В общем, тянет на функцию активации, но в таком режиме в работе это не проверяли и другие функции активации заменить не пытались, только целиком замена LN слоёв. Проверили на всяком разном: ViT, MAE, DINO, DiT, LLaMA 7B, 13B, 34B, 70B (в ламе заменяли RMSNorm), wav2vec 2.0, HyenaDNA, Caduceus. Везде примерно так же по качеству (микро-чуть-чуть хуже, без изменений, чуть лучше). По времени инференса DyT лучше: почти в два раза на уровне слоя, но относительно слабо на уровне всей модели. В абляциях поубирали tanh, заменяли на identity, hardtanh, sigmoid — tanh лучше всех. Без обучаемой α тоже похуже. Посмотрели как ведёт себя α в процессе обучения, близко следует 1/std от активаций. После обучения есть сильная корреляция с 1/std входных активаций, и у более глубоких слоёв эти активации с большей дисперсией. Сравнили с другими методами, позволяющими обучать трансформеры без слоёв нормализации, Fixup, SkipInit, σReparam. На ViT и MAE лучшие цифры даёт DyT. Инициализация α не влияет сильно нигде кроме LLM, хотя меньшие значения ведут к более стабильному обучению. Для LLM игра со значениями помогает, они зависят от размера модели (в первую очередь model width) и типа блока, на который навешиваются (внимание или всё остальное).