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

в 17:08, , рубрики: big data, BigData, 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 и с неплохими показателями качества модели :-)

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

Автор: AlexSerbul

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js