Model Pruning
Узнай, как прунинг (обрезка) моделей уменьшает размер и сложность нейронной сети для граничного ИИ. Изучи стратегии оптимизации Ultralytics YOLO26 для более быстрого инференса на мобильных устройствах.
Прунинг моделей — это метод в машинном обучении, используемый для уменьшения размера и вычислительной сложности нейронной сети путем систематического удаления ненужных параметров. Подобно тому, как садовник подрезает мертвые или разросшиеся ветки, чтобы дерево процветало, разработчики прореживают искусственные сети, чтобы сделать их быстрее, меньше и энергоэффективнее. Этот процесс необходим для развертывания современных архитектур глубокого обучения на устройствах с ограниченными ресурсами, таких как смартфоны, встроенные датчики и аппаратное обеспечение периферийных вычислений.
Как работает прунинг моделей#
Основная идея прунинга заключается в том, что глубокие нейронные сети часто являются «избыточно параметризованными», то есть содержат значительно больше весов и смещений, чем строго необходимо для решения конкретной задачи. В процессе обучения модель изучает огромное количество связей, но не все они вносят одинаковый вклад в конечный результат. Алгоритмы прунинга анализируют обученную модель, чтобы выявить эти избыточные или неинформативные связи (обычно те, веса которых близки к нулю), и удаляют их.
Жизненный цикл прунинга модели обычно включает следующие этапы:
-
Обучение: Большая модель обучается до сходимости, чтобы уловить сложные признаки.
-
Прунинг: Параметры с низкой важностью обнуляются или физически удаляются из структуры сети.
-
Тонкая настройка (Fine-Tuning): Модель проходит вторичный раунд тонкой настройки, чтобы оставшиеся параметры могли адаптироваться и восстановить точность, утерянную на этапе прунинга.
Эта методология часто связывается с гипотезой лотерейного билета, которая предполагает, что плотные сети содержат меньшие, изолированные подсети («выигрышные билеты»), способные достигать сопоставимой с исходной моделью точности при обучении изолированно.
Типы стратегий прунинга#
Методы прунинга обычно классифицируются в зависимости от структуры удаляемых компонентов.
- Неструктурированный прунинг: Этот подход удаляет отдельные веса в любой точке модели на основе порогового значения (например, амплитуды). Хотя это эффективно уменьшает количество параметров, результатом являются разреженные матрицы, которые стандартному оборудованию может быть сложно обрабатывать эффективно. Без специализированного ПО или аппаратных ускорителей неструктурированный прунинг может не дать значительного прироста скорости.
- Структурированный прунинг: Этот метод удаляет целые геометрические структуры, такие как каналы, фильтры или слои внутри сверточной нейронной сети (CNN). Сохраняя структуру плотной матрицы, прореженная модель остается совместимой со стандартным оборудованием GPU и CPU, что приводит к прямому улучшению задержки инференса и пропускной способности.
Реальные приложения#
Прунинг является критически важным инструментом для Edge AI, позволяя сложным моделям работать в средах, где подключение к облаку недоступно или слишком медленное.
- Мобильное обнаружение объектов: Приложения на мобильных устройствах, такие как перевод речи в реальном времени или дополненная реальность, используют прореженные модели для экономии заряда батареи и уменьшения потребления памяти. Оптимизированные архитектуры, такие как YOLO26, часто являются предпочтительной основой для этих задач благодаря своей внутренней эффективности.
- Автомобильная безопасность: Самоуправляемые автомобили и автономные транспортные средства требуют принятия решений за доли секунды. Прореженные модели позволяют бортовым компьютерам обрабатывать потоки с камер высокого разрешения для обнаружения пешеходов без задержек, вызванных передачей данных на сервер.
- Промышленный IoT: В производстве системы визуального контроля на сборочных линиях используют легковесные модели для обнаружения дефектов. Прунинг гарантирует, что эти системы могут работать на экономичных микроконтроллерах, а не на дорогих серверных стойках.
Прунинг против смежных методов оптимизации#
Хотя прунинг моделей является мощным инструментом, его часто путают с другими методами оптимизации моделей или используют наряду с ними.
- Прунинг против квантования: Прунинг уменьшает количество параметров (связей) в модели. В отличие от этого, квантование моделей уменьшает точность этих параметров, например, путем преобразования 32-битных чисел с плавающей запятой в 8-битные целые числа. Оба метода часто комбинируются для максимизации эффективности развертывания моделей.
- Прунинг против дистилляции знаний: Прунинг модифицирует исходную модель путем удаления частей. Дистилляция знаний включает в себя обучение совершенно новой, меньшей модели «ученика» для имитации поведения большей модели «учителя».
Пример реализации#
Следующий пример на Python демонстрирует, как применить неструктурированный прунинг к сверточному слою с использованием PyTorch. Это распространенный шаг перед экспортом моделей в оптимизированные форматы, такие как ONNX.
import torch
import torch.nn as nn
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
module = nn.Conv2d(in_channels=1, out_channels=20, kernel_size=3)
# Apply unstructured pruning to remove 30% of the connections
# This sets the weights with the lowest L1-norm to zero
prune.l1_unstructured(module, name="weight", amount=0.3)
# Calculate and print the sparsity (percentage of zero elements)
sparsity = 100.0 * float(torch.sum(module.weight == 0)) / module.weight.nelement()
print(f"Layer Sparsity: {sparsity:.2f}%")Для пользователей, желающих управлять всем жизненным циклом своих наборов данных и моделей, включая обучение, оценку и развертывание, Ultralytics Platform предлагает удобный интерфейс. Она упрощает процесс создания высокооптимизированных моделей, таких как YOLO26, и их экспорта в удобные для оборудования форматы, такие как TensorRT или CoreML.






