[Перевод] Deep Learning: Сравнение фреймворков для символьного глубокого обучения

Представляем вам перевод серии статей посвященных глубокому обучению. В первой части описан выбор фреймворка с отрытым кодом для символьного глубокого обучения, между MXNET, TensorFlow, Theano. Автор подробно сравнивает преимущества и недостатки каждого из них. В следующих частях вы узнаете о тонкой настройке глубоких сверточных сетей, а также о сочетании глубокой серточной нейронной сети с рекуррентной нейронной сетью.

12203e92fd124525bdad9acf0c8bfd5f.jpg

Цикл статей «Deep Learning»


1. Сравнение фреймворков для символьного глубокого обучения.
2. Transfer learning и тонкая настройка глубоких сверточных нейронных сетей.
3. Cочетание глубокой сверточной нейронной сети с рекуррентной нейронной сетью.

Примечание: далее повествование будет вестись от имени автора.

Символьные фреймворки


Фреймворки для символьных вычислений (MXNET, TensorFlow, Theano) характеризуются символьными графами векторных операций, таких как матричное сложение/умножение или свертка. Слой является просто набором таких операций. Благодаря разделению на небольшие составные компоненты (операции) пользователи могут создавать новые сложные типы слоев без использования низкоуровневых языков (как в Caffe).

У меня есть опыт использования различных фреймворков для символьных вычислений. Как оказалось, в устройстве и текущей реализации у них у всех есть как преимущества, так и недостатки, но ни один из них не отвечает в полной мере всем требованиям. Однако в данный момент я отдаю предпочтение Theano.

Далее мы сравним перечисленные фреймворки для символьных вычислений.

Характеристика Theano TensorFlow MXNET
Программное обеспечение Theano TensorFlow MXNET
Автор Монреальский университет Команда Google Brain Сообщество Distributed (Deep) Machine Learning Community
Лицензия на программное обеспечение Лицензия BSD Apache 2.0 Apache 2.0
Открытый исходный код Да Да Да
Платформа Кросс-платформенное решение Linux, Mac OS X, планируется поддержка Windows Ubuntu, OS X, Windows, AWS, Android, iOS, JavaScript
Язык программирования Python C++, Python C++, Python, Julia, Matlab, R, Scala
Интерфейс Python C/C++, Python C++, Python, Julia, Matlab, JavaScript, R, Scala
Поддержка CUDA Да Да Да
Автоматическая дифференциация Да Да Да
Наличие предварительно обученных моделей С помощью model zoo в Lasagne Нет Да
Рекуррентные сети Да Да Да
Сверточные сети Да Да Да
Ограниченные машины Больцмана/глубокие сети доверия Да Да Да

Сравнение символьных и несимвольных фреймворков


Несимвольные фреймворки


Преимущества:
  • Несимвольные (императивные) фреймворки нейронных сетей, такие как torch и caffe, как правило, имеют очень похожее устройство вычислительной части.
  • С точки зрения выразительности императивные фреймворки устроены достаточно неплохо, в них может быть интерфейс на основе графов (например, torch/nngraph).

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

Символьные фрейморки


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

Недостатки:
  • Доступные символьные фреймворки с открытым исходным кодом пока еще недостаточно развиты и уступают императивным по производительности.

Добавление новых операций


Во всех этих фреймворках добавление операций с сохранением приемлемой производительности весьма непросто.
Theano/MXNET TensorFlow
Можно добавлять операции на Python с поддержкой встроенных операторов C. Forward на C++, symbolic gradient на Python.

Многократное использование кода


Для обучения глубоких сетей требуется немало времени. Поэтому Caffe выпустили несколько заранее обученных моделей (model zoo), которые можно было бы использовать в качестве изначальных образцов при передаче обучения или при тонкой настройке глубоких сетей для определенных областей знаний или пользовательских образов.
Theano TensorFlow MXNET
Lasagne — высокоуровневая платформа на основе Theano. В Lasagne очень просто использовать заранее обученные модели Caffe Нет поддержки заранее обученных моделей В MXNET предусмотрен инструмент caffe_converter, предназначенный для преобразования заранее обученных моделей caffe в формат MXNET

Низкоуровневые операторы Tensor


Достаточно эффективная реализация низкоуровневых операторов: их можно использовать в качестве составных компонентов при создании новых моделей, не затрачивая усилия на написание новых операторов.
Theano TensorFlow MXNET
Множество простых операций Вполне хорошо Очень мало

Операторы управления потоком


Операторы управления потоком повышают выразительность и универсальность символьной системы.
Theano TensorFlow MXNET
Поддерживаются В формате эксперимента Не поддерживаются

Высокоуровневая поддержка


Theano TensorFlow MXNET
«Чистый» символьный вычислительный фреймворк. Можно создавать высокоуровневые платформы в соответствии с требованиями. Среди успешных примеров — Keras, Lasagne, blocks Неплохое устройство с точки зрения обучения нейтронных сетей, но при этом данный фреймворк не ориентирован исключительно на нейтронные сети, что очень хорошо. Можно использовать коллекции графов, очереди и дополнения образов в качестве составных компонентов для высокоуровневых оболочек Помимо символьной части, в MXNET также предусмотрены все необходимые компоненты для классификации образов, от загрузки данных до построения моделей с методами для начала обучения.

Производительность


Измерение производительности Single-GPU


В моих тестах производительность модели LeNet для набора данных MNIST измерена для конфигурации с одним графическим процессором (GPU NVIDIA Quadro K1200).
Theano TensorFlow MXNET
Отлично Средне Превосходно

Память


Объем памяти GPU ограничен, поэтому использование для больших моделей может быть проблематично.
Theano TensorFlow MXNET
Отлично Средне Превосходно

Скорость Single-GPU


Theano очень долго компилирует графы, особенно в сложных моделях. TensorFlow еще немного медленнее.
Theano/MXNET TensorFlow
Сравнимо с CuDNNv4 Примерно вдвое медленнее

Поддержка параллельных и распределенных вычислений


Theano TensorFlow MXNET
Экспериментальная поддержка Multi-GPU Multi-GPU Распределенная

Заключение


Theano (с высокоуровневыми решениями Lasagne и Keras) — это отличный выбор для моделей глубокого обучения. С помощью Lasagne/Keras очень просто создавать новые сети и изменять существующие. Я предпочитаю Python, поэтому выбираю Lasagne/Keras благодаря очень развитому интерфейсу Python. Впрочем, эти решения не поддерживают R. Возможности передачи обучения и тонкой настройки в Lasagne/Keras показывают, что там очень просто модифицировать существующие сети, а также настраивать под предметно-ориентированные пользовательские данные.

После сравнения фреймворков можно сделать вывод, что самым оптимальным решением будет MXNET (более высокая производительность, эффективное использование памяти). Кроме того, в нем отличная поддержка R. Собственно говоря, это единственная платформа, в которой поддерживаются все функции на R. В MXNET передача обучения и тонкая настройка сетей возможны, но выполнять их довольно сложно (по сравнению с Lasagne/Keras). Из-за этого будет сложно не только модифицировать существующие сети обучения, но и настраивать под предметно-ориентированные пользовательские данные.

Если вы увидели неточность перевода, сообщите пожалуйста об этом в личные сообщения.

Комментарии (0)

© Habrahabr.ru