Топ-10 фреймворков для искусственного интеллекта: часть первая
Материал подготовили эксперты компании Hey Machine Learning.
Машинное обучение и искусственный интеллект определённо являются технологическим прорывом. Приложения для подстановки лиц и их состаривания. Голосовые помощники, способные забронировать столик или заказать билет.
Решения, распознающие мерцательную аритмию и сердечный приступ. И это лишь то, что произошло буквально недавно. Популярность ИИ-технологий растёт, а значит, растёт и спрос на них. Это приводит к увеличению всего сообщества разработчиков и к появлению фреймворков ИИ, упрощающих обучение и работу.
Давайте разберёмся, что такое фреймворк. Фреймворк — это набор инструментов и стандартных реализаций для обеспечения более быстрой разработки какого-либо программного продукта. Его часто путают с библиотекой, которая же, в свою очередь, является набором стандартных реализаций, функций и структур данных, облегчающих решение какой-либо задачи.
Если перейти во вселенную метафор, то фреймворк — это как мастерская, в которой вы можете сесть и, например, собрать автомобиль или стул. Тогда с этой точки зрения библиотека — молоток.
Мы в Hey Machine Learning работаем с ИИ-фреймворками ежедневно, поэтому решили написать для вас статью о десяти самых известных из них. На основе собственного использования выделили их положительные и отрицательные стороны, а также добавили информацию о самом эффективном их применении. В первую часть обзора вошли Tensorflow, PyTorch, Keras, Darknet и XGBoost.
TensorFlow
TensorFlow — это комплексная платформа для машинного обучения с открытым исходным кодом. Она была разработана командой Google Brain как продолжение закрытой системы машинного обучения DistBelief, однако в ноябре 2015 года компания передумала и открыла фреймворк для свободного доступа.
Как и большинство фреймворков глубокого обучения, TensorFlow имеет API на Python поверх механизма C и C ++, что ускоряет его работу.
TensorFlow имеет гибкую экосистему инструментов, библиотек и ресурсов сообщества. Это позволяет исследователям использовать самые современные МО-технологии, а разработчикам — создавать и развёртывать приложения на базе машинного обучения.
Платформа предоставляет интуитивно понятные высокоуровневые API-интерфейсы, например Keras, с быстрым выполнением, что обеспечивает немедленную итерацию модели и простую отладку. За счёт мультиплатформенности решение позволяет обучать и разворачивать модели в облаке и локально, независимо от используемого пользователем языка.
Если вам необходимо запустить модель машинного обучения на смартфоне или IoT-устройстве, то вам пригодится среда глубокого обучения с открытым исходным кодом TensorFlow Lite. Когда нужно создать и обучить МО-модель на JavaScript, а после развернуть её в браузере или на Node.js, то можно воспользоваться библиотекой TensorFlow.js.
Стоит отметить, что фреймворк постоянно развивается за счёт открытого исходного кода и огромного сообщества энтузиастов. Также за счёт его популярности есть множество уже решённых задач, что существенно упрощает жизнь новоиспечённым разработчикам.
Однако фреймворк не лишён недостатков. Компания Google известна своей любовью к созданию собственных стандартов, что коснулось и фреймворка. Например, если во время работы с TensorFlow в коде вылетает ошибка, то фреймворк не покажет пользователю конкретную строчку, спровоцировавшую её.
Почему так? Это связано с особенностью API TensorFlow, где все операции выполняются через класс tf.Session. В программировании есть две основные парадигмы — императивная и декларативная. В TensorFlow используется второй подход.
Рассмотрим очень грубый пример:
Если думаете, что c = 6, то спешу вас огорчить. На самом деле оно равно:
Это значит, что из-за декларативного подхода, вы не умножаете 2 * 3, а объявляете операцию, которая умножает 2 * 3.
Чтоб получить 6, необходимо выполнить операцию умножения чисел через сессию:
Теперь рассмотрим пример посложнее: сделаем вход не константным и будем использовать поэлементное умножение матриц.
Возьмём матрицы разных размеров, что должно привести к ошибке, потому что нельзя поэлементно умножить две матрицы разной формы.
Теперь даём на вход вектор из двух элементов и из трёх.
Ошибка:
Ничего непонятно, но очень интересно.
Всё потому, что ошибка — внутри сессии.
Конечно, есть способы обезопасить себя от подобного, однако, например, в PyTorch такое вообще не возможно.
Ещё одна проблема TensorFlow, которую следует выделить, — фреймворк всегда забирает всю видеопамять. Если вы хотите его ограничить, то необходимо создавать файл конфигурации и явно указывать, что можно брать. Также фреймворк можно ограничить напрямую, например, позволить взять не больше 50% видеопамяти.
Из-за подобного поведения с памятью могут возникнуть проблемы в работе. Предположим, что в одном проекте множество различных моделей, одни из которых написаны на PyTorch, а другие — на TensorFlow. Если изначально мы создадим TensorFlow-модель и не ограничим её, то она использует всю видеопамять при том, что ей необходимо всего 0,5 ГБ, и в итоге на PyTorch-модели попросту не хватит места.
Плюсы:
- Отличный фреймворк для создания нейронных сетей, которые будут работать в продакшене.
- Берёт на себя оптимизацию ресурсов для вычислений.
- Огромное комьюнити.
- За счёт популярности выше вероятность, что проблему, подобную вашей, уже решили.
Минусы:
- Сложен в использовании и освоении.
- Недружелюбный.
- Необходимо постоянно контролировать используемую видеопамять.
- Имеет свои стандарты.
- Плохая документация.
- У вас всегда есть пять способов решить задачу, но три из них deprecated, один не работает, а тот, который работает, — не задокументирован.
Проекты, которые используют фреймворк TensorFlow:
- DeepSpeech — система распознавания речи.
- Mask R-CNN — модель, которая генерирует ограничительные рамки и маски сегментации для каждого объекта на изображении.
- BERT — предобученная нейронная сеть, используемая для решения задач обработки естественного языка.
PyTorch
PyTorch — это среда машинного обучения на языке Python с открытым исходным кодом, обеспечивающая тензорные вычисления с GPU-ускорением. Она была разработана компанией Facebook и представлена в октябре 2016 года, а открыта для сторонних разработчиков — в январе 2017 года. Фреймворк подходит для быстрого прототипирования в исследованиях, а также для любителей и небольших проектов.
Фреймворк предлагает динамические графы вычислений, которые позволяют обрабатывать ввод и вывод переменной длины, что полезно, например, при работе с рекуррентными нейронными сетями. Если коротко, то за счёт этого инженеры и исследователи могут менять поведение сети «налету».
За счёт глубокой интеграции фреймворка с кодом C++ разработчики могут программировать на C и C++ с помощью API-расширения на основе FFI для Python.
В отличие от TensorFlow, PyTorch менее гибок в поддержке различных платформ. Также в нём нет родных инструментов для визуализации данных, но есть сторонний аналог, называемый tensorboardX.
Однако, снова же, в отличие от TensorFlow, если при работе с PyTorch вылетает ошибка, то это конкретная недоработка в коде и система выделит вам именно ту строчку, которая её спровоцировала.
Также при развёртке сетей на GPU PyTorch самостоятельно займёт только необходимую видеопамять.
Плюсы:
- Имеет множество модульных элементов, которые легко комбинировать.
- Легко писать собственные типы слоев и работать на GPU.
- Имеет широкий выбор предварительно обученных моделей.
Минусы:
- Вам придётся самостоятельно писать тренировочный код.
- Плохая документация, то и дело будут попадаться функции и методы, документация которых существует исключительно на форумах сообщества и получена эмпирическим путём.
Проекты, которые используют фреймворк PyTorch:
Keras
Keras — открытая среда глубокого обучения, написанная на Python. Она была разработана инженером из Google Франсуа Шолле и представлена в марте 2015 года.
Фреймворк нацелен на оперативную работу с нейросетями и является компактным, модульным и расширяемым. Подходит для небольших проектов, так как создать что-то масштабное на нём сложно и он явно будет проигрывать в производительности нейросетей тому же TensorFlow.
Фреймворк содержит многочисленные реализации широко применяемых строительных блоков нейронных сетей, таких как слои, целевые и передаточные функции, оптимизаторы, а также множество инструментов для упрощения работы с изображениями и текстом.
Deeplearning4j использует Keras в качестве своего Python API и позволяет импортировать модели из Keras, а также через Keras из Theano и TensorFlow.
Плюсы:
- Удобен в использовании.
- Лёгок в освоении.
- Быстроразвивающийся фреймворк.
- Хорошая документация.
- Встроен в TF.
Минусы:
- Не подходит для больших проектов.
Проекты, которые используют фреймворк Keras:
- Mask R-CNN — модель, которая генерирует ограничительные рамки и маски сегментации для каждого объекта на изображении
- face_classification — алгоритм для распознавания лиц в режиме реального времени и классификации эмоций и пола.
- YOLOv3 — нейронная сеть для обнаружения объектов в режиме реального времени.
Darknet
Darknet — это фреймворк с открытым исходным кодом, написанный на языке C с использованием программно-аппаратной архитектуры параллельных вычислений CUDA. Он быстрый, лёгкий и удобный в использовании. Также Darknet поддерживает вычисления на базе CPU и GPU.
Обученные веса Darknet хранит в формате, который может быть распознан с помощью разных методов на различных платформах. Однако это может стать проблемой, если вы решите натренировать модель на одном сверхмощном оборудовании, а затем использовать её на другом.
Так как фреймворк написан на C и не имеет другого API, то в случае, когда требования платформы или собственные предпочтения заставят обратиться к другому языку программирования, вам придётся дополнительно заморочиться над его интеграцией. К тому же он распространяется только в формате исходного кода, и процесс компиляции на некоторых платформах может быть несколько проблематичным.
Фреймворк не рекомендуется использовать для сложных проектов, разве что вам необходимо создать сверхбыстрый детектор объектов.
Плюсы:
- Простой.
- Быстрый.
- Удобный.
Минусы:
- Кроме задач с обнаружением больше нигде не используется.
- Не рекомендуется для больших проектов.
- Плохая документация.
Проекты, которые используют фреймворк Darknet:
- YOLOv3 — нейронная сеть для обнаружения объектов в режиме реального времени.
- Tiny-YOLO 3 — компактная нейронная сеть для обнаружения объектов.
XGBoost
XGBoost — это фреймворк с открытым исходным кодом, который предлагает систему градиентного бустинга для C++, Java, Python, R, Julia. Он разработан для обеспечения высокой эффективности, гибкости и портативности.
Этот фреймворк относится не к глубокому обучению, как все вышепредставленные, а к классическому.
Изначально это был исследовательский проект Тяньцзи Чена и Карлоса Гестрина в составе Distributed [Deep] Machine Learning Community, но позже он был расширен и представлен публике на конференции SIGKDD в 2016 году, где произвёл фурор.
После своей презентации фреймворк лидировал в соревнованиях Kaggle и до сих пор остаётся фаворитом для решения большинства задач на платформе.
XGBoost фокусируется на скорости вычислений и производительности модели и подходит для решения задач регрессии, классификации и упорядочивания. Если данные можно представить в виде таблицы, то точность и производительность будут существенно выше, чем у DeepLearning-решений. Любимый инструмент Data Scientist-ов.
Фреймворк совместим с операционными системами Windows, Linux и OS X, а также поддерживает кластеры AWS, Azure и Yarn, хорошо работает с Flink, Spark.
Плюсы:
- Очень быстрый и удобный инструмент для тренировки моделей типа «дерево решений».
- Точный.
- Отлично подходит для проверки гипотез.
Минусы:
- Узкоспециализирован.
Заключение
Так всё же, какой фреймворк к какой задаче лучше всего применить?
TensorFlow хорош для продвинутых проектов, таких как создание многослойных нейронных сетей. Может использоваться для распознавания речи, лиц, объектов и изображений, а также для работы с текстом.
PyTorch подойдёт в случае, когда вам необходимо обучить модели быстро и эффективно. Удобный для быстрого прототипирования в исследованиях, а также для любителей и небольших проектов.
Keras подходит для быстрого прототипирования. Хорош в кейсах, связанных с переводом, распознаванием изображений и речи.
Darknet подходит для небольших проектов. Хорошо работает в задачах обнаружения.
XGBoost может использоваться для решения задач регрессии, классификации, упорядочивания и пользовательских задач на предсказание.
Мы надеемся, что наша статья о топ-10 фреймворках для искусственного интеллекта расскажет вам что-то новое и полезное, а также поможет подобрать наиболее подходящее решение для вашего проекта.