NLPx

Tales of Data Science

Google может в Open Source: TensorFlow

TensorFlow

Недавно, 10 дней назад, когда я был на конференции AINL-ISMW FRUCT 2015 (про нее напишу чуток позже), узнал, что Google выпустил TensorFlow в виде ПО с открытым исходным кодом (который опенсорс). И это здорово, хотя вызывает ряд вопросов, на некоторые из которых я попробую ответить ниже.

Что это вообще такое?

Если что, то TensorFlow — не то же самое, что облачный сервис для машинного обучения (типа Azure ML).

Это – библиотека для машинного обучения с помощью графов потоков данных (data flow graph). Основное предназначение – создавать модели для обработки естественного языка и изображений.

TensorFlow изначально создан для Глубокого Обучения, которое Deep Learning, где пользователь сам строит необходимую ему архитектуру нейронных сетей. Но библиотека также позволяет работать и со статистическими алгоритмами машинного обучения, хотя и не предоставляет их прямо из коробки, т.е. их тоже нужно написать самому, а TensorFlow предоставляет для этого инструменты.

TensorFlow – система машинного обучения второго поколения, созданная, чтобы преодолеть ограничения предыдущей версии, которую зовут DistBelief.

А что такое граф потока данных (data flow graph)?

В TensorFlow все вычисления представляются в виде направленного графа, где сами вычисления, а также входные и выходные данные — это узлы графа, а ребра графа – пути, по которым данные перемещаются от узла к узлу.

TensorFlow-graph

 

У TensorFlow, кстати, есть свой модуль визуализации – TensorBoard, который визуализирует созданную пользователем модель, чтобы можно было следить за потоком данных внутри этой самой модели.

А тензоры при чём?

Данные в TensorFlow представлены в виде тензоров (многомерные массивы данных с переменным размером). Собственно, тензоры и текут в графе от узла к узлу, оправдывая название библиотеки. Тензор можно просто описать, как трёхмерную матрицу (если что, то это не математическое определение, а просто, чтобы понятно). На картинке ниже можно видеть тензор и всё, что можно с ним сделать в плане разделки туши. По сравнению с матрицей — больше степеней свободы относительно выбора и нарезки данных.

Tensor

А в чем фишка всего этого?

  1. Гибкость представления – как пользователь, ты сам строишь граф потока данных по вычислениям. А еще можешь визуализировать этот граф и восхититься своими прямыми руками, которые создали такую чудесную модель.
  2. TensorFlow работает как на CPU, так и на GPU (для этого надо установить CUDA), легко параллелится на несколько ядер, поддерживает асинхронные вычисления. При этом готовые модели могут легко переноситься на другое железо – например, с сервера на ПК или с ПК на ноутбук какой-нибудь (если потянет, понятное дело)
  3. TensorFlow годится как для исследований, так и для разработки. Можно что-нибудь поисследовать, а потом использовать уже исследованную модель (немного ее переписав, понятное дело, ибо исследователи обычно те еще говнокодеры) для внедрения в промышленные разработки, концептуально ничего не меняя. Удобно.
  4. Автоматический расчет производных для градиентных методов машинного обучения (всякие там стохастические градиенты)
  5. Интерфейс на Python! Впрочем, еще есть версия для С++, но она хуже документирована. Скоро планируется подключить интерфейсы для Go, Java, Lua, JavaScript, и R. Раздолье!

А лицензия какая?

Apache 2.0 – можно свободно использовать как для исследовательских целей, так и в коммерческих приложениях. Вот счастья-то привалило.

А примеры и обучалки?

Вот, например, туториал на официальном сайте.

А вот — примеры одного доброго человека на GitHub

Для нормальной работы с TensorFlow через питоновый интерфейс нужно установить numpy, matplotlib (+ уже упоминавшийся выше CUDA, если делать расчёты на GPU).

Этого вполне хватит для так называемого быстрого старта, чтобы, значит, взять и сделать что-нибудь.

UPD: упрощенный интерфейс для TensorFlow, сделанный по типу scikit-learn. Для тех, кто хорошо знаком с scikit-learn, это упростит работу.

А в чем концептуальное отличие от других подобных библиотек, вроде Theano или Caffe?

Для особо продвинутых читателей будет интересно узнать, а чем концептуально отличается TensorFlow от библиотек вроде Theano, которые тоже умеют работать с многомерными массивами, знают Глубокое обучение и считаются под GPU.

Да, TensorFlow похож на Theano в этом смысле. Но:

  • TensorFlow поддерживает параллельные вычисления, в отличие от Theano (это главное отличие!).
  • Модели TensorFlow легче, чем модели Theano, переносятся на другое железо.
  • Считается, что код, написанный в парадигме TensorFlow, легче понимать и поддерживать
  • TensorFlow написан на С++ и имеет интерфейс на Python, а Theano написан на Python

Очень надеюсь, что вышесказанное поможет осознать (или хотя бы в общих чертах прикинуть), что такое TensorFlow, зачем он нужен, и почему это круто. Я всегда рад критике, хотя и не мазохист, так что комментарии вэлкам!

4,055 просмотров всего, 7 просмотров сегодня

Google может в Open Source: TensorFlow
5 2 votes

Leave a Reply

2 Comments on "Google может в Open Source: TensorFlow"

avatar
Sort by:   newest | oldest | most voted
Eugene Kalinovskiy
Guest

CUDA поддерживается только в этих GPU: https://developer.nvidia.com/cuda-gpus

Eugene Kalinovskiy
Guest

Спасибо за интересный пост!

wpDiscuz