Полнейший хаос и бардак.
Экспертов — «в топку»
Но начнем с конца. Стоит ли тратить время на изучение Deep Learning, насколько он нужен бизнесу и что это вообще такое? Вспомним, что «классическое» машинное обучение работает же, и неплохо, но, НО… требуется тщательный выбор и магическо-ненаучные манипуляции с атрибутами с привлечением экспертов в предметной области — а это долго, дорого и хрупко. Всем хочется дать машине данные и чтобы она САМА всему научилась (вот тебе архив с книжками — завтра научись писать новые; вот тебе фотографии — учись рисовать). И не отвлекайся, красавица, работай. И это стало получаться.
Хорошо известные работающие неплохо примеры, которым не нужны эксперты по языку — это машинный перевод. Ну весело же — берем корпус с переводами, учим нейронку и вуаля — она переводит не хуже, а даже лучше чем Moses.
Еще пример, где DeepLearning расцвел в свое красе — машинное зрение. Тоже весело — несколько слоев нейронки разного типа (сверточные, pooling) и чудо — сеть классифицирует изображение быстрее и иногда точнее человека. И опять — обучается этому только на данных, фичи выбираются автоматически в ходе обучения. Прекрасно!
Еще перспективный пример — рекуррентые нейронки для чатботов и для моделирования языка.
Тем не менее, Amazon релизит продукт, который внутри себя представляет ETL + старую, добрую, «бесплатную» логистическую регрессию! «Безумие» и отвага.
Теория и практика
Жизнь так устроена, что математически хорошо подкованные коллеги обычно пишут на «не очень удобном с точки зрения эксплуатации под высокими нагрузками языке». При этом эти коллеги — очень умные, знают много, множат матрицы в уме и отличают логистическую регрессию от дискриминантного анализа. А опытные опытные опытные инженеры хайлоада, больших данных и энтерпрайза, ангелы DevOps — хорошо программируют в больших объемах и это потом «не протухает», в уме переводят код в ассемблер — но вряд ли даже за отпуск смогут освоить и объяснить на пальцах принцип работы LDA, ссылаясь на Beta-распределение. И не стоит этим матерым бойцам показывать «программирование» в «ipython notebook» — запрут в серверной и заставят переписать код на ANSI C за ночь ;-)
Непонятно пока, что с этим всем делать — Google нанимает ученых со всего мира, сплавляет их с программистами
А пока — учимся договариваться, нет выхода.
Что же делать?
Что делать, чтобы разобраться и преуспеть — постоянно учиться и приобретать смежные знания! Хорошие алгоритмы, качественные модели, которые учатся на данных без помощи экспертов — нужны бизнесу, как никогда. Deeplearning очень интенсивно развивается, эта активная область научных исследований и проникает в нашу жизнь все глубже.
Благо, обучая модели на GPU (а эту возможность поддерживают уже многие фреймворки) — можно ускориться раз в 10. Не хватает скорости — стартуем на кластере. TensorFlow умеет это из коробоки, Deeplearning4j — масштабируется на Spark.
Да, нужно привыкнуть к научному стилю изложения — но со временем становится понятно, что вариантов Deep Learning архитектур и решаемых ими задач не так уж и много, и постепенно проясняется механика работы каждого класса решений.
Если тебе трудно понять трехэтажные матрицы, описывающие физику нейронок — отложи WorldOfTanks, потрать одни выходные на вводный курс по линейной алгебре и все со временем откроется. Ученые создают модели, а мы, инженеры — их только используем; ну иногда комбинируем.
И никогда не нужно кидаться в крайности. Вот напоследок вкусная и интересная статья, как Google реализовал свою рекомендательную систему для Google Play — видно, что начинали с классического, правда «широкого» классификатора, а закончили Deep&Wide и с неплохими показателями качества модели :-)
Всем удачи, вдохновения, энергии и новых, интересных задач и красивых, эффективных решений!
Комментарии (50)
Danov
03.08.2016 21:13Это статья — крик души. Печаль… У других работает, а самому тяжело вникнуть. Прям по классике — «Лисица и Виноград»
DrPass
05.12.2016 04:19+3В OLED цвет излучения определяется химическим составом полимера, в QLED цвет определяется физическими характеристиками вкраплений полупроводника. Основное преимущество, по сути, одно — органические полимеры не очень стойкие, и постепенно разрушаются. А для QLED-дисплеев используются твёрдые кристаллы с практически неограниченным сроком службы. Но дорого.
Alex_ME
03.08.2016 21:23+1постоянно учиться и приобретать смежные знания
Кстати про "учиться":
Часто вижу очень интересные вещи, которые нынче делают с нейронными сетями. Распознавание, сверточные сети, Deep Learning.
Что почитать человеку, знания которого в области ИНС заканчиваются на персептроне? Видел множество статей, уроков, которые обещали объяснить относительно понятно все эти вещи, но они каждый раз оканчивались на описании искусственного нейрона.
alex_justes
03.08.2016 21:26+1Начните с курса Machine-learning на coursera. Думаю будет интересно и полезно.
abby
03.08.2016 22:20Не думаю, что там то, о чём спрашивалось, потому что в этом курсе как раз на обычном персептроне все и заканчивается, а свёрточных цепей там нет.
maxpsyhos
05.12.2016 08:42+2Это та-же ЖК-панель, только у каждого суб-пикселя индивидуальная подсветка своего цвета. А яркость регулируется по старинке, по углу поляризации в жидких кристаллах.
AxisPod
05.12.2016 07:24+1Если увеличат срок службы оледов, то да, победит. Если у меня смарт от силы час-полтора в день накручивает, а то и до такого не добирается, то тв часто куда больше. С другой стороны оледы уж очень прекрасно передают чёрный, что собственно и логично.
dizverst
04.08.2016 12:15+1Возможно, заинтересует книжка «Построение систем машинного обучения на языке Python» 2016 года, авторы Луис Педро Коэльо и Вилли Ричарт
KvanTTT
03.08.2016 22:43Нужно научить нейронок писать хороший код.
maxpsyhos
05.12.2016 09:59+3Как показывает практика с LED панелями, не проще :) В ЖК яркость пикселя управляются напряжением, а в точках, как и светодиодах — током, т.е. нужны более мощные и дорогие тонкоплёночные транзисторы.
SKolotienko
04.08.2016 00:12+2http://karpathy.github.io/2015/05/21/rnn-effectiveness/ (пролистайте в середину)
AlexSerbul
04.08.2016 00:26+1А я такую штуку поднимал и код Битрикс на ней генерил, а также «Войну и мир» и «Преступление и наказание» :-) Проблема пока в том, что какой бы тип ячейки рекуррентной сети вы бы не выбрали (LTSM, GRU, plain RNN), сколько бы слоев не ставили — такие модели хреново пока генерят последовательности на основе созданной языковой модели. Об этой проблемке пишет сотрудник Google Brain Team.
elingur
04.08.2016 12:10все верно, с языком сети не будут хорошо работать. Ибо нужно сравнивать не «образы слов» (лексики и ее всевозможных грамматических атрибутов), а семантических образов. А для этого пока есть только одно решение — онтологии. Но и оно пока неподъемно в общем случае. Поэтому если и пытаться запихивать язык в нейросети, то не лоб, а каким-то особым извращенным способом (типа через LDA/LSA и подобное).
AlexSerbul
04.08.2016 12:38+1А можно же так:
1) Из слов сделать эмбеддинги низкой размерости — т.е. соединить близкие слова по контексту
2) Пропустить набор эмбеддингов через рекуррентную сетку для получения семантического образа фразы
3) Затем сравнить семант. образ фразы (вектор), после линейной трансформации (размерность остается той же), с аналогично пропущенной через рекуррентную нейронку фразой из параллельного корпуса
4) Найти близкие фразы через банальный vector dotelingur
04.08.2016 12:47+1Это понятно. Но тут как бы и нейросети и не нужны. Простые векторные модели это неплохо делают. А графические еще лучше. Т.е. получив «близкие слова», дальше уже масса вариантов их использования. Но вот получить их получается только «под задачу» — зависит от корпуса. А хочется «как в жизни»…
AlexSerbul
04.08.2016 12:49А как простые векторные модели могут сохранить контекст текста до? Рекуррентные сети — могут.
elingur
04.08.2016 12:56ну не совсем простые, на каждое слово вектор, т.е. матрицы сравниваются, типа термы-документы, но уже не разряженые.
AlexSerbul
04.08.2016 12:58А, после SVD которые? Ну там синонимы или близкие слова становятся одной колоночкой. Но контекст именно предложения они хранят как бы статически — т.е. набором слов. Ну можно еще завернуть на них сверточную сеть (фильтры) — но эта будет статика как не крути. А рекуррентные нейронки могут строить внутри себя смысловое представление последовательности предложений, прикольная возможность.
elingur
04.08.2016 13:08+1Можно и без SVD, можно и pLSA. А последовательность можно хранить, применив n-gramm, или что-то типа PMI. С предложениями тяжело, конечно, будет. Но их и не нужно. Важны только ключевые термы. То есть, нейросети в чистом виде не очень интересны для языка. Другое дело гибридные, когда какую-нить Байесовскую сеть можно запихнуть для оптимизации результатов CRF. Или CNN для уменьшения размерности параметрического пространства. Мне кажется это перспективнее.
AStek
04.08.2016 00:33+2Пользуясь случаем хочу попросить посоветовать онлайн курсы по математике, где-то институтского уровня но «для чяйников». Желательно такие где можно материалы проходить не по календарю а по наличию времени. Заранее спасибо.
mbait
04.08.2016 02:20+1Просто это сейчас тренд со всеми вытекающими. Отмотайте время на 20 лет назад, и увидите как люди сочинают оды изяществу и эффективности ООП (выражение "design pattern" из нарицательного стало чуть ли не собственным), а про e-commerce говорят, что перевернёт мир, магазины закроются, всё будут покупать только в интернете, тысячи уволенных продавцов выйдут на улицу с факелами и вилами. Возникает over 9000 стартапов, которые пытаются вывести всё и вся в онлайн. Мы все знаем, что потом произошло с теми ребятами в марте 2000. Теперь возращайтесь в наше время, выполняйте подстановку ООП -> ФП и e-commerce -> machine learning — ничего не изменилось. Как только машинное обучение перестанет быть на слуху (а для этого обязательно нужно найти замену), всё встанет на свои места. Но скорее всего третьей волны уже не будет.
AlexSerbul
04.08.2016 12:41Да, была AI winter, помним, но с 2006 года прорыв же в качестве моделей случился, машинное зрение стало быстрее и лучше работать и заменять людей и не только в этой области
kvark
04.08.2016 02:28+1Если хотите красиво и быстро, есть (была?..) ещё такая штука на Rust: http://autumnai.com/
0xd34df00d
04.08.2016 06:52+1А ещё есть диплёрнинг на хаскеле, как пример.
А ещё есть просто красивое, изящное и алгебраичное машинное обучение. А раз алгебраичное — то уж сам Ф-р велел тоже писать на хаскеле.
А ещё можно упороться и вывести байесовский вывод (pun intended) через категориальный подход. Отложи свою линейную алгебру после отложенных танчиков, это куда круче и приятнее.AlexSerbul
04.08.2016 12:43Да смотрел я haskel, как и Scala — глубоко, серьезно, по-совести. И отложил. На python, да, императивном, извращенном, но тем не менее куча библиотек и графики легко рисовать быстро.
tzps
04.08.2016 12:14+1Замечу, DeepLearning4j — это не совсем Java. Все что касается интерфейсов — Java 1.7 и Scala. А все что касается тензоров — C++, с OpenMP и CUDA. И не исключено, что в ближайшем будущем OpenCL может появиться.
tzps
04.08.2016 12:19+2P.s. Я — один из разработчиков DL4j/ND4j. Буду рад ответить на вопросы, если таковые у кого появятся.
AlexSerbul
04.08.2016 12:48Добрый день! Хотел спросить как можно просто в DL4j в обучаемом с автоматическим диффиренцированием графе после нейронки и получения на выходе нейронки вектора, выполнить его линейную трансформацию с помощью квадратной матрицы — но так, чтобы веса матрицы обучались.
tzps
04.08.2016 12:55+1Начать можно с того, что AD не реализован на данный момент :(
P.s. В планах — есть. Но не приоритетная задача.AlexSerbul
04.08.2016 13:00Видимо тогда можно попробовать решить через сукблассирование слоя обычной однослойной сети без сигмоида на выходе.
AlexSerbul
04.08.2016 12:46Да, согласен, вы правы. Но java как платформа со строгой типизацией, отличным jit и великолепной стандартной библиотекой выглядит привлекательно. А вот Scala, как замена python — вот где она мать ее? :-) Spark просиял, Akka — а дальше что? Где фреймворк машинного обучения на ней?
tzps
04.08.2016 12:50+2DL4j совместим с Scala, и прямо сейчас переписываются ND4s (Scala версия ND4j) и аналогичные работы по DL4j Scala ведутся :)
Так что возможно DL4j и станет таким фреймворком. По крайней мере людей использующих Scala я вижу в саппорт чате постоянно.
APXAHGEL
04.08.2016 12:14Народ, может кто кинуть ссылку на какой-нить туториал по свёрточным нейронным сетям для распознавания картинок (MNIST хотя бы), или поиска объекта на изображении, но обязательно на С++, python ради этого не хочется учить. Прям не могу найти, хоть тема и должна бы быть уже избита.
temp
04.08.2016 13:01+5Есть опыт работы с ANN в production системах. Текущий подход, где используется обучение с gradient descent, подходит для определенного типа задач. Идея в том, чтобы прогнать множество итераций с обучающим набором, чтобы получить достаточный уровень ошибки. В итоге получим распознавание паттернов, для определенного типа задач. Но проблема в добавлении новых знаний в существующую сеть. Неэффективно прогонять многие итерации обучения, чтобы добавить крупицу нового знания. Пока пытаются решить проблему one shot learning костылями типа Neural Turing Machine, но имхо это забивание гвоздей микроскопом. Более интересно совместить вероятностные подходы с ANN, например с Gaussian Processes и Deep Reinforcement Learning. Это уже применяется в робототехнике, но есть нюансы работы с широкими слоями ANN. Вообще, если следить за темой, то основные идеи меняются не быстро. С другой стороны, на хайпе нейросетей сейчас каждый ученый и его тетя пишут научные статьи, создавая илюзию стремительно меняющейся области. Особенно преуспели в том деле китайские товарищи, выдавая тонны г*вно статей на гора.
Vanger13
04.08.2016 14:23+1Очень забавный тайминг у статьи :) Как раз пытаюсь подружить как-нибудь Caffe с JVM, причем нужно только «feed forward» — классификация без обучения. И очень желательно дергать её не напрямую а её питоновскую обвязку. Кто-нибудь извращался? :\
lizarge
О чем ваша статья? я вижу 4 абзаца сумбурного потока сознания, c непорядочными сумбурными ссылками.
Где искать решение проблем, какой подход верный? Может вы предлагаете ссылку на свой git с С++ реализацией медленных Python вставок в готовых реализациях?
Особенно порадовал вывод в секции «Что же делать?» в стиле лабораторной работы, и совет завязывать с танками, пост написан танкистом в завязке?
HOMPAIN
Непонятно чем обычный OLED хуже квантовых точек и чем вообще отличается?
RockPresident
Как человеку только начинающему изучать практическую сторону реализации ML алгоритмов, статья несёт очень много информации которую не так легко получить где-то ещё.
Каждый раз когда человек начинает входить в новую сферу со своим набором инструментов, в нём бывает очень сложно разобраться. Иногда эта сложность диктуется самой сложностью предметной области и необходимостью наличиая такого количества разных инструментов. Иногда суть просто в том что есть пара-тройка хороших инструментов, а остальные по сути представляют из себя маркетинг. Иногда бывает так что просто разработчики в этой области вполне конкретно разделились на несколько лагерей основываясь на конкретных несогласиях (в таких случаях хорошо бы в этих несогласиях отлично разобраться, ведь вполне может быть что человек в результате сможет видеть себя только в одном из этих лагерей и ни за что в другом, даже ещё не разобравшись в самой области).
Без таких статей как ваша различать все эти случаи в незнакомой области — не так-то просто или быстро. С подобной точки зрения не так-то часто и пишут. И куча времени может уйти на знакомство со ВСЕМИ инструментами, и потом собственное выстраивание выводов (с каким же работать блин???) которые здесь можно прочитать за 5 минут.
Я к чему, спасибо за статью, полезной информации в ней не то что есть, её МНОГО! И даже ваш стиль с многими точечными упоминаниями даже отдельных алгоритмов, или примеров применения, или даже просто парыми слов о вашей отдельной эмоциональной реакции к конкретным решениям — это очень круто и сюда подходит. Это не структурированная информация или мануал. Это набор маленьких частичек информации, но их очень много. Если не реагировать на то что формат не очень стандартный а просто воспринимать информацию, то тут очень круто. )