- PVSM.RU - https://www.pvsm.ru -

Deep Learning — что же делать, кого бить

Нигде, наверно, нет такой насущной необходимости в синергии знаний разных областей науки — как в области машинного обучения и Deep Learning. Достаточно открыть капот TensorFlow [1] и ужаснуться — огромное количество кода на python, работающее с тензорами внутри… C++, вперемешку с numpy [2], для выкладки в продакшн требующее чуток покодить [3] «на плюсах», вприкуску с bazel [4] (это так волнует, всю жизнь мечтал об этом!). И другая крайность — ребята из Deeplearning4j [5] прокляли python к чертовой матери и вращают тензоры [6] на старой и доброй java. Но дальше всех ушли, похоже, студенты из университета Нью-Йорка — люди, причем не только студенты [7], причем давно и серьезно жгут на Luajit [8] + nginx (аминь по католически [9]). Ситуация осложняется недавним демаршем [10] Google DeepMind в отношении «дедушки torch»: все проекты переводят на свой внутренний движок, родившийся из DistBelief [11].
Полнейший хаос и бардак.

Экспертов — «в топку»

Но начнем с конца. Стоит ли тратить время на изучение Deep Learning, насколько он нужен бизнесу и что это вообще такое? Вспомним, что «классическое» машинное обучение работает же, и неплохо, но, НО… требуется тщательный выбор и магическо-ненаучные манипуляции с атрибутами с привлечением экспертов в предметной области — а это долго, дорого и хрупко. Всем хочется дать машине данные и чтобы она САМА всему научилась (вот тебе архив с книжками — завтра научись писать новые; вот тебе фотографии — учись рисовать). И не отвлекайся, красавица, работай. И это стало получаться.
Хорошо известные работающие неплохо примеры, которым не нужны эксперты по языку — это машинный перевод [12]. Ну весело же — берем корпус с переводами, учим нейронку и вуаля — она переводит не хуже, а даже лучше чем Moses [13].
Еще пример, где DeepLearning расцвел в свое красе — машинное зрение [14]. Тоже весело — несколько слоев нейронки разного типа (сверточные, pooling) и чудо — сеть классифицирует изображение быстрее и иногда точнее человека. И опять — обучается этому только на данных, фичи выбираются автоматически в ходе обучения. Прекрасно!
Еще перспективный пример — рекуррентые нейронки [15] для чатботов и для моделирования языка [16].
Тем не менее, Amazon релизит [17] продукт, который внутри себя представляет ETL [18] + старую, добрую, «бесплатную» логистическую регрессию! «Безумие» и отвага.

Теория и практика

Жизнь так устроена, что математически хорошо подкованные коллеги обычно пишут на «не очень удобном с точки зрения эксплуатации под высокими нагрузками языке» [19]. При этом эти коллеги — очень умные [20], знают много, множат матрицы в уме и отличают логистическую регрессию от дискриминантного анализа. А опытные опытные опытные инженеры хайлоада, больших данных и энтерпрайза, ангелы DevOps — хорошо программируют в больших объемах и это потом «не протухает», в уме переводят код в ассемблер — но вряд ли даже за отпуск смогут освоить и объяснить на пальцах принцип работы LDA, ссылаясь на Beta-распределение [21]. И не стоит этим матерым бойцам показывать «программирование» в «ipython notebook» — запрут в серверной и заставят переписать код на ANSI C за ночь ;-)
Непонятно пока, что с этим всем делать — Google нанимает ученых со всего мира, сплавляет их с программистами и получаются извращения из смеси python и C++. Программисты нанимают ученых [5] и пишут всю математику на «православной» java и чтобы разобраться в коде, нужно иметь опыт системного программирование лет, эдак, в 10. Но есть все-таки ощущение, что в ближайшие годы начнется интенсивный обмен знаниями и первая группа коллег начнет постигать тайны написания «хорошего кода», а вторая — учиться множить матрицы в памяти :-)
А пока — учимся договариваться, нет выхода.

Что же делать?

Что делать, чтобы разобраться и преуспеть — постоянно учиться и приобретать смежные знания! Хорошие алгоритмы, качественные модели, которые учатся на данных без помощи экспертов — нужны бизнесу, как никогда. Deeplearning очень интенсивно развивается, эта активная область научных исследований и проникает в нашу жизнь все глубже.
Благо, обучая модели на GPU (а эту возможность поддерживают [22] уже многие фреймворки) — можно ускориться раз в 10. Не хватает скорости — стартуем на кластере. TensorFlow умеет это из коробоки, Deeplearning4j — масштабируется на Spark [23].
Да, нужно привыкнуть к научному стилю изложения [24] — но со временем становится понятно, что вариантов Deep Learning архитектур и решаемых ими задач не так уж и много, и постепенно проясняется механика работы каждого класса решений.
Если тебе трудно понять трехэтажные матрицы, описывающие физику нейронок [25] — отложи WorldOfTanks, потрать одни выходные на вводный курс по линейной алгебре и все со временем откроется. Ученые создают модели, а мы, инженеры — их только используем; ну иногда комбинируем.
И никогда не нужно кидаться в крайности. Вот напоследок вкусная и интересная статья, как Google реализовал свою рекомендательную систему для Google Play [26] — видно, что начинали с классического, правда «широкого» классификатора, а закончили Deep&Wide [27] и с неплохими показателями качества модели :-)

Всем удачи, вдохновения, энергии и новых, интересных задач и красивых, эффективных решений!

Автор: AlexSerbul

Источник [28]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/big-data/166750

Ссылки в тексте:

[1] TensorFlow: https://www.tensorflow.org

[2] numpy: http://www.numpy.org/

[3] чуток покодить: https://tensorflow.github.io/serving/serving_basic

[4] bazel: http://www.bazel.io

[5] Deeplearning4j: http://deeplearning4j.org/

[6] тензоры: http://nd4j.org/

[7] причем не только студенты: http://torch.ch/whoweare.html

[8] Luajit: http://luajit.org/

[9] аминь по католически: https://www.lua.org/about.html

[10] демаршем: https://research.googleblog.com/2016/04/deepmind-moves-to-tensorflow.html

[11] DistBelief: https://en.wikipedia.org/wiki/TensorFlow

[12] машинный перевод: http://arxiv.org/abs/1409.3215

[13] Moses: http://www.statmt.org/moses/

[14] машинное зрение: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

[15] рекуррентые нейронки: https://arxiv.org/abs/1503.02364

[16] моделирования языка: http://karpathy.github.io/2015/05/21/rnn-effectiveness/

[17] релизит: https://aws.amazon.com/ru/machine-learning/

[18] ETL: https://ru.wikipedia.org/wiki/ETL

[19] «не очень удобном с точки зрения эксплуатации под высокими нагрузками языке»: https://www.python.org/

[20] очень умные: https://github.com/dennybritz/deeplearning-papernotes

[21] LDA, ссылаясь на Beta-распределение: https://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5_%D0%94%D0%B8%D1%80%D0%B8%D1%85%D0%BB%D0%B5

[22] поддерживают: http://nd4j.org/gpu_native_backends.html

[23] Spark: http://spark.apache.org/

[24] научному стилю изложения: https://www.iro.umontreal.ca/~lisa/pointeurs/TR1312.pdf

[25] физику нейронок: https://www.tensorflow.org/versions/r0.10/resources/dims_types.html

[26] Google Play: http://arxiv.org/pdf/1606.07792v1.pdf

[27] Deep&Wide: https://www.tensorflow.org/versions/r0.10/tutorials/wide_and_deep/index.html

[28] Источник: https://habrahabr.ru/post/307024/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best