Привет, Хабр! Предлагаем вам перевод поста “Getting Started with Deep Learning” от Мэтью Рубашкина из Silicon Valley Data Science о преимуществах и недостатках существующих Deep Learning технологий и о том, какой фреймворк выбрать, учитывая специфику задачи и способности команды.
image

Здесь, в SVDS, наш R&D отдел изучает различные технологии Deep Learning: от распознавания изображений поездов, до расшифровки человеческой речи. Перед нами стояла цель построить непрерывный процесс обработки данных, создания модели и оценки ее качества. Однако, начав изучение доступных технологий, мы так не смогли найти подходящего руководства по запуску нового Deep Learning проекта.

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

image

Получившийся рейтинг основан на комбинации нашего опыта применения вышеуказанных технологий для распознавания изображений и речи, а также изучения опубликованных сравнительных исследований. Стоит отметить, что данный список включает не все доступные Deep Learning инструменты, большее количество которых можно найти здесь. В ближайшие месяцы нашей команде не терпится протестировать DeepLearning4j, Paddle, Chainer, Apache Signa, и Dynet.

Теперь перейдем к более подробному описанию нашей системы оценивания:

Языки программирования: Начиная работать с Deep Learning, лучше всего использовать наиболее удобный для вас язык программирования. К примеру, Caffee (C++) и Torch (Lua) имеют обёртки для своей API на Python, однако использование данных инструментов рекомендуется, только если вы на должном уровне владеете C++ или Lua соответственно. Для сравнения, TensorFlow и MXNet поддерживают множество языков программирования, что делает возможным использования данного инструментария, даже если вы не профессионал в C++. Замечание: К сожалению, у нас пока не было возможности протестировать новую Python обертку для Torch, PyTorch, выпущенную Facebook AI Research (FAIR) в январе 2017 года. Данный фреймворк был создан для того, чтобы Python-разработчики могли совершенствовать построение нейронных сетей в Torch.

image

image

Руководства для изучения: Что касается качества и количества руководств для изучения и тренировочных материалов, то здесь существуют серьезные различия среди инструментов Deep Learning. Так, Theano, TensorFlow, Torch и MXNet обладают отлично написанными туториалами, их легко понять и использовать на практике. С другой стороны, мы не смогли найти руководства для начинающих работать с CNTK от Microsoft и Nervana Neon от Intel, достаточно продвинутыми инструментами анализа. Более того, мы выяснили, что степень вовлеченности GitHub сообщества — достоверный показатель не только будущего развития инструментария, но и того, с какой скоростью/вероятностью вы сможете исправить баг или ошибку в коде с помощью StackOverflow или Git Issues. Важно отметить, что сейчас TensorFlow — это Кинг-Конг в мире Deep Learning по части количества туториалов, материалов для самообучения, разработчиков, и, наконец, пользователей.

image

Возможности для моделирования CNN: Сверточные нейронные сети используются для распознавания изображений, рекомендательных систем, а также обработки естественного языка (NLP). CNN состоят из набора различных слоев, преобразующих входные данные в оценки для зависимой переменной с заранее известными классами. (Для дополнительной информации прочитайте обзор архитектур нейронных сетей от Eugenio Culurciello). CNN также могут быть использованы для решения задач регрессии, например, расчета угла поворота руля у машин на автопилоте. Мы провели оценку фреймворков в зависимости от наличия определенных возможностей для моделирования CNN: доступность встроенных слоев нейронных сетей, наличие инструментов и функций для соединения этих слоев между собой. В результате анализа, легкость в построении моделей используя TensorFlow и его InceptionV3, а также easy-to-use временная верстка CNN в Torch выделяют данные фреймворки среди остальных.

Возможности для моделирования RNN: Рекуррентные нейронные сети (RNN) используются для распознавания речи, прогнозирования временных рядов, захвата изображений и решения других задач, в которых требуется обработка последовательной информации. В связи с тем, что встроенные RNN модели не так распространены среди фреймворков как CNN, при реализации Deep Learning проекта важно изучить другие open-source проекты, использующие подходящую вам технологию. К примеру, Caffe имеет минимальное количество возможностей для RNN моделирования, в то время как Microsoft CNTK и Torch обладают богатыми наборами документаций и встроенных моделей. Tensorflow так же имеет некоторый набор материалов по RNN, а TFLearn и Keras включают в себя большое количество примеров RNN, использующих TensorFlow.

Архитектура и easy-to use модульный пользовательский интерфейс: Для того, чтобы создавать и обучать новые модели, фреймворк должен иметь легкий в использовании, модульный пользовательский интерфейс. TensorFlow, Torch и MXNet, например, им обладают, создавая интуитивно понятную среду для разработки. Для сравнения, такие фреймворки как Caffe требуют значительных усилий для создания нового слоя сети. Мы также выяснили, что, в частности, TensorFlow легко отлаживается не только во время, но и после обучения, благодаря TensorBoard GUI.

Скорость: Torch и Nervana показали наилучшие результаты при тестировании производительности сверточных нейронных сетей. TensorFlow прошел испытания с сопоставимыми результатами, а Caffe и Theano значительно отстали от лидеров. В свою очередь, Microsoft CNTK показал себя наилучшим образом при обучении рекуррентных нейронных сетей (RNN). Авторы другого исследования, сравнивая Theano, Torch и TensorFlow, выбрали Theano победителем по части обучения RNN.

Поддержка множества GPU: Большинство алгоритмов Deep Learning требуют невероятного количества FLOPS (floating point operations). К примеру, DeepSpeech, модель распознавания образов от Baidu, требует 10 экзафлопов для обучения, а это более чем 10e18 вычислений! Учитывая, что один из лидеров рынка графических процессоров, NVIDIA`s Pascal TitanX может выполнять 11е9 флопов в секунду, потребуется больше недели, чтобы обучить достаточно большой массив данных. Для того, чтобы уменьшить время создания модели, необходимо использовать различные GPU на различных системах. К счастью, большинство вышеуказанных инструментов предоставляют такую возможность. В частности, считается, что MXNet обладает одним из самых оптимизированных движков для работы с несколькими видеокартами.

Совместимость с Keras: Keras — это высокоуровневая библиотека для быстрой реализации Deep Learning алгоритмов, которая отлично подходит для знакомства аналитиков с областью. На данный момент Keras поддерживает 2 back-end-а, TensorFlow и Theano и в будущем будет получать официальную поддержку от TensorFlow. Более того, в пользу Keras говорит тот факт, что библиотека, по словам ее автора, продолжит выступать в качестве пользовательского интерфейса, который может быть использован с несколькими back-end-ами.

Таким образом, если вы заинтересованы в том, чтобы развиваться в области Deep Learning, я бы рекомендовал сперва оценить способности и требования вашей команды и проекта соответственно. Например, для распознавания изображений командой разработчиков на Python, оптимальным вариантом будет использовать TensorFlow, учитывая его обширную документацию, высокую производительность и отличный инструментарий для проектирования. С другой стороны, для реализации проекта на основе RNN с командой профессионалов в Lua, наилучший вариант — это Torch и его невероятная скорость вкупе с возможностями моделирования рекуррентных сетей.

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

===

В своей программе Deep Learning, которая 8 апреля стартует уже во второй раз, мы используем две библиотеки: Keras и Caffe. Как было отмечено, Keras является более высокоуровневой библиотекой и позволяет быстро прототипировать. Это является плюсом, поскольку на программе не придется тратить время на то, чтобы узнать, как работать с тем же TensorFlow, а сразу взять и попробовать на практике разные вещи.

Caffe — также довольно понятная в использовании, хоть и не очень удобная, но при этом она может использоваться в production-решениях. В обзоре она не отмечена как самая быстрая. Если перейти по ссылке на исходный анализ скорости, то можно увидеть примечание: “может показаться, что TensorFlow и Chainer быстрее, чем Caffe, но на самом деле это может быть не так, поскольку указанные фреймворки тестировались на CuDNN, а Caffe на своем дефолтном движке”.
Поделиться с друзьями
-->

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


  1. mephistopheies
    06.04.2017 15:39

    30 000 рублей за библиотеку, :notbad:


  1. ZlodeiBaal
    06.04.2017 18:28
    +4

    Хмм.
    Как-то плохо про Caffe всё написано. Ощущение, что вы с ним либо вообще не работали либо работали очень давно.
    1) Загон про питон — непонятный. Обёртка работает, работает хорошо. Если не лезть в недра слоёв — то обёртка полностью даёт доступ. Для 90% задач доступ в недара не нужен.
    2) RNN там уже пол года как есть. Нет каких-то нормальных мануалов к ним только.
    3) Написанных мануалов вообще мало — это факт. Но. Огромное сообщество. Гугление даёт ответы практически на все возможные ошибки. По количеству информации в инете Caffe на первом месте. Хотя TF уже скоро дагонит и перегонит.
    4) Научное сообщество. С начала года я достаточно плотно ознакомлялся работами с 20. Из них 3-4 реализовывал. Из 20 работ лишь 1-2 имели исходники на TF. Всё остальное — Caffe. Если вы пробуете взять какие-то чужие прототипы — работать без Caffe не получится.
    5) Да, п.4 во многом из-за того что Caffe один из немногих фреймворков поддерживающих Matlab. В Caffe половина слоёв с завязкой на него.

    Так же в сравнении полностью упущенна поддержка чего-то за исключение x86 архитектуры. Тот же Caffe на андроиде вы запустите с трудом. Зато Tensor Flow проще.
    А вот при запуске на Jetson|RaspberryPi уже обратная ситуация.

    Но нельзя не отметить что сейчас самый перспективный — Tensor Flow


  1. UndeadDragon
    07.04.2017 12:06

    Весьма субьективно утверждение про легкость использования TensorFlow. Речь, видимо, идет о задаче типа взять готовую сеть и перетренировать. Что же до написания своей модели без участия оберток, вроде Keras, то TF явно должен быть последним, а не первым.
    Не будем забывать, как замечательно логично и привычно для программиста организована там работа с переменными и графом. Я не хочу ни с кем спорить, может быть я просто тупой такой, что мне TF кажется вырвиглазным, но все-таки, если человек для получения ОЖИДАЕМОГО поведения нужно вызывать спец. функции типа tf.assign, easy-to-use, все-таки, вряд ли сильная сторона этого фреймворка.