Введение в нейронный сетевой интеллект
В рамках своей магистерской работы во Фраунгофера я работаю с несколькими фреймворками AutoML. Уже есть несколько статей о последних фреймворках, но ничего не говорится о NNI (N etwork I ntelligence) от Microsoft. Поскольку я считаю этот инструмент полезным и использую его в своей повседневной работе, я дам базовое введение в NNI. В этой статье я сосредоточусь на оптимизации гиперпараметров - очень актуальной теме для многих разработчиков и новичков. Мы можем быстро и легко проектировать, обучать и оценивать нейронные сети благодаря таким библиотекам, как Tensorflow или Keras. Несмотря на простоту этой технологической цепочки, остается один из ключевых вопросов:
Какие гиперпараметры следует выбрать для максимальной производительности модели?
Даже такие компании, как Waymo или DeepMind подвергаются оптимизации гиперпараметров и разрабатывают современные алгоритмы. Поиск оптимальных гиперпараметров - утомительный процесс, требующий много времени и вычислительных мощностей. AutoML - Automated Machine Learning - это область исследований автоматизированного машинного обучения, включающая автоматизированные методы. Помимо проприетарных фреймворков AutoML, таких как Google Cloud AutoML или Amazon SageMaker, доступны решения с открытым исходным кодом, такие как NNI на Github. NNI разработан Microsoft и предлагает алгоритмы (Grid Search, Random Search, Evolution, Hyperband, BOHB, TPE, ENAS и др.) Для поиска нейронной архитектуры (NAS) и оптимизации гиперпараметров ( HPO). Мы ориентируемся на HPO. Основным преимуществом NNI перед другими текущими структурами AutoML является то, что он поддерживает несколько современных алгоритмов и что нам нужно изменять существующий код Python только минимально. В целях простоты в этой статье не рассматриваются детали различных алгоритмов поиска.
В MacOS, Windows и Linux NNI можно установить, в идеале через виртуальную среду. Инструмент (мы устанавливаем версию для разработчиков на Ubuntu) доступен для загрузки со страницы Github и может быть установлен согласно следующей инструкции:
git clone https://github.com/Microsoft/nni.git
python3.6 -m venv venv_nni_dev source venv_nni_dev/bin/activate cd nni pip install tensorflow-gpu pip install kerasmake install-dependencies make build make dev-install
cd ..
NNI можно контролировать через консоль и контролировать через веб-интерфейс. Вы можете запустить NNI локально или удаленно. В локальном режиме выполнение выполняется на текущем ПК, тогда как в удаленном режиме выполнение обычно выполняется на сервере с быстрыми графическими процессорами. Поддерживаются следующие фреймворки: Pytorch, Keras, Tensorflow, MXNet, Caffe2, Theano и другие. Требуются три файла:
- Файл Python для нейронной сети
- Файл пространства поиска
- Файл конфигурации
Нейронная сеть определяется в файле Python. Этот файл позже вызывается инструментом NNI с различными параметрами из нашего пространства поиска. Следовательно, файл Python получает доступ к переданным параметрам и использует их соответствующим образом. Одна функция содержит нейронную сеть, другие функции отвечают за подготовку данных. Конфигурации для выполнения теста хранятся в файле конфигурации. Например:
- Платформа обучения (локальная или удаленная)
- Тюнер (алгоритм поиска)
- Параметры алгоритма поиска
- Путь к файлу Python
- Путь к файлу пространства поиска
- Максимальное количество всех попыток
- Максимальное время исполнения
- CPU или GPU
В этой статье я рассмотрю простейший пример - MNIST с Keras. В этом примере для области поиска указаны отдельные значения. На этой странице представлена дополнительная информация. Например, с помощью алгоритмов можно искать целые домены значений. Пространство поиска определено ниже (nni / examples / trials / mnist-keras / search_space.json):
{ “optimizer”:{“_type”:”choice”,”_value”:[“Adam”, “SGD”]}, “learning_rate”:{“_type”:”choice”,”_value”:[0.0001, 0.001, 0.002, 0.005, 0.01]} }
В этом сценарии одновременно выполняется ровно одно испытание. Эксперимент завершается после 10 попыток или 1 часа выполнения. В качестве алгоритма поиска выбран TPE. Испытания выполняются на локальном компьютере с центральным процессором. Кроме того, указываются файл пространства поиска и файл Python с нейронной сетью. В зависимости от алгоритма поиска требуются дополнительные параметры, с которыми вы можете ознакомиться на этой странице. В приведенном ниже коде показан файл конфигурации (nni / examples / trials / mnist-keras / config.yml):
authorName: default experimentName: example_mnist-keras trialConcurrency: 1 maxExecDuration: 1h maxTrialNum: 10 #choice: local, remote, pai trainingServicePlatform: local searchSpacePath: search_space.json #choice: true, false useAnnotation: false tuner: #choice: TPE, Random, Anneal, Evolution, BatchTuner, MetisTuner #SMAC (SMAC should be installed through nnictl) builtinTunerName: TPE classArgs: #choice: maximize, minimize optimize_mode: maximize trial: command: python3 mnist-keras.py codeDir: . gpuNum: 0
Заполнители параметров поиска используются для нейронной сети следующим образом (nni / examples / trials / mnist-keras / minst-keras.py):
Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape), Conv2D(64, (3, 3), activation='relu'), if hyper_params['optimizer'] == 'Adam': optimizer = keras.optimizers.Adam(lr=hyper_params['learning_rate'])
После выполнения вышеуказанных пунктов эксперимент начинается с
nnictl create --config nni/examples/trials/mnist-keras/config.yml
NNI по умолчанию выбирает порт 8080. Если он уже занят, можно указать альтернативный порт с помощью
--port=<port>
NNI должен отобразить следующее сообщение:
Процесс поиска можно легко отслеживать и контролировать через веб-интерфейс по указанной ссылке. Веб-интерфейс состоит из двух страниц. На стартовой странице указана вся важная информация об эксперименте (время начала, количество попыток, ход выполнения, файл конфигурации и т. Д.). Во второй вкладке дается подробный обзор. Здесь, например, отображаются все эксперименты с их настройкой и достигнутыми показателями. Выполненные испытания перечислены в табличной форме и могут быть экспортированы в виде файлов JSON (Просмотр - ›Параметры эксперимента). Вы можете отсортировать испытания по метрике, времени выполнения или статусу. Под
nni/experiments/<experiment_id>/trials/
NNI создает папку с файлами журнала для каждой попытки эксперимента. Снимок экрана во время эксперимента показан ниже:
NNI все еще находится в разработке, поэтому я рекомендую версию для разработчиков со страницы Github. Подробную документацию с множеством примеров можно найти на официальной странице Github. Я очень надеюсь, что эта статья помогла вам разобраться в структуре NNI. В следующих статьях я расскажу о других возможностях NNI.
Спасибо за чтение.
Еще полезные ссылки на NNI на Github: