В современном мире глубокого обучения модели становятся всё больше, но их использование на мобильных устройствах ограничено вычислительными мощностями. Янник Килхер (Yannic Kilcher) разбирает научную работу «Movement Pruning: Adaptive Sparsity by Fine-Tuning», подготовленную исследователями из Hugging Face и Корнеллского университета. В видео обсуждается революционный подход к сжатию нейросетей: вместо того чтобы удалять связи по их абсолютному значению, авторы предлагают смотреть на то, как веса «движутся» в процессе дообучения (fine-tuning).
✂️ Проблема избыточности: зачем нужно прунинг 0:55
Прунинг (pruning) — это процесс удаления весов (связей) в нейронной сети для уменьшения её размера без значительной потери точности. Это критически важно для развёртывания моделей на смартфонах и других устройствах с ограниченной памятью .
Традиционный метод, называемый «прунингом по амплитуде» (magnitude pruning), работает следующим образом:
- Сеть обучается до высокой точности.
- Исследователь смотрит на распределение весов.
- Веса с малым абсолютным значением (близкие к нулю) считаются шумом и удаляются.
- Оставшаяся сеть дообучается, и процесс повторяется итеративно .
По словам Янника Килхера, логика здесь проста: веса с большой амплитудой вносят основной вклад в сигнал, а маленькие веса не важны . Однако эта логика дает сбой, когда мы переходим к парадигме трансферного обучения (transfer learning), которая доминирует в современной обработке естественного языка (NLP) .
🔄 Ограничения трансферного обучения 4:38
В трансферном обучении мы берем огромную предобученную модель (например, BERT) и адаптируем её под конкретную задачу. Янник Килхер приводит аналогию с классификатором кошек и собак:
- Сначала модель обучается на гигантском датасете отличать кошек от собак.
- Затем веса переносятся в новую модель, которую нужно научить определять, больно ли животное.
- Для второй задачи данных мало, поэтому мы полагаемся на признаки, которые модель уже выучила на первой задаче .
Проблема в том, что при обычном прунинге по амплитуде мы удаляем веса, основываясь на их важности для первой (общей) задачи. Но вес, который был важен для того, чтобы отличить кошку от собаки, может быть совершенно бесполезен для диагностики болезни. Более того, при fine-tuning веса смещаются очень незначительно относительно своих исходных значений . Таким образом, прунинг по амплитуде в основном сохраняет структуру предобученной модели, игнорируя специфику новой задачи.
📈 Movement Pruning: прунинг по движению 9:19
Авторы статьи — Виктор Сан (Victor Sanh), Томас Вольф (Thomas Wolf) и Александр М. Раш (Alexander M. Rush) — предлагают альтернативу: «Movement Pruning» (прунинг по движению) .
Суть метода заключается в анализе динамики весов во время fine-tuning:
- Если в процессе дообучения вес стремится к нулю, он считается неважным для новой задачи и удаляется .
- Если вес удаляется от нуля (становится больше по модулю), он признается важным.
- Это позволяет модели быть адаптивной к целевой задаче, а не просто копировать важность из предобученного состояния .
Технически это реализуется через введение матрицы масок $M$, которая определяет, активен вес или нет. Важность веса ($s$) теперь определяется не его значением $W$, а градиентом функции потерь по отношению к этому весу .
🛠️ Математический аппарат и методы 12:48
Янник Килхер объясняет, что Movement Pruning — это метод первого порядка (использует градиенты), в то время как прунинг по амплитуде — метод нулевого порядка (использует только значения весов) .
Ключевые технические аспекты метода:
- Straight-Through Estimator (STE): Используется для того, чтобы градиенты могли «протекать» через бинарную маску во время обратного распространения ошибки, даже если в прямом проходе некоторые веса были обнулены .
- Soft Movement Pruning: Улучшенная версия метода, где вместо жесткого отсечения топ-V процентов весов используется регуляризатор (лямбда), поощряющий разреженность матрицы важности .
- Sparsity Scheduling: В процессе обучения разреженность модели увеличивается постепенно по определенному графику, что является стандартным инженерным приемом для таких задач .
По мнению Янника Килхера, это самокорректирующийся механизм, который менее зависим от начальной динамики обучения, чем может показаться на первый взгляд .
📊 Результаты экспериментов и «V-образная» кривая 21:41
Метод тестировался на классических NLP-задачах: SQuAD (ответы на вопросы), MNLI (логический вывод) и QQP (определение дубликатов вопросов) .
Результаты показывают четкую закономерность:
- В режиме низкой разреженности (когда остается много весов) прунинг по амплитуде всё еще конкурентоспособен и иногда выигрывает .
- В режиме экстремальной разреженности (остается всего 3–10% весов) Movement Pruning значительно превосходит старые методы .
- Дистилляция знаний (Distillation): Если использовать «учителя» (полную модель) для обучения «ученика» (сжатой модели), результаты Movement Pruning становятся еще более впечатляющими .
Анализ распределения оставшихся весов показал интересную «V-образную» форму . Movement Pruning часто сохраняет веса, которые имеют малую амплитуду, но активно «двигались» во время обучения, и удаляет крупные веса, которые были важны для общей языковой модели, но не нужны для конкретной задачи .
🏗️ Слой за слоем: где происходит сжатие? 28:16
Янник Килхер отмечает, что Movement Pruning распределяет разреженность в модели BERT неравномерно.
- Нижние слои: Метод сохраняет больше весов в начальных слоях. Янник предполагает, что там кодируются базовые признаки языка, необходимые для любой задачи .
- Верхние слои: Метод агрессивно удаляет веса в последних слоях. Это объясняется тем, что специфическая информация из задачи предобучения (предикция пропущенных слов) в финальных слоях часто оказывается избыточной для таких задач, как SQuAD .
В итоге авторам удалось получить модель, которая в разы меньше оригинала, но сохраняет до 95% точности на сложных лингвистических тестах .