{"id":13711,"url":"\/distributions\/13711\/click?bit=1&hash=993ce7f10a29e09ef6007450140ef5fcebecd55805799940a93c3efe78cce5e3","title":"\u0411\u043e\u0438\u0442\u0435\u0441\u044c \u043d\u0435\u0434\u043e\u043e\u0446\u0435\u043d\u0451\u043d\u043d\u044b\u0445 \u0431\u0443\u043c\u0430\u0433? \u0412\u043e\u0442 \u043f\u0430\u0440\u0430 \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u043e\u0442 \u0438\u043d\u0432\u0435\u0441\u0442\u043e\u0440\u043e\u0432","buttonText":"\u0427\u0438\u0442\u0430\u0442\u044c","imageUuid":"9ff620a4-3fae-5002-9694-5d10fe8c5bbf","isPaidAndBannersEnabled":false}

Топ-10 фреймворков для искусственного интеллекта: часть первая

Материал подготовили эксперты компании Hey Machine Learning.

Машинное обучение и искусственный интеллект определённо являются технологическим прорывом. Приложения для подстановки лиц и их состаривания. Голосовые помощники, способные забронировать столик или заказать билет.

Решения, распознающие мерцательную аритмию и сердечный приступ. И это лишь то, что произошло буквально недавно. Популярность ИИ-технологий растёт, а значит, растёт и спрос на них. Это приводит к увеличению всего сообщества разработчиков и к появлению фреймворков ИИ, упрощающих обучение и работу.

Давайте разберёмся, что такое фреймворк. Фреймворк — это набор инструментов и стандартных реализаций для обеспечения более быстрой разработки какого-либо программного продукта. Его часто путают с библиотекой, которая же, в свою очередь, является набором стандартных реализаций, функций и структур данных, облегчающих решение какой-либо задачи.

Если перейти во вселенную метафор, то фреймворк — это как мастерская, в которой вы можете сесть и, например, собрать автомобиль или стул. Тогда с этой точки зрения библиотека — молоток.

Мы в Hey Machine Learning работаем с ИИ-фреймворками ежедневно, поэтому решили написать для вас статью о десяти самых известных из них. На основе собственного использования выделили их положительные и отрицательные стороны, а также добавили информацию о самом эффективном их применении. В первую часть обзора вошли Tensorflow, PyTorch, Keras, Darknet и XGBoost.

Статистика по фреймворкам с официальных аккаунтов на GitHub

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 используется второй подход.

Рассмотрим очень грубый пример:

a = tf.constant(2) b = tf.constant(3) c = a* b

Если думаете, что c = 6, то спешу вас огорчить. На самом деле оно равно:

<tf.Tensor 'mul:0' shape=() dtype=int32>

Это значит, что из-за декларативного подхода, вы не умножаете 2 * 3, а объявляете операцию, которая умножает 2 * 3.

Чтоб получить 6, необходимо выполнить операцию умножения чисел через сессию:

sess = tf.Session() sess.run(c)

Теперь рассмотрим пример посложнее: сделаем вход не константным и будем использовать поэлементное умножение матриц.

Возьмём матрицы разных размеров, что должно привести к ошибке, потому что нельзя поэлементно умножить две матрицы разной формы.

a = tf.placeholder(dtype=tf.float32) b = tf.placeholder(dtype=tf.float32) c = a * b with tf.Session(): res = sess.run(c, feed_dict={a: np.array([1,2]), b: np.array([1,5,3])}) print(res)

Теперь даём на вход вектор из двух элементов и из трёх.

Ошибка:

