Как выбрать фреймворк глубокого обучения? Сравниваем 10 популярных сред тренировки нейросетей. Преимущества, недостатки, подводные камни.
1. TensorFlow
Начнем с очевидного. TensorFlow, без сомнения, – популярнейший инструмент для обучения нейросетей. Google активно использует собственный фреймворк глубокого обучения для таких крупномасштабных сервисов как Gmail и Google Translate. TensorFlow уже применили к своим сервисам и такие значительные бренды как Uber, Airbnb, Dropbox и многие другие. Он оказал огромное влияние на разработку.
Наиболее удобным клиентским языком работы с TensorFlow является Python, но доступны и экспериментальные интерфейсы на JavaScript, C++, Java и Go. Сообщество open source разработало также решения для C# и Julia.
Следствием популярности фреймворка стала подробная документация, включающая не только версию на официальном сайте, но и сторонние источники. Документация описывает как структуру фреймворка TensorFlow, так и инструменты, позволяющие отследить сам процесс обучения нейросети, например, визуализация с TensorBoard.
https://youtu.be/eBbEDRsCmv4
Важно, что проект учитывает не только мощные вычислительные кластеры, но и возможность запуска моделей на мобильных платформах, как iOS и Android.
Тем не менее, TensorFlow – это низкоуровневый инструмент. Вам нужно тщательно продумывать архитектуру нейросети, правильно оценивать размерность и объемы входных и выходных данных. Таким образом, работа с TensorFlow требует написания значительного количества программного кода.
TensorFlow оперирует статическим вычислительным графом. То есть вначале мы определяем граф, далее запускаем вычисления и, если необходимо внести изменения в архитектуру, заново обучаем модель. Такой подход выбран ради эффективности, но многие современные нейросетевые инструменты умеют учитывать уточнения в процессе обучения без существенной потери скорости обучения. В этом плане основным конкурентом TensorFlow является фреймворк глубокого обучения PyTorch.
2. PyTorch
В отличие от TensorFlow, библиотека PyTorch оперирует динамически обновляемым графом. То есть позволяет вносить изменения в архитектуру в процессе работы.
Фреймворк PyTorch был разработан для сервисов Facebook, но уже используется для собственных задач такими компаниями как Twitter и Salesforce. В PyTorch можно использовать стандартные дебаггеры, например, pdb или PyCharm. Процесс тренировки нейросети прост и ясен. При этом PyTorch поддерживает модель параллелизма данных и распределенного обучения, а также содержит множество предобученных моделей.
Но в отличие от TensorFlow, описываемый фреймворк глубокого обучения гораздо менее гибок в поддержке различных платформ. Также в PyTorch нет родных инструментов для визуализации данных. Однако есть сторонний аналог, называемый tensorboardX.
В материалах конференций по искусственному интеллекту и в конкурсах Kaggle исследователи нередко отдают предпочтение PyTorch, а не TensorFlow. Связано это с тем, что PyTorch гораздо лучше подходит для небольших проектов и прототипирования. Когда же речь заходит о кросплатформенных решениях, TensorFlow выглядит более подходящим выбором. Однако стоит отметить, что для тех же задач можно использовать представленный в 2017 году мобильный фреймворк Caffe2. Ведь он умеет работать в связке с PyTorch.
3. Sonnet
Надстроенный над TensorFlow фреймворк глубокого обучения Sonnet разработан для создания нейросетей со сложной архитектурой всемирно известной компанией DeepMind.
Идея Sonnet состоит в первичном конструировании объектов Python, соответствующих определенной части нейросети. Далее эти объекты независимо подключаются к вычислительному графу TensorFlow. Разделение процессов создания объектов и связывания их с графом упрощает конструирование высокоуровневых архитектур. Подробнее об этих принципах можно прочитать в документации фреймворка.
4. Keras
Наиболее минималистичный подход к использованию TensorFlow, Theano или CNTK дает высокоуровневая оболочка Keras. Прототипирование здесь облегчено до предела. Создание массивных моделей глубокого обучения в Keras сведены до одностроковых функций. Но такая стратегия делает Keras менее конфигурируемой средой, чем низкоуровневые фреймворки.
Таким образом, Keras – лучший Deep Learning фреймворк для тех, кто только начинает. Идеально подходит для обучения и прототипирования простых концептов, чтобы понять самую суть различных моделей и процессов их обучения.
5. MXNet
MXNet представляет собой фреймворк глубокого обучения, разрабатываемый компанией Amazon. Фреймворк исходно поддерживает большое количество языков (C++, Python, R, Julia, JavaScript, Scala, Go и даже Perl). Основной акцент сделан на том, что фреймворк очень эффективно параллелится на множестве GPU и многих машинах. Это, в частности, продемонстрировано и его работой на Amazon Web Services.
6. Gluon
Специфика проекта Gluon – гибкий интерфейс, упрощающий создание прототипов, построение и обучение моделей глубокого обучения без ущерба для скорости обучения. Gluon базируется на MXNet и предлагает простое API, упрощающее создание моделей глубокого обучения. Аналогично PyTorch, фреймворк Gluon поддерживает работу с динамическим графом, сочетая это с высокой производительностью MXNet. В этом ракурсе Gluon выглядит крайне интересной альтернативой Keras для распределенных вычислений.
7. CNTK
Как вы могли заметить, все мировые гиганты IT находятся в гонке за глубокое обучение. Исключением не стала и компания Microsoft.
Фреймворк глубокого обучения CNTK (он же Microsoft Cognitive Toolkit) содержит множество готовых решений для распознавания речи и изображений. Работает с C++, Python, С# и Java. Поддерживает Apache Spark и Microsoft Azure Virtual Machine. Однако по понятным причинам CNTK в большей мере ориентирован на Windows.
8. Chainer
Chainer – фреймворк глубокого обучения, созданный японским стартапом и поддерживаемый IBM, Intel, Microsoft и Nvidia. Код написан на чистом Python поверх библиотек Numpy и CuPy. Chainer – первый фреймворк, который стал оперировать динамической моделью архитектуры (как в PyTorch). Кроме того, Chainer несколько раз бил рекорды по эффективности масштабирования при моделировании задач, решаемых нейронными сетями.
9. DL4J
Тем, кто на короткой ноге с Java или Scala, стоит обратить внимание на DL4J (сокращение от Deep Learning for Java). Обучение нейросетей в DL4J осуществляется параллельно по итерациям через кластеры. Процесс поддерживается архитектурами Hadoop и Spark. Использование Java позволяет применять библиотеку в цикле разработке программ для Android-устройств. Заметим, что разработчикам под iOS стоит обратить внимание на фреймворк Core ML.
10. ONNX
Проект ONNX родился в результате сотрудничества Microsoft и Facebook как поиск открытого формата для представления моделей глубокого обучения. ONNX упрощает процесс переноса моделей между различными средствами работы с искусственным интеллектом. Таким образом, ONNX позволяет сочтать преимущества различных Deep Learning фреймворков.
Заключение
Подведем итог. При выборе фреймворка обратите внимание на таблицу сравнения различных фреймворков и библиотек. Если вы только начинаете и хотите разобраться, что к чему, лучший выбор – Keras. В исследовательских целях наиболее востребован PyTorch. Для продакшена нужно ориентироваться на среду. Так, для Google Cloud лучший выбор – это TensorFlow, для AWS – MXNet и Gluon, для Microsoft Azure – CNTK. Разработчикам под Android стоит обратить внимание на D4LJ, для iOS подобный круг задач решает Core ML. Наконец, в вопросах взаимодействия между различными фреймворками поможет ONNX.
Если фрейморк глубокого обучения уже выбран:
- TensorFlow.js: машинное обучение на JavaScript с доставкой в браузер
- Учебный план освоения глубокого обучения и нейросетей за 6 недель
- Нейронная сеть на Python в 15 строк кода для диагностики диабета
- 6 шагов, которые помогут стать специалистом по Data Science
- Советы по глубокому обучению: распознавание объектов в 10 строк
Комментарии