Автоматическое прореживание сети
Идея
Ранее мы рассматривали регуляризацию нейросети путём упрощения её архитектуры вручную. Более эффективным подходом является автоматическое прореживание сети (automatic network pruning), то есть полное отбрасывание малозначимых фрагментов сети (связей, нейронов, наборов нейронов или целых слоёв) автоматическими средствами. Это проще и позволяет лучше подстроить прореживание под специфику изучаемых данных.
Детальный обзор методов прореживания нейросетей приведён в [1].
Преимущества
Прореживание нейросетей позволяет:
-
упростить нейросеть, чтобы бороться с переобучением и повысить обобщающую способность сети;
-
сократить число параметров, чтобы сеть занимала меньше памяти;
-
уменьшить энергопотребление ресурсоёмких вычислений;
-
использовать нейросеть на менее мощных процессорах (в телефоне, автономном роботе);
-
быстрее обрабатывать большие объемы информации (например, видеопоток);
-
увеличить масштабируемость модели, обрабатывая большее число пользовательских запросов.
Виды прореживания
По характеру прореживаемых блоков внутри сети методы прореживания сетей делятся на
-
неструктурированные (unstructured), когда исключаются отдельные связи за счёт зануления соответствующих весов;
-
структурированные (structured), в которых исключаются целые блоки нейросети, такие как нейроны (со всеми входящими и исходящими связями), а в случае свёрточных сетей - свёрточные каналы.
Свёрточным сетям посвящён отдельный раздел учебника. Пока достаточно знать, что прореживание может применяться и там.
Оба вида прореживания упрощают модель, уменьшая степень её переобученности. При хранении весов в разреженном формате (sparse format) прореженная сеть будет занимать меньше памяти.
Неструктурированные методы приведут к уменьшению числа вычислений, только если библиотека и оборудование поддерживают работу с разреженными данными. В противном случае будет производиться тот же объём вычислений, только с данными, содержащими много нулей, поскольку размеры перемножаемых тензоров от неструктурированного прореживания не изменятся.
Структурированные методы всегда приводят к уменьшению объёма вычислений, поскольку меняют размеры перемножаемых тензоров.
По времени прореживания относительно настройки модели они делятся на
-
прореживание до обучения (pruning before training);
-
прореживание во время обучения (pruning during training);
-
прореживание после обучения (pruning after training).
Схемы работы этих методов приведены на рисунке ниже, где модели выделены пунктиром, а действия - сплошной линией. Красным прямоугольником обозначена конечная модель.

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