tgoop.com/building_singularity/90
Last Update:
ShortGPT: неоптмальность LLM’ок
Ещё одна статья, демонстрирующая ту же идею (как и в Mixture-of-Depths): в LLM не все параметры одинаково ценны, их количество используется неоптмильно.
В работе ShortGPT: Layers in Large Language Models are More Redundant Than You Expect показали очень простой метод прунинга (удаления параметров модели), который приводит к пропорциональному ускорению модели и очень слабо просаживает качество (на MMLU бенчмарке).
Метод такой:
1️⃣ Прогоняем модель на калибровочном датасете и для каждого трансформер блока (self-attn + ffn) подсчитываем его важность (Block Influence)
2️⃣ Block Influence - косинусное расстояние между вектором токена на входе и им же на выходе, усредненное по всей входной последовательности (рисунок 3)
3️⃣ Сортируем блоки по их важности
4️⃣ Удаляем блоки целиком в порядке увеличения важности
Что получается:
🔹 выкинули 25% от Llama2-13B и просели в качестве на 2.7% на MMLU (рисунок 2)
🔹 прунинг просто выкидыванием блоков (а не хитрым выкидыванием параметров внутри блока) дает пропорциональное ускорение модели сразу
🔹слои в начале LLM важнее, чем более глубокие (рисунок 1)
🔹 сравнились с другими методами прунинга (без последующего дообучения - это на future work) и победили их; попробовали другую метрику важности блока, основанную на изменении магнитуды вектора, их Block Influence лучше
🔹написали, что пробовали ещё пару бенчмарков и там качество просаживалось сильно
Интересно ещё
🔸если дообучить модель 10B (аналогичный размер, как у запруненной) с нуля, будет ли она хуже запруненной? а если запруненную дообучить?
🔸почему такие бесполезные слои присутствуют? надо дольше учить модели? или способ обучения проблемный?
Когда нибудь наука дип лернинга найдет ответы и теоретические обоснования на эти вопросы, а пока мы просто будем обучать модельки и смотреть, что получается
@building_singularity