Удаление нейронных сетей

Чтобы получить быстрый и точный вывод на пограничных устройствах, модель должна быть оптимизирована для вывода в реальном времени. Усовершенствованные современные модели, такие как VGG16 / 19, ResNet50, имеют 138+ миллионов и 23+ миллионов параметров соответственно, а логический вывод часто бывает дорогостоящим для устройств с ограниченными ресурсами.

Ранее я говорил об одной методике сжатия модели, называемой Извлечение знаний, использующей меньшую студенческую сеть, чтобы имитировать производительность более крупной сети учителей (сеть учеников и учителей имеет разную сетевую архитектуру).

Обрезка

Сегодня в центре внимания будет «обрезка» - метод сжатия модели, который позволяет нам сжать модель до меньшего размера с нулевой или незначительной потерей точности. Короче говоря, обрезка устраняет веса с низкой величиной (это не сильно влияет на производительность окончательной модели). И исходная, и обрезанная модель имеют одинаковую архитектуру, при этом обрезанная модель является более разреженной (веса с низкой величиной установлены на нули).

В статье [1] авторы сравнивают два различных метода: 1) обучение большой модели и выполнение отсечения для получения разреженной модели с небольшим количеством ненулевых параметров (большой-разреженный); и 2) обучение модели малый-плотный с размером, сопоставимым с моделью большой-разреженный. Это сравнение предназначено для определения компромисса между точностью модели и размером модели большой-разреженной и маленькой-плотной моделей. Метод отсечения, изученный в статье [1], разрабатывает простой алгоритм постепенного отсечения, который требует минимальной настройки и может быть легко включен в процесс обучения и демонстрирует его применимость в широком спектре различных сетевых архитектур, начиная от InceptionV3, MobileNets, многослойных LSTM и seq2seq модели, используемые в нейронном машинном переводе Google.

Величину разреженности для постепенной обрезки можно проиллюстрировать как монотонную возрастающую функцию.

Стратегия обрезки

Метод отсечения выполняется с помощью переменной двоичной / битовой маски, которая имеет тот же размер и форму, что и слой (вес), как показано на следующем рисунке 3. Битовая маска используется для определения, какие веса следует использовать для обучения модели. . По мере того, как мы постепенно обучаем модель, разреженность модели увеличивалась за период шагов обрезки, как показано на рисунке 2 выше.

Битовую маску можно вычислить, определив стратегию типа сокращения. Например, Мы определяем стратегию сокращения, которая сокращает каждый четный столбец веса (рис. 3). Бинарная / битовая маска постепенно обновляется во время обучения для достижения целевого уровня разреженности. Обычно во многих стратегиях обрезки обрезается только вес с наименьшим весом.

Результаты экспериментов

Обрезка на модели InceptionV3

В следующей таблице 1, взятой из статьи [1], показан компромисс размера модели и точности для изменения уровня разреженности модели InceptionV3. Мы видим, что за счет индукции разреженности 50% производительность, достигаемая между базовой моделью (разреженность 0%) и сокращенной моделью (разреженность 50%), незначительна. Очевидно, что с постепенным увеличением разреженности характеристики модели также будут постепенно ухудшаться.

Обрезка в модели MobileNets

MobileNets - это небольшие модели с малой задержкой и низким энергопотреблением, параметризованные для соответствия ограничениям ресурсов в различных сценариях использования. Благодаря сокращению уже оптимизированной модели MobileNet, сокращенная MobileNet достигла гораздо более высокой производительности с точки зрения размер и точность модели. MobileNets имеет параметр множителя ширины, который позволяет сочетать точность модели с количеством параметров и вычислительными затратами. Базовый MobileNet имеет параметр ширины 1.0.

Производительность модели с отсечением от большого до разреженного намного выше, чем от любой из MobileNet с небольшой плотностью, как показано на рис. 4.

В следующей таблице 2 представлены результаты отсечения MobileNet, извлеченные из статьи [1], в которой сравниваются модель 1.0 MobileNet с большим разрежением (разреженность ›0% и ширина = 1,0) и модель с малым и плотным размером (разреженность = 0% и ширина ‹1,0). Результаты, подчеркнутые красным, показывают 1: 1 сравнение между крупно-разреженными обрезанными MobileNet с 75% разреженностью 1,09 миллиона параметров, полученными с точностью Top-1 и Top-5 67,7% и 88,5% соответственно по сравнению с малым-плотным 0.5 MobileNet с 0% разреженностью 1,32 миллиона параметров получил точность Top-1 и Top-5, равную 63,7% и 85,4% соответственно (подчеркнуто красным). Аналогичное сравнение было показано для 1.0 MobileNets (разреженность 90% и ширина = 1,0) и 0,25 MobileNets (разреженность = 0% и ширина = 0,25) с тем же номером. ненулевых (NNZ) параметров (подчеркнутых синим).

В следующей таблице 3. показан размер модели MobileNet между моделями «малый-плотный» и «большой-разреженный».

Чтобы испытать оптимизацию модели с использованием сокращения, PyTorch [2] и Tensorflow [3] предоставляют простой в использовании API-интерфейс сокращения, который позволяет нам без особых усилий оптимизировать нашу модель.

Вывод

При постоянно растущем количестве устройств IoT машинное обучение на периферии по-прежнему остается все более сложной проблемой, которую необходимо решать. Сокращение - это один из методов сжатия модели, который позволяет оптимизировать модель для вывода в реальном времени для устройств с ограниченными ресурсами. Было показано, что модели с большой разреженной структурой часто превосходят модели с плотной и большой плотностью в различных архитектурах. Сокращение модели также может использоваться в тандеме с другими методами сжатия модели, такими как квантование и матричная факторизация низкого ранга, для дальнейшего уменьшения размера модели.

использованная литература

[1] М. Чжу, С. Гупта, Обрезать или не обрезать: изучение эффективности обрезки для сжатия модели (2017)

[2] https://pytorch.org/tutorials/intermediate/pruning_tutorial.html

[3] https://www.tensorflow.org/model_optimization/guide/pruning/pruning_with_keras