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









