Линейность больших языковых моделей неожиданно позволяет заменить слои на одиночные линейные
Удивительная линейность языковых моделей: новые открытия в исследовании трансформеров
Линейность обычно ассоциируется с самыми простыми моделями, способными решать лишь базовые задачи, для которых зачастую даже машинное обучение не требуется. Поэтому принято считать, что нелинейность — это ключевой элемент сложных вычислений и преобразований в больших нейронных сетях, особенно в трансформерах.
На правой стороне изображён пример задачи, которую линейные модели решить не могут. Однако в недавнем исследовании обнаружилось, что для больших языковых моделей (LLM) декодеров это вовсе не так! Информация от слоя к слою практически не подвергается нелинейным преобразованиям, и каждый отдельный блок трансформера можно заменить одним линейным слоем без потери качества. Это открытие выглядит очень интригующим, и ниже приведены основные выводы из исследования.
Справа показан пример задачи, которую линейные модели не могут решить.
Было обнаружено, что для больших языковых моделей (LLM) это не так! Информация от слоя к слою практически не подвергается нелинейным преобразованиям, и каждый блок трансформера можно заменить всего лишь одним линейным слоем без потери качества! Это звучит интригующе, не правда ли? Далее я коротко изложу наши основные выводы.
Как можно оценить линейность отдельного слоя модели?
Для оценки линейности отдельных слоев модели был использован метод, напоминающий обобщённую Procrustes Similarity. Суть метода проста: два набора векторов (выходы двух последовательных слоев) центрируются и нормализуются. Затем находится такое линейное преобразование, которое минимизирует среднеквадратичную ошибку (MSE) между этими наборами. Вычитая среднюю ошибку из 1, получают коэффициент линейности (где 1 означает наивысшую линейность, а 0 — её полное отсутствие).
Линейность всех LLM близка к 100%, за исключением первого и последнего слоев, а также самой маленькой модели Pythia-70M.
Исследования показали, что линейность моделей постепенно снижается в ходе их первоначального обучения, что свидетельствует о возрастании их нелинейных свойств. Однако во время дообучения на конкретных задачах линейность всегда увеличивается, независимо от типа задачи или модели.
Что происходит с линейностью во время предобучения и дообучения?
рост линейности, вероятно, связан с уменьшением обобщающей способности, что приводит к катастрофическому забыванию, когда модель постепенно утрачивает старые знания, не пригодившиеся во время дообучения.
Попытки контролировать линейность с помощью регуляризации не увенчались успехом, пока случайная ошибка в знаке регуляризационного лосса не привела к уменьшению линейности. Такая регуляризация, которая "стягивала" эмбеддинги последовательных слоев с помощью косинуса, улучшила модель, сделав её слои более нелинейными и увеличив точность выполнения задач.
Регуляризация, усиливающая нелинейность
Раз линейность — это недостаток, возможно, её можно контролировать с помощью регуляризации? Была попытка изменить степень линейности архитектуры Mistral во время предобучения, используя множество вариантов, но ни один из них не работал – языковая модель, казалось, стремилась оставаться максимально линейной.
Однако однажды мы случайно перепутали знак в регуляризационном лоссе, и всё заработало! Уменьшение линейности привел к лосс, который «стягивал» эмбеддинги последовательных слоёв друг к другу с помощью косинуса, то есть нам помогла случайная ошибка.
На первый взгляд, такая регуляризация должна была бы заставить модель «ничего не делать» на каждом отдельном слое, однако языковая модель отреагировала совершенно противоположным образом. С ростом нелинейных свойств её слоев улучшились метрики, модель стала лучше решать задачи, генерировать более качественный текст, а её эмбеддинги стали более экспрессивными (то есть полезнее для downstream задач).
Линейный прунинг
Эксперимент с линейным прунингом показал, что можно заменить около 15% слоев трансформера одним линейным слоем без значительного ухудшения качества. Однако дальнейшая замена приводит к накоплению ошибок и снижению производительности.
Заключение
В заключение, обнаруженный эффект сильной линейности в одной из самых мощных архитектур глубокого обучения оказался неожиданным. Это, возможно, связано с режимом триггеринга фичей, когда нелинейные свойства активируются очень редко, а большинство входных токенов обрабатываются в почти линейном режиме. Подобное явление уже обсуждалось в исследовании Deja Vu, где изучались "мёртвые" нейроны в языковых моделях