The Super Weight in Large Language Models
Mengxia Yu, De Wang, Qi Shan, Colorado Reed, Alvin Wan
Статья:
https://arxiv.org/abs/2411.07191
Код:
https://github.com/mengxiayu/LLMSuperWeight
Очень прикольная работа про то, что внутри LLM можно найти один единственный вес, зануляя который мы обрушиваем качество работы модели в пропасть. Такие параметры авторы называют супер весами (super weights) и предлагают метод их нахождения за один forward pass.
Внутри обученных LLM находится группа весов-аутлаеров с большой магнитудой, они могут составлять порядка 0.01% от всех весов модели, что в случае миллиардных моделей всё равно сотни тысяч. Это было известно ранее. В текущей работе показывают, что внутри этой группы находится один единственный вес (тот самый
super weight,
SW), не обязательно самый большой, важность которого превышает суммарную важность тысяч других аутлаеров. Он необходим для качества, без него LLM не может генерить нормальный текст. Перплексия вырастает на несколько порядков, а точность на zero-shot задачах падает до рандома.
Ранее (
https://arxiv.org/abs/2402.17762) были найдены супер-активации, критичные для качества. Они существуют в различных слоях, имеют константную магнитуду и всегда обнаруживаются в одинаковой позиции несмотря на вход. Текущая работа находит, что канал активации совпадает с оным для супер веса и сперва активация обнаруживается сразу после супер веса. Прунинг этого супер веса значительно уменьшает активацию, так что вероятно активация вызвана им, а не просто скоррелирована. Такие активации называются супер активациями (
super activations,
SA).
Предыдущая работа объясняла супер активации через bias terms, но не объясняла как они получаются и почему на одних и тех же местах. Сейчас авторы эмпирически нашли, что до down проекции (down_proj) произведение Адамара (Hadamard product) gate и up проекций (gate_proj, up_proj) создаёт относительно большую активацию. Супер вес далее усиливает её ещё и даёт супер активацию.
Напомню, что MLP блок в Ламе выглядит так:
out = down_proj( act_fn(gate_proj(input)) x up_proj(input) )
SW можно найти, анализируя спайки в распределениях входов и выходов down_proj. Для этого достаточен прямой проход с одним промптом. Авторы нашли супер веса для Llama (7B,13B,30B), Llama 2 (7B,13B), Mistral-7B, OLMo (1B,7B), Phi-3.
Провели эксперименты по обнулению SW, в том числе с восстановлением SA до исходного значения, чтобы проверить влияние SW на другие активации. Это восстанавливает 42% потери, то есть влияние SW на качество выше, чем просто через SA.
По анализу 500 различных промптов из Lambaba validation set видно, что при убирании SW вероятности стоп-слов сильно возрастают (а обычные слова соответственно занижаются). Для “the” это 2×, для “.” -- 5×, и для “,” -- 10×. То есть наличие SW как бы подавляет стоп-слова и позволяет генерировать осмысленный текст.
Другой интересный эксперимент скейлит супер веса с коэффициентами от 0 до 3 (где оригинальный режим работы соответствует значению 1) и оказывается, что при увеличении SW качество модели ещё немного возрастает. Это забавный результат.
Имея это знание, можно предложить специальный метод квантования:
Super-outlier aware quantization. Стандартные механизмы квантизации могут быть недостаточно хорошими, так как аутлаеры искажают распределение, влияя на размер шага и увеличивая ошибки квантования. Здесь под super outliers подразумеваются и SW, и SA. Предложенные методы восстанавливают SW и SA после квантований с клиппингом и заменами на медианное значение. Это всё работает лучше дефолтных методов, главный вывод -- надо защищать супер веса. В статье есть подробный разбор экспериментов, кому интересно поглубже. Также новый метод меньше теряет в качестве с увеличением размера блока.
Прикольный результат в общем. Это всё несколько перекликается с темой про лотерейные билеты (
https://t.center/gonzo_ML/21), там внутри большой сети обнаруживалась сильно разреженная подсеть, обучая которую можно было достигать качества исходной сети (или даже выше). Интересно, входят ли супер-веса в лотерейный билет? Наверняка.