Перейти к основному содержимому

Автоматическое прореживание сети

Идея

Мы рассмотрели регуляризацию модели путём упрощением её архитектуры вручную. Более эффективным подходом является автоматическое прореживание сети (automatic network pruning), т.е. автоматическое отбрасывание малозначимых фрагментов сети (связей, нейронов, наборов нейронов или целых слоёв). Это быстрее и, при использовании обратной связи от прореживании, сможет обеспечить более точную модель.

Детальный обзор методов прореживания нейросетей приведён в [1].

Преимущества

Прореживание нейросетей позволяет:

  • упростить нейросеть, чтобы бороться с переобучением и повысить обобщающую способность сети.

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

  • уменьшить энергопотребление ресурсоёмких вычислений;

  • также упрощение нейросети позволит

    • использовать нейросеть на менее мощных процессорах (в телефоне, на дроне);

    • быстрее обрабатывать большие объемы информации (например, видеопоток);

    • увеличить масштабируемость сети, т.е. с тем же объёмом вычислений сможем обрабатывать большее число запросов.

Виды прореживания

По характеру прореживаемых блоков внутри сети методы прореживания сетей делятся на

  • неструктурированные (unstructured), при котором исключаются отдельные связи за счёт зануления соответствующих весов;

  • структурированные (structured), при котором исключаются целые блоки нейросети, такие как нейроны (со всеми входящими и исходящими связями), а в случае свёрточных сетей - каналы.

Оба вида прореживания упрощают модель, уменьшая её степень переобученности. При хранении весов в разреженном (sparse) формате прореженная сеть будет занимать меньше памяти.

Неструктурированные методы приведут к уменьшению числа вычислений, только если библиотека и оборудование поддерживают работу с разреженными данными. В противном случае будет производиться тот же объём вычислений, только с данными, содержащими много нулей, поскольку размеры перемножаемых матриц от неструктурированного прореживания не изменятся.

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

По времени прореживания относительно настройки модели они делятся на

  • прореживание до обучения (pruning before training)

  • прореживание во время обучения (pruning during training)

  • прореживание после обучения (pruning after training)

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

Прореживание до обучения

Прореживание до обучения (pruning before training) применяет алгоритм прореживания к случайно инициализированной большой сети. За счёт того, что обучение производится на прореженной сети, получаем эффективность как на этапе применения прореженной модели, так и на этапе обучения.

Вариант применения подхода - всё-таки произвести небольшое число итераций обучения сети до прореживания, а основной объём вычислений производить уже после прореживания (pruning in early training).

Прореживание после обучения

При прореживании после обучения (pruning after training) прореживание применяется к уже настроенной полной модели.

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

Если ресурсов на прореживание много, то оптимально повторить несколько итераций небольшого прореживаная и донастройки нейросети, пока мы постепенно не дойдём до целевого уровня уменьшения модели.

Методы прореживания

Самый простой подход прореживания заключается в оценке некоторой неотрицательной степени влияния связи или нейрона (или канала в свёрточной нейросети). Если эта степень влияния меньше порога, то соответствующая связь/нейрон/канал исключаются.

Оценкой влияния отдельной связи служит абсолютная величина веса связи.

Оценкой влияния нейрона (как и канала в свёрточных сетях) служит LpL_p норма весов связей, входящих в нейрон либо исходящих из него.

Как альтернатива, можно ввести внешний настраиваемый множитель γ\gamma при нейроне/канале и оценивать общее влияние нейрона/канала по модулю этого множителя. Таким множителем, например, уже выступает параметр масштаба в батч-нормализации.

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

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

Для оценки глобального влияния рассматривается модуль частной производной функции потерь по весу (или мультипликатору γ\gamma при целом блоке нейросети), т.е. производится оценка того, насколько резко уменьшится функция потерь при изменении влияния той или иной связи/нейрона/блока сети.

Прореживание во время обучения

Прореживание во время обучения сети (pruning during training) обладает тем достоинством, что позволяет донастроить веса с учётом прореженных связей, т.е. из сети не просто выпадают элементы, но она активно приспосабливается к этому прореживанию.

Для этого при настройке сети используется L1L_1 регуляризация по весам или по множителям γ\gamma при блоках нейросети, которая известна тем, что зануляет элементы вектора, приводя к прореживанию:

L(X,Y)L(X,Y)+λi=1IwiL(X,Y) \to L(X,Y) + \lambda \sum_{i=1}^I |w_i| L(X,Y)L(X,Y)+λi=1IγiL(X,Y) \to L(X,Y) + \lambda \sum_{i=1}^I |\gamma_i|

Другие методы упрощения

Существуют и другие методы упрощения сети:

  • квантизация нейросети (neural network quantization)

  • низкоранговая декомпозиция тензоров (low-rank tensor decomposition)

  • дистилляция знаний (knowledge distillation)

В работах по упрощению сетей эти методы активно совмещаются друг с другом и с автоматическим прореживанием (network pruning), чтобы достичь максимального эффекта.

Литература

  1. Cheng H., Zhang M., Shi J. Q. A survey on deep neural network pruning-taxonomy, comparison, analysis, and recommendations //arXiv preprint arXiv:2308.06767. – 2023.
  2. Gholami A. et al. A survey of quantization methods for efficient neural network inference //Low-Power Computer Vision. – Chapman and Hall/CRC, 2022. – С. 291-326.