Прореживание нейронов

Материал из MachineLearning.

Версия от 00:48, 17 июля 2026; Daria Makeeva (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Daria Makeeva 03:46, 17 июля 2026 (MSD)


Содержание

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

Зачем нужно прореживание

Современные нейронные сети, особенно глубокие свёрточные сети и большие языковые модели, часто содержат значительно больше параметров, чем необходимо для решения конкретной задачи, — эта избыточность отражается в том, что многие веса после обучения оказываются близки к нулю или вносят пренебрежимо малый вклад в итоговый результат. Прореживание использует эту избыточность для практических целей: уменьшения объёма памяти, необходимого для хранения модели, ускорения вычислений при выводе за счёт пропуска операций с удалёнными параметрами, а также снижения энергопотребления, что особенно важно при развёртывании моделей на мобильных и встраиваемых устройствах с ограниченными вычислительными ресурсами[1].

Отличие от регуляризации

Прореживание принципиально отличается от регуляризации: регуляризация штрафует величину весов через дополнительный член в функции потерь (например, L_1- или L_2-регуляризацию), подталкивая веса к малым значениям в процессе обучения, но при этом все параметры формально остаются в модели и участвуют в вычислениях. Прореживание же физически удаляет параметры из модели после того, как решено, что они не важны, — соответствующие веса обнуляются и в дальнейшем не хранятся и не вычисляются (при неструктурированном прореживании — как разрежённые матрицы, при структурированном — путём буквального сокращения архитектуры). На практике регуляризация часто применяется как подготовительный шаг перед прореживанием: она способствует тому, что часть весов после обучения естественным образом становится малой, что облегчает их последующее безопасное удаление[1].

Классификация методов прореживания

Неструктурированное и структурированное прореживание

Неструктурированное прореживание (unstructured pruning) удаляет отдельные веса независимо друг от друга, без учёта их положения в архитектуре, в результате чего получается разрежённая матрица весов произвольной формы. Такой подход обычно позволяет достичь наибольшей степени сжатия при заданном уровне точности, но требует специализированной аппаратной или программной поддержки разрежённых вычислений для практического ускорения, поскольку стандартные операции с плотными матрицами не выигрывают от случайно расположенных нулей[1].

Структурированное прореживание (structured pruning) удаляет целые структурные единицы — нейроны, каналы свёрточных фильтров, целые фильтры или слои — так, что оставшаяся сеть представляет собой плотную сеть меньшего размера. Такой подход даёт менее агрессивное сжатие при заданном уровне точности по сравнению с неструктурированным прореживанием, но обеспечивает реальное ускорение вычислений на стандартном оборудовании (CPU, GPU) без необходимости в специализированных библиотеках разрежённой линейной алгебры[1]. Одним из распространённых критериев отбора фильтров свёрточного слоя для удаления при структурированном прореживании является норма весов, соответствующих данному фильтру: для i-го фильтра с весами w_i вычисляется L_1-норма s_i = \sum_{k} |w_{i,k}|, и фильтры с наименьшими значениями s_i считаются вносящими наименьший вклад в выходные карты признаков и удаляются целиком вместе со связанными с ними каналами следующего слоя; Хао Ли и соавторы показали, что такой простой критерий позволяет сократить вычислительные затраты сети VGG-16 до 34%, а сети ResNet-110 — до 38% на CIFAR-10 при восстановлении точности, близкой к исходной, после дообучения[1].

Прореживание по величине весов

Прореживание по величине (magnitude-based pruning) — простейший и один из самых распространённых критериев отбора параметров для удаления при неструктурированном прореживании: веса ранжируются по абсолютному значению, и параметры с наименьшей величиной (предполагаемые как вносящие наименьший вклад в выход сети) удаляются первыми. Формально, если веса слоя упорядочены по возрастанию модуля, удаляются те w_i, для которых |w_i| < \theta, где порог \theta выбирается так, чтобы достичь целевого уровня разрежённости. Такой критерий не требует вычисления производных функции потерь и легко масштабируется на очень большие сети, включая современные языковые модели[1].

Более ранним и теоретически обоснованным подходом к отбору параметров является критерий на основе влияния удаления веса на функцию потерь, вычисляемого через информацию о кривизне (вторых производных) функции потерь, — этот подход впервые был предложен в методе Optimal Brain Damage и подробно рассмотрен в статье Оптимальное прореживание нейронных сетей.

Однократное и итеративное прореживание

Однократное прореживание (one-shot pruning) удаляет сразу все избыточные параметры за один проход, после чего модель, при необходимости, дополнительно обучается (fine-tuning) для восстановления точности. Итеративное прореживание (iterative pruning) вместо этого чередует небольшие шаги удаления параметров с последующим дообучением сети на каждом шаге, постепенно увеличивая степень разрежённости; такой подход, хотя и требует значительно больше вычислительных ресурсов на этапе сжатия, как правило позволяет достичь более высокой итоговой разрежённости при том же уровне сохранённой точности, поскольку на каждом шаге сеть успевает скомпенсировать потерю удалённых параметров изменением остальных весов[1].

Гипотеза о лотерейном билете

В 2019 году Джонатан Франкл и Майкл Карбин предложили гипотезу о лотерейном билете (Lottery Ticket Hypothesis) — утверждение о том, что плотная, случайно инициализированная сеть прямого распространения содержит внутри себя разрежённую подсеть («выигрышный билет», winning ticket), которая при обучении в изоляции — то есть с той же самой начальной инициализацией параметров, но без остальной части сети — достигает точности, сравнимой с точностью исходной полной сети, за сопоставимое число итераций обучения[1].

Ключевой элемент гипотезы — не просто существование разрежённой подсети, способной решать задачу (это следует уже из результатов прореживания по величине весов), а то, что такая подсеть обучается эффективно именно при её исходной, «удачной» случайной инициализации; при повторной случайной инициализации той же по структуре разрежённой подсети её обучение оказывается заметно хуже. Авторы предложили алгоритм итеративного поиска выигрышного билета (iterative magnitude pruning): сеть обучается, часть весов с наименьшей величиной обнуляется навсегда, а оставшиеся веса возвращаются к своим исходным (до обучения) значениям, после чего процедура повторяется — этот цикл продолжается до достижения желаемой степени разрежённости[1]. Найденные таким способом выигрышные билеты составляли менее 10–20% от размера исходных полносвязных и свёрточных сетей на задачах MNIST и CIFAR-10 и при этом обучались не хуже, а иногда быстрее и точнее, чем исходная сеть[1].

История

Одной из первых теоретически обоснованных методик прореживания стал метод Optimal Brain Damage, предложенный Яном Лекуном, Джоном Денкером и Сарой Соллой в 1990 году: параметры удалялись на основе оценки влияния их удаления на функцию потерь через вторые производные (диагональ гессиана), что позволяло удалять веса с минимальным ожидаемым ростом ошибки, а не просто с наименьшей абсолютной величиной; подробный разбор этого метода приведён в статье Оптимальное прореживание нейронных сетей[1].

С распространением глубокого обучения и ростом размеров сетей в середине 2010-х годов интерес к прореживанию возродился в практическом ключе: Сон Хан, Джефф Пул, Джон Тран и Уильям Далли показали, что сравнительно простое итеративное прореживание по величине весов с последующим дообучением позволяет сократить число параметров сети AlexNet в 9 раз, а сети VGG-16 — в 13 раз без потери точности на задаче классификации изображений ImageNet, что сделало прореживание практически привлекательным инструментом сжатия моделей для развёртывания на устройствах с ограниченными ресурсами[1]. В 2019 году появление гипотезы о лотерейном билете вновь сместило исследовательский фокус — от прореживания как чисто практического инструмента сжатия к вопросу о том, что прореживание раскрывает о природе обучаемости самих нейронных сетей[1].

Практическое применение

Прореживание широко применяется при развёртывании нейронных сетей на мобильных и встраиваемых устройствах, где ограничены объём памяти, вычислительная мощность и энергопотребление: сжатые модели требуют меньше памяти для хранения и выполняют вывод быстрее, что критично для приложений реального времени на смартфонах, микроконтроллерах и специализированных ускорителях. С распространением больших языковых моделей (large language models) на базе архитектуры трансформер прореживание приобрело дополнительную практическую значимость как способ ускорения инференса моделей с десятками и сотнями миллиардов параметров. Элиас Франтар и Дан Алистарх предложили метод SparseGPT, позволяющий выполнять однократное прореживание моделей семейства GPT (включая модели с 175 миллиардами параметров, такие как OPT-175B) до 50–60% разрежённости без дообучения и с минимальной потерей качества, используя всего несколько часов вычислений на одном графическом процессоре[1]. Позднее Минцзе Сунь, Чжуан Лю, Анна Бэйр и Дж. Зико Колтер предложили ещё более простой метод Wanda (Pruning by Weights and Activations), который отбирает веса для удаления, комбинируя их величину с величиной соответствующих входных активаций, что не требует ни дообучения, ни решения дорогостоящей задачи восстановления весов на основе информации второго порядка, и при этом даёт качество, конкурентное с более вычислительно затратными методами[1].

Ограничения и практические сложности

Несмотря на высокую теоретическую степень сжатия, достижимую с помощью неструктурированного прореживания, оно не всегда обеспечивает реальное ускорение вывода на стандартном оборудовании: случайное расположение обнулённых весов в матрице приводит к нерегулярному доступу к памяти и плохому использованию кэша, а стандартные библиотеки линейной алгебры для GPU и CPU оптимизированы под плотные матрицы и не умеют автоматически выигрывать от разрежённости произвольной формы. Практическое ускорение при неструктурированном прореживании требует специализированной аппаратной поддержки (например, аппаратного ускорения структурированной разрежённости N:M в графических процессорах архитектуры NVIDIA Ampere) или отдельных библиотек разрежённых вычислений, тогда как структурированное прореживание, удаляющее целые фильтры или каналы, совместимо со стандартными плотными операциями без такой поддержки[1].

Кроме того, агрессивное прореживание может непропорционально ухудшать качество модели на редких или специализированных подзадачах, даже когда усреднённые по всему набору данных метрики качества выглядят приемлемыми. Джордж Хольсте и соавторы показали на примере многолейбловой классификации медицинских изображений с длиннохвостым распределением классов, что при прореживании свёрточных сетей качество распознавания редких классов деградирует существенно раньше и заметно сильнее, чем качество распознавания частых классов, — то есть усреднённая метрика может скрывать резкое падение точности именно на тех подзадачах, которые представлены в обучающих данных слабее[1]. Аналогичный эффект наблюдается и при прореживании больших языковых моделей, где усреднённая перплексия (perplexity) может изменяться незначительно, в то время как способность модели решать отдельные узкоспециализированные или редко встречающиеся в обучающих данных задачи может пострадать заметно сильнее.

См. также

Примечания

Литература

  • Cheng H., Zhang M., Shi J.Q. A Survey on Deep Neural Network Pruning: Taxonomy, Comparison, Analysis, and Recommendations // IEEE Transactions on Pattern Analysis and Machine Intelligence. — 2024. — Т. 46. — № 12. — С. 10558–10578.
  • Han S., Pool J., Tran J., Dally W.J. Learning both Weights and Connections for Efficient Neural Networks // Advances in Neural Information Processing Systems (NIPS). — 2015. — Т. 28. — С. 1135–1143.
  • Frankle J., Carbin M. The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks // Proceedings of the International Conference on Learning Representations (ICLR). — 2019. — № arXiv:1803.03635.
  • LeCun Y., Denker J.S., Solla S.A. Optimal Brain Damage // Advances in Neural Information Processing Systems (NIPS). — 1990. — Т. 2. — С. 598–605.
  • Li H., Kadav A., Durdanovic I., Samet H., Graf H.P. Pruning Filters for Efficient ConvNets // Proceedings of the International Conference on Learning Representations (ICLR). — 2017. — № arXiv:1608.08710.
  • Frantar E., Alistarh D. SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot // Proceedings of the 40th International Conference on Machine Learning (ICML). — 2023. — № arXiv:2301.00774.
  • Sun M., Liu Z., Bair A., Kolter J.Z. A Simple and Effective Pruning Approach for Large Language Models // arXiv preprint. — 2023. — № arXiv:2306.11695.
  • Holste G., Zhou Y., Wang S., Jaiswal A., Lin M., Zhuge S., Yang Y., Peng Y., Summers R.M. How Does Pruning Impact Long-Tailed Multi-label Medical Image Classifiers? // Proceedings of the International Conference on Medical Image Computing and Computer-Assisted Intervention (MICCAI). — 2023. — № arXiv:2308.05781.
Личные инструменты