Your Transformer is Secretly Linear
Мою новую статью приняли на ACL
🎉. Мы обнаружили, что большинство слоёв языковых моделей линейны на 99%! Это значит, что из любого слоя LLM можно выкинуть этэншн, нормализацию и даже feed-forward с активацией, оставив лишь один
nn.Linear()
, а модель будет работать, будто бы ничего не поменялось!
Такая неадекватная линейность наблюдается во всех трансформерах-декодерах (GPT, Llama, Mistral, и тд.). Мы предполагаем, что это связано с
feature triggering режимом, то есть нелинейность "вспыхивает" на очень небольшом количестве важных токенов (что-то похожее было в статье
Deja Vu). Поэтому совсем уж много слоёв таким образом заменить нельзя, нелинейность хоть сама по себе и крошечная, но её влияние очень быстро накапливается.
Ещё из интересных наблюдений — по мере претрейна нелинейность растёт, а во время файнтюнинга (или RLHF) она всегда падает. Исходя из этого, мы придумали регуляризацию, которая немножко усиливает нелинейность и бустит метрики на претрейне.
P.S. Вместе с кодом для оценки линейности слоёв трансформеров мы выкладываем и код к прошлой нашей статье про анизотропию и внутреннюю размерность.
Статья,
GitHub,
хабр