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

Чтобы помочь вам погрузиться в тему ускорения, мы кратко познакомим вас с основными методами для CNN.

Рассмотрим четыре подхода к ускорению и для каждого расскажем:

Neural Architecture Search

Untitled

В первом подходе предлагается не ускорять имеющуюся сеть, а изначально подобрать оптимальную архитектуру.

Нейросетевой архитектурный поиск (Neural Architecture Search или NAS) — семейство методов, позволяющих выбрать оптимальную комбинацию слоёв и их параметров под конкретную задачу.

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

Главное, что надо понимать: выбор слоёв при поиске ограничен! Ибо перебрать все возможные варианты слоев и их параметров — невозможно.

В начале поиска в NAS алгоритмах требуется указать:

Например, в MNasNet, на котором стоит MobileNetV3, пространство поиска состоит из DWS блоков или обычных сверток, ядра выбирали размером 3 или 5, а для skip connection выбрали сложение, pooling или вообще их исключение. В качестве алгоритма поиска использовали RL, а оптимизировали время работы на смартфоне и точность.

<aside> 💡 Но не спешите применять эту технологию! Можно потерять много времени, а результаты получить не лучше уже доступных.

Нужно быстро запускать на телефоне — можете выбрать MobileNetV3. На сервере — подойдет EfficientNet. Эти модели уже подобрали архитектурным поиском.

Беритесь за NAS только случаях, когда другие способы уже себя исчерпали.

</aside>

Описание частного случая NAS: DARTS

Дистилляция