Model Pruning
Узнай, как прореживание моделей уменьшает размер и сложность нейронных сетей для периферийного ИИ. Изучи стратегии оптимизации Ultralytics YOLO26 для более быстрого вывода на мобильных устройствах.
Прореживание модели — это метод машинного обучения, используемый для уменьшения размера и вычислительной сложности нейронной сети путем систематического удаления ненужных параметров. Подобно тому как садовник обрезает отмершие или разросшиеся ветви, чтобы дерево лучше росло, разработчики прореживают искусственные сети, делая их быстрее, компактнее и энергоэффективнее. Этот процесс необходим для развертывания современных архитектур глубокого обучения на устройствах с ограниченными ресурсами, таких как смартфоны, встроенные датчики и оборудование для периферийных вычислений.
Как работает прореживание модели#
Основная идея прореживания заключается в том, что глубокие нейронные сети часто являются «переусложненными», то есть содержат значительно больше весов и смещений, чем строго необходимо для решения конкретной задачи. В процессе обучения модель формирует огромное количество связей, но не все они в равной степени влияют на конечный результат. Алгоритмы прореживания анализируют обученную модель, чтобы выявить избыточные или неинформативные связи — обычно связи с весами, близкими к нулю, — и удалить их.
Жизненный цикл прореженной модели обычно включает следующие этапы:
-
Обучение: Большая модель обучается до сходимости, чтобы выявить сложные признаки.
-
Прореживание: Параметры с низкой важностью обнуляются или физически удаляются из структуры сети.
-
Дообучение: Модель проходит дополнительный этап дообучения, чтобы оставшиеся параметры могли адаптироваться и восстановить часть точности, потерянной на этапе прореживания.
Эта методология часто связывается с гипотезой лотерейного билета, согласно которой плотные сети содержат небольшие изолированные подсети (выигрышные билеты), способные достичь точности, сопоставимой с исходной моделью, если обучать их изолированно.
Типы стратегий прореживания#
Методы прореживания обычно классифицируют по структуре удаляемых компонентов.
- Неструктурированное прореживание: Этот подход удаляет отдельные веса в любой части модели на основе порогового значения (например, величины). Хотя он эффективно уменьшает количество параметров, в результате образуются разреженные матрицы, которые стандартному оборудованию может быть сложно обрабатывать эффективно. Без специализированного программного обеспечения или аппаратных ускорителей неструктурированное прореживание может не дать существенного прироста скорости.
- Структурированное прореживание: Этот метод удаляет целые геометрические структуры, такие как каналы, фильтры или слои в сверточной нейронной сети (CNN). Благодаря сохранению структуры плотной матрицы прореженная модель остается совместимой со стандартным оборудованием GPU и CPU, что напрямую улучшает задержку инференса и пропускную способность.
Практические применения#
Прореживание — важный фактор развития периферийного ИИ, позволяющий запускать сложные модели в средах, где подключение к облаку недоступно или слишком медленное.
- Мобильное обнаружение объектов: Приложения на мобильных устройствах, такие как перевод речи в реальном времени или дополненная реальность, используют прореженные модели для сохранения заряда батареи и уменьшения использования памяти. Оптимизированные архитектуры, такие как 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.