validArgumentError (see above for traceback): Incompatible shapes: [2] vs. [3] [[node mul_3 (defined at <ipython-input-66-0b219961c4c2>:4) = Mul[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_Placeholder_3_0_0/_7, _arg_Placeholder_4_0_1/_9)]] [[{{node mul_3/_11}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_7_mul_3", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

Ничего непонятно, но очень интересно.

Всё потому, что ошибка — внутри сессии.

Конечно, есть способы обезопасить себя от подобного, однако, например, в 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:

  • PyText — библиотека для обработки устной и письменной речи.
  • vid2vid — генеративная нейросеть для подмены деталей и свойств видеопотока.
  • pix2pix — алгоритм, который превращает пользовательские наброски в фотографии.

Keras

Keras — открытая среда глубокого обучения, написанная на Python. Она была разработана инженером из Google Франсуа Шолле и представлена в марте 2015 года.

Фреймворк нацелен на оперативную работу с нейросетями и является компактным, модульным и расширяемым. Подходит для небольших проектов, так как создать что-то масштабное на нём сложно и он явно будет проигрывать в производительности нейросетей тому же TensorFlow.

Keras работает поверх TensorFlow, CNTK и Theano и предоставляет интуитивно понятный API, который, по мнению наших инженеров, пока что является лучшим в своём роде.

Фреймворк содержит многочисленные реализации широко применяемых строительных блоков нейронных сетей, таких как слои, целевые и передаточные функции, оптимизаторы, а также множество инструментов для упрощения работы с изображениями и текстом.

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 фреймворках для искусственного интеллекта расскажет вам что-то новое и полезное, а также поможет подобрать наиболее подходящее решение для вашего проекта.

0
10 комментариев
Написать комментарий...
Igor Vorobev

Поверхностно, keras это надстройка над tf. А не отдельный фреймворк. Это как jquery для js.

Ответить
Развернуть ветку
Konstantin

только js это не фреймворк

Ответить
Развернуть ветку
Игорь Горячев

Полностью согласен. Тока хотел тоже самое написать:)

Ответить
Развернуть ветку
Marina Glayboroda
Автор

Теоретически вы правы, однако на практике дела обстоят немного иначе.

Термин «фреймворк» является достаточно расплывчатым и может означать много разных вещей в зависимости от контекста. Фреймворком может называться всё, что используется при разработке приложений: библиотека, набор из множества библиотек, набор сценариев или любое программное обеспечение, необходимое для создания приложения.

Например, в Mac OS X фреймворк - это просто библиотеки, упакованные в пакет.

Keras действительно является надстройкой и, кстати, не толькоTensorFlow, но и CNTK и Theano. Он может считаться фреймворком, так как используется для создания полноценных решений типа Mask R-CNN и face_classification.

Также, когда дело касается решения задач распознавания изображений и машинного перевода, Keras всегда рассматривают как альтернативу TensorFlow и PyTorch, так как он удобен в использовании, лёгок в освоении и имеет хорошую документацию.

Ответить
Развернуть ветку
Роман Булкин

Я старался. Но не осилил. Но чувствую что тут что-то годное

Ответить
Развернуть ветку
Michael Feinstein

вероятнее всего тут нет ца, с тем же успехом можно обсуждать формулу эмпирического риска) для ИИ. Или чем отличается ИИ на основе матричной математики от прочих...

Ответить
Развернуть ветку
Michael Feinstein

между прочим формула эмпирического риска довольно универсальная и можно включить кучу компонентов и в рамках теоритического дискуса вывести новую формулу. Например вероятности принятия неправильного решения при выборе подрядчика для своего сайта. А так вообще интересная тема особенно на фоне холивара с роботом Федей :), и появлением нового понятия - "роботосрач" с учетом невероятных финансовых вливаний с нулевым выхлопом.

Ответить
Развернуть ветку
Макс Мухарёв

А напишите про формулу эмпирического риска, особенно в применении к выбору подрядчика сайта. Очень интересно)

Ответить
Развернуть ветку
Константин Донцов

мне больше понравилась фраза из статьи - "Ничего непонятно, но очень интересно." )) хотя кое что для себя узнал, и расширил знания в этой области.

Ответить
Развернуть ветку
Michael Feinstein

на самом деле зря плюс, во вторник с нашей многострадальной Земли тупо состыкуют (как и до появления робота) и все лавры сами знаете кому, но явно не Феде...

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Читать все 10 комментариев
null