Автонастройка для развертывания глубоких нейронных сетей

Автонастройка для глубокого развертывания нейросетей

Что, почему и, самое главное… как?

Фото от S. Tsuchiya на Unsplash

Введение

Одним из критериев сравнения различных архитектур нейронных сетей (НС) является время, необходимое для их обучения. Занимает это часы? Дни? Недели? В общем случае, это можно улучшить, просто обновив оборудование, используемое для обучения. Заменить менее мощные графические процессоры на более мощные, распараллелить обучение на несколько графических процессоров и т. д. Подобное происходит и на этапе вывода. Мы развернем нашу обученную сеть на встраиваемом устройстве, например, на микроконтроллере? Или мы запустим ее на мобильном устройстве? Возможно, сеть просто слишком большая, и нам понадобится встроенный графический процессор или даже графический процессор размером с сервер для ее выполнения.

Давайте выберем один из них. Мы берем нашу НС, компилируем ее для нашего устройства и проверяем, насколько быстро она работает. О нет! Она не соответствует нашим требованиям к задержке! Нам нужно было, чтобы НС работала быстрее, чем за 1 секунду, а наша НС работала 2 секунды! Какие теперь варианты?

  • Заменить устройство на более мощное: Это может быть очень проблематично, особенно когда есть жесткие ограничения приложения. Возможно, вам разрешено использовать только определенное, уже сертифицированное оборудование. Или у вас есть сложные энергетические ограничения, которые необходимо соблюдать.
  • Уменьшить сложность НС: Это также может быть сложно, потому что вы можете потерять качество в метрике НС, если не сделать это внимательно.
  • Автоматическая настройка НС для вашего конкретного оборудования.

Подождите, что? Что вы имеете в виду под автоматической настройкой? Что ж, об этом и будет речь в этой статье. Оставайтесь со мной, чтобы узнать об этой увлекательной технике. В этой статье я постараюсь объяснить эту тему с высокоуровневой точки зрения. Если вы останетесь со мной до конца статьи, вы найдете примеры из программных фреймворков, которые можно использовать для оптимизации вашей НС, а также ссылки на их учебники.

Авто… почему?

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

Для выполнения слоя НС данные должны быть переданы по иерархии памяти, пока они не достигнут вычислительных блоков. Затем вычислительные блоки выполнят…