Deep Learning: Сравнение фреймворков для символьного глубокого обучения +24
Алгоритмы, Python, Машинное обучение, Блог компании Microsoft
Рекомендация: подборка платных и бесплатных курсов Smm - https://katalog-kursov.ru/
Представляем вам перевод серии статей посвященных глубокому обучению. В первой части описан выбор фреймворка с отрытым кодом для символьного глубокого обучения, между MXNET, TensorFlow, Theano. Автор подробно сравнивает преимущества и недостатки каждого из них. В следующих частях вы узнаете о тонкой настройке глубоких сверточных сетей, а также о сочетании глубокой сверточной нейронной сети с рекуррентной нейронной сетью.
Цикл статей «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). Из-за этого будет сложно не только модифицировать существующие сети обучения, но и настраивать под предметно-ориентированные пользовательские данные.
Если вы увидели неточность перевода, сообщите пожалуйста об этом в личные сообщения.
-->
К сожалению, не доступен сервер mySQL