Movement Pruning: как адаптивное сжатие через fine-tuning делает BERT компактнее

Yannic Kilcher 5,2 тыс. 30 мин 4 мин 04.06.2020
Главное

В современном мире глубокого обучения модели становятся всё больше, но их использование на мобильных устройствах ограничено вычислительными мощностями. Янник Килхер (Yannic Kilcher) разбирает научную работу «Movement Pruning: Adaptive Sparsity by Fine-Tuning», подготовленную исследователями из Hugging Face и Корнеллского университета. В видео обсуждается революционный подход к сжатию нейросетей: вместо того чтобы удалять связи по их абсолютному значению, авторы предлагают смотреть на то, как веса «движутся» в процессе дообучения (fine-tuning).

✂️ Проблема избыточности: зачем нужно прунинг 0:55

Прунинг (pruning) — это процесс удаления весов (связей) в нейронной сети для уменьшения её размера без значительной потери точности. Это критически важно для развёртывания моделей на смартфонах и других устройствах с ограниченной памятью .

Традиционный метод, называемый «прунингом по амплитуде» (magnitude pruning), работает следующим образом:

По словам Янника Килхера, логика здесь проста: веса с большой амплитудой вносят основной вклад в сигнал, а маленькие веса не важны . Однако эта логика дает сбой, когда мы переходим к парадигме трансферного обучения (transfer learning), которая доминирует в современной обработке естественного языка (NLP) .

🔄 Ограничения трансферного обучения 4:38

В трансферном обучении мы берем огромную предобученную модель (например, BERT) и адаптируем её под конкретную задачу. Янник Килхер приводит аналогию с классификатором кошек и собак:

  1. Сначала модель обучается на гигантском датасете отличать кошек от собак.
  2. Затем веса переносятся в новую модель, которую нужно научить определять, больно ли животное.
  3. Для второй задачи данных мало, поэтому мы полагаемся на признаки, которые модель уже выучила на первой задаче .

Проблема в том, что при обычном прунинге по амплитуде мы удаляем веса, основываясь на их важности для первой (общей) задачи. Но вес, который был важен для того, чтобы отличить кошку от собаки, может быть совершенно бесполезен для диагностики болезни. Более того, при fine-tuning веса смещаются очень незначительно относительно своих исходных значений . Таким образом, прунинг по амплитуде в основном сохраняет структуру предобученной модели, игнорируя специфику новой задачи.

📈 Movement Pruning: прунинг по движению 9:19

Авторы статьи — Виктор Сан (Victor Sanh), Томас Вольф (Thomas Wolf) и Александр М. Раш (Alexander M. Rush) — предлагают альтернативу: «Movement Pruning» (прунинг по движению) .

Суть метода заключается в анализе динамики весов во время fine-tuning:

Технически это реализуется через введение матрицы масок $M$, которая определяет, активен вес или нет. Важность веса ($s$) теперь определяется не его значением $W$, а градиентом функции потерь по отношению к этому весу .

🛠️ Математический аппарат и методы 12:48

Янник Килхер объясняет, что Movement Pruning — это метод первого порядка (использует градиенты), в то время как прунинг по амплитуде — метод нулевого порядка (использует только значения весов) .

Ключевые технические аспекты метода:

По мнению Янника Килхера, это самокорректирующийся механизм, который менее зависим от начальной динамики обучения, чем может показаться на первый взгляд .

📊 Результаты экспериментов и «V-образная» кривая 21:41

Метод тестировался на классических NLP-задачах: SQuAD (ответы на вопросы), MNLI (логический вывод) и QQP (определение дубликатов вопросов) .

Результаты показывают четкую закономерность:

  1. В режиме низкой разреженности (когда остается много весов) прунинг по амплитуде всё еще конкурентоспособен и иногда выигрывает .
  2. В режиме экстремальной разреженности (остается всего 3–10% весов) Movement Pruning значительно превосходит старые методы .
  3. Дистилляция знаний (Distillation): Если использовать «учителя» (полную модель) для обучения «ученика» (сжатой модели), результаты Movement Pruning становятся еще более впечатляющими .

Анализ распределения оставшихся весов показал интересную «V-образную» форму . Movement Pruning часто сохраняет веса, которые имеют малую амплитуду, но активно «двигались» во время обучения, и удаляет крупные веса, которые были важны для общей языковой модели, но не нужны для конкретной задачи .

🏗️ Слой за слоем: где происходит сжатие? 28:16

Янник Килхер отмечает, что Movement Pruning распределяет разреженность в модели BERT неравномерно.

В итоге авторам удалось получить модель, которая в разы меньше оригинала, но сохраняет до 95% точности на сложных лингвистических тестах .

💬 Цитаты

«Вы не должны делать прунинг по амплитуде веса; вы должны делать его по тому, насколько веса движутся во время трансферного обучения.»

Янник Килхер 00:13

«В режиме экстремальной разреженности прунинг по движению опережает прунинг по амплитуде на огромную величину.»

Янник Килхер 24:07
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Прунинг (Pruning)
Метод сокращения количества параметров (весов) в нейронной сети для повышения её эффективности.
Fine-tuning
Процесс дообучения предобученной модели на специфическом наборе данных для конкретной задачи.
Разреженность (Sparsity)
Характеристика модели, в которой большая часть весов равна нулю.
Straight-Through Estimator (STE)
Метод оценки градиента для функций, которые имеют нулевой градиент почти везде (например, бинарные маски).
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект Movement Pruning BERT Янник Килхер Hugging Face Transfer Learning