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

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

Экспертов — «в топку»
Но начнем с конца. Стоит ли тратить время на изучение Deep Learning, насколько он нужен бизнесу и что это вообще такое? Вспомним, что «классическое» машинное обучение работает же, и неплохо, но, НО… требуется тщательный выбор и магическо-ненаучные манипуляции с атрибутами с привлечением экспертов в предметной области —, а это долго, дорого и хрупко. Всем хочется дать машине данные и чтобы она САМА всему научилась (вот тебе архив с книжками — завтра научись писать новые; вот тебе фотографии — учись рисовать). И не отвлекайся, красавица, работай. И это стало получаться.
Хорошо известные работающие неплохо примеры, которым не нужны эксперты по языку — это машинный перевод. Ну весело же — берем корпус с переводами, учим нейронку и вуаля — она переводит не хуже, а даже лучше чем Moses.
Еще пример, где DeepLearning расцвел в свое красе — машинное зрение. Тоже весело — несколько слоев нейронки разного типа (сверточные, pooling) и чудо — сеть классифицирует изображение быстрее и иногда точнее человека. И опять — обучается этому только на данных, фичи выбираются автоматически в ходе обучения. Прекрасно!
Еще перспективный пример — рекуррентые нейронки для чатботов и для моделирования языка.
Тем не менее, Amazon релизит продукт, который внутри себя представляет ETL + старую, добрую, «бесплатную» логистическую регрессию! «Безумие» и отвага.Теория и практика
Жизнь так устроена, что математически хорошо подкованные коллеги обычно пишут на «не очень удобном с точки зрения эксплуатации под высокими нагрузками языке». При этом эти коллеги — очень умные, знают много, множат матрицы в уме и отличают логистическую регрессию от дискриминантного анализа. А опытные опытные опытные инженеры хайлоада, больших данных и энтерпрайза, ангелы DevOps — хорошо программируют в больших объемах и это потом «не протухает», в уме переводят код в ассемблер —, но вряд ли даже за отпуск смогут освоить и объяснить на пальцах принцип работы LDA, ссылаясь на Beta-распределение. И не стоит этим матерым бойцам показывать «программирование» в «ipython notebook» — запрут в серверной и заставят переписать код на ANSI C за ночь ;-)
Непонятно пока, что с этим всем делать — Google нанимает ученых со всего мира, сплавляет их с программистами и получаются извращения из смеси python и C++. Программисты нанимают ученых и пишут всю математику на «православной» java и чтобы разобраться в коде, нужно иметь опыт системного программирование лет, эдак, в 10. Но есть все-таки ощущение, что в ближайшие годы начнется интенсивный обмен знаниями и первая группа коллег начнет постигать тайны написания «хорошего кода», а вторая — учиться множить матрицы в памяти :-)
А пока — учимся договариваться, нет выхода.Что же делать?
Что делать, чтобы разобраться и преуспеть — постоянно учиться и приобретать смежные знания! Хорошие алгоритмы, качественные модели, которые учатся на данных без помощи экспертов — нужны бизнесу, как никогда. Deeplearning очень интенсивно развивается, эта активная область научных исследований и проникает в нашу жизнь все глубже.
Благо, обучая модели на GPU (а эту возможность поддерживают уже многие фреймворки) — можно ускориться раз в 10. Не хватает скорости — стартуем на кластере. TensorFlow умеет это из коробоки, Deeplearning4j — масштабируется на Spark.
Да, нужно привыкнуть к научному стилю изложения —, но со временем становится понятно, что вариантов Deep Learning архитектур и решаемых ими задач не так уж и много, и постепенно проясняется механика работы каждого класса решений.
Если тебе трудно понять трехэтажные матрицы, описывающие физику нейронок — отложи WorldOfTanks, потрать одни выходные на вводный курс по линейной алгебре и все со временем откроется. Ученые создают модели, а мы, инженеры — их только используем; ну иногда комбинируем.
И никогда не нужно кидаться в крайности. Вот напоследок вкусная и интересная статья, как Google реализовал свою рекомендательную систему для Google Play — видно, что начинали с классического, правда «широкого» классификатора, а закончили Deep&Wide и с неплохими показателями качества модели :-)

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

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

  • 3 августа 2016 в 21:06

    +3

    О чем ваша статья? я вижу 4 абзаца сумбурного потока сознания, c непорядочными сумбурными ссылками.
    Где искать решение проблем, какой подход верный? Может вы предлагаете ссылку на свой git с С++ реализацией медленных Python вставок в готовых реализациях?

    Особенно порадовал вывод в секции «Что же делать?» в стиле лабораторной работы, и совет завязывать с танками, пост написан танкистом в завязке?

    • 3 августа 2016 в 23:31

      0

      О чем статья? О бардаке и перетягивании одеяла :-) Хочется надеяться, что ситуация выровняется в лучшую сторону.
  • 3 августа 2016 в 21:13

    +1

    Это статья — крик души. Печаль… У других работает, а самому тяжело вникнуть. Прям по классике — «Лисица и Виноград»
    • 3 августа 2016 в 23:32

      0

      Обижаете. У нас тоже работает и нет проблем с пониманием темы. Проблематика в другом немного, жаль что не удалось ее донести.
  • 3 августа 2016 в 21:23

    +1

    постоянно учиться и приобретать смежные знания

    Кстати про «учиться»:
    Часто вижу очень интересные вещи, которые нынче делают с нейронными сетями. Распознавание, сверточные сети, Deep Learning.


    Что почитать человеку, знания которого в области ИНС заканчиваются на персептроне? Видел множество статей, уроков, которые обещали объяснить относительно понятно все эти вещи, но они каждый раз оканчивались на описании искусственного нейрона.

    • 3 августа 2016 в 21:26

      +1

      Начните с курса Machine-learning на coursera. Думаю будет интересно и полезно.
      • 3 августа 2016 в 21:28

        0

        Спасибо.

      • 3 августа 2016 в 22:20

        0

        Не думаю, что там то, о чём спрашивалось, потому что в этом курсе как раз на обычном персептроне все и заканчивается, а свёрточных цепей там нет.
      • 3 августа 2016 в 23:33

        0

        Этот курс требует от слушателя определенного начального уровня вхождения, причем не маленького. Инженер вряд ли врубится с ходу.
  • 3 августа 2016 в 22:43

    0

    Нужно научить нейронок писать хороший код.

© Habrahabr.ru