Pruning
Узнай, как прунинг (pruning) оптимизирует нейронные сети, такие как Ultralytics YOLO26, путем удаления избыточных параметров. Исследуй структурированные и неструктурированные методы для Edge AI.
Прунинг — это стратегический метод оптимизации моделей, используемый для уменьшения размера и вычислительной сложности нейронных сетей путем удаления ненужных параметров. Подобно тому, как садовник обрезает сухие или разросшиеся ветви, чтобы дерево было здоровым, алгоритмы прунинга выявляют и устраняют избыточные веса и смещения, которые почти не влияют на точность прогнозирования модели. Основная цель — создать сжатую, «разреженную» модель, которая сохраняет высокую точность, потребляя при этом значительно меньше памяти и энергии. Это сокращение необходимо для улучшения задержки вывода, что позволяет продвинутым архитектурам эффективно работать на оборудовании с ограниченными ресурсами, таком как мобильные телефоны и встроенные устройства.
Link to this sectionМеханизмы и методология#
Современные модели глубинного обучения часто перепараметризованы, то есть содержат гораздо больше связей, чем необходимо для решения конкретной задачи. Прунинг использует это, удаляя связи, значения которых близки к нулю, исходя из предположения, что они имеют пренебрежимо малое влияние на результат. После удаления параметров модель обычно проходит процесс тонкой настройки, при котором ее кратковременно дообучают для корректировки оставшихся весов и восстановления утраченной производительности. Эта концепция тесно связана с гипотезой лотерейного билета, которая предполагает, что большие сети содержат меньшие, высокоэффективные подсети, способные достичь аналогичной точности.
Существует две основные категории стратегий прунинга:
- Неструктурированный прунинг: Этот метод удаляет отдельные веса на основе их величины, независимо от их расположения. Хотя это эффективно уменьшает общее количество параметров, создаются нерегулярные разреженные матрицы, которые стандартные CPU и GPU могут обрабатывать неэффективно без специального программного обеспечения.
- Структурированный прунинг: Этот подход удаляет целые геометрические структуры, такие как нейроны, каналы или слои в сверточной нейронной сети (CNN). Сохраняя структуру матрицы, структурированный прунинг отлично совместим со стандартными аппаратными ускорителями, что часто приводит к мгновенному ускорению для вывода в реальном времени.
Link to this sectionРеальные приложения#
Прунинг незаменим для обеспечения работы Edge AI в различных отраслях, где аппаратные ресурсы ограничены:
-
Автономные дроны: Беспилотные летательные аппараты, используемые для поисково-спасательных операций, полагаются на компьютерное зрение для навигации в сложных условиях. Прунинговые модели обнаружения объектов позволяют этим устройствам обрабатывать видеопотоки локально в реальном времени, избегая проблем с задержками, связанных с облачным соединением.
-
Мобильное здравоохранение: Портативные медицинские устройства для анализа УЗИ используют прунинговые модели для обнаружения аномалий непосредственно на устройстве. Это обеспечивает конфиденциальность данных пациентов и позволяет проводить сложную диагностику в отдаленных районах без доступа к интернету.
Link to this sectionПример реализации#
Хотя современные модели, такие как 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}%")Link to this sectionПрунинг против смежных методов оптимизации#
Чтобы эффективно оптимизировать модель для развертывания, полезно отличать прунинг от других стратегий:
- Квантование модели: В отличие от прунинга, который удаляет связи, квантование снижает точность весов (например, преобразование 32-битных чисел с плавающей запятой в 8-битные целые числа). Обе техники можно использовать вместе, чтобы максимизировать эффективность на встроенных системах.
- Дистилляция знаний: Это включает обучение меньшей модели-«ученика» для имитации поведения большей модели-«учителя». Прунинг изменяет исходную модель напрямую, в то время как дистилляция обучает новую компактную архитектуру.
Для комплексного управления жизненным циклом, включая обучение, аннотирование и развертывание оптимизированных моделей, пользователи могут воспользоваться Ultralytics Platform. Это упрощает рабочий процесс от управления наборами данных до экспорта моделей в удобные для оборудования форматы, такие как ONNX или TensorRT.






