Нейронные сети – один из классических инструментов из области Machine Learning или, более широко, Data Science. Понятие «нейронные сети» можно трактовать в широком и узком смысле. В узком смысле – это определенные схемы обработки данных, включающие в себя модели нейрона: многослойные перцептоны (Multilayer Perceptrons), сети радиальных базисных функций (Radial Basis Function Networks), глубокие нейронные сети (Deep Neural Networks) и др. В широком смысле это любые модели, способные обучаться на данных, в том числе и такие, в которых нейронов как таковых, представленных в явном виде, нет вообще – к примеру, машины опорных векторов (Support Vector Machines).
Зачем нужны нейронные сети?
Нейронные сети применяются в случаях, когда невозможно четко и точно определить метод решения задачи, но есть в наличии примеры такого решения. Это, пожалуй, наиболее распространенный кейс применения ИНС.
Допустим, нам нужно решить задачу классификации овощей. Если мы можем установить видеокамеру и придумать для нее простое аналитическое правило, к примеру: зеленое и длинное – это огурец, красное и круглое – это помидор, то нейронные сети тут не нужны.
Если же у нас есть примеры решения задачи (примеры данных некоторого множества овощей с указанием принадлежности их к первому или второму классу), но мы не можем придумать определенные критерии для их классификации – то возможно предложить такие данные нейронным сетям, которые обучатся на них и смогут проводить подобную классификацию самостоятельно.
Мне понравилось, как машинное обучение охарактеризовал глава маркетингового отдела Яндекс Андрей Себрант в ходе своего выступления на конференции Lviv IT Arena’2014. Он задался вопросом: чем Data Science, машинное обучение и нейронные сети в частности отличаются от других наук? По его выражению, в математике, физике, химии или гуманитарных дисциплинах человек “проникает умом” в суть феномена – строит его формулу и по ней получает результат. Отличие же Machine Learning и Data Science в целом заключается в том, что всю интеллектуальную ношу мы перекладываем на модели, которые решают эти задачи, не обязательно понимая при этом, как именно они работают. То есть, подход к использованию дисциплины отличается кардинально. И поэтому это – истинная наука XXI века.
Нейронные сети — Ваша “вишенка на торте”
Вообще, нейронная сеть – это универсальная машинка, способная работать с разными данными: графическими, звуковыми, текстовыми. Если вы пользуетесь телефоном на базе Android, на нем есть функция распознавания слов, она также построена на нейронных сетях — выходит, вы каждый день носите нейронную сеть у себя в кармане.
В качестве еще одного реального и очень практического примера применения нейронных сетей могу привести наш стартап ZZ Photo, где я в настоящее время работаю на позиции руководителя направления Computer Vision. Задачей ZZ Photo является удобная организация и хранение фотографий на компьютере. Мое небольшое подразделение занимается разработкой и иплементацией различных интеллектуальных функций: это, прежде всего, распознавание лиц людей на фото, а также распознавание сцен, детекция домашних животных, поиск отсканированных документов. Для всех этих задач мы используем различные модели нейронных сетей и методов машинного зрения.
Помимо чисто практической необходимости решить определенную нужную пользователям задачу (скажем, выполнить распознавание лиц), такого рода функционал – хорошее подспорье в раскрутке и маркетинге продукта. Можно сказать, что сейчас это некий тренд, иметь в своем продукте эдакую «вишенку на торте», интересность, которую можно раскручивать и пиарить.
Вот вам вопрос: кому реально нужна функция распознавания отпечатков пальцев на IPhone? Ей почти никто не пользуется, тем не менее, это модно, а производителями преподносится как некое «Уау!». Это отличный повод для PR-отдела разослать пресс-релиз о новой супер-функции с высоким для него шансом быть опубликованным.
Недавно наш проект выиграл главный приз в номинации “Best Interactive Startup” на конференции стартапов IDCEE 2014, и мне, как руководителю команды Computer Vision, нравится думать, что определенные очки были получены за счет наличия в нашем продукте интересных интеллектуальных функций.
Программирование vs Data Science
Несмотря на энтузиазм и развивающийся рынок Data Science, количество программистов у нас несопоставимо больше, нежели специалистов в области анализа данных. Это приводит к тому, что девелоперам ставят задачи из области Data Science, что вызывает у них когнитивный диссонанс, фрустацию, неверие в успех и итоговый “эпик фейл”, даже при наличии хороших готовых алгоритмов и программных библиотек.
Дело в том, что специфика подготовки интеллектуальных приложений, связанных с распознаванием и прогнозированием, разительно отличается от процесса написания обычного программного кода. Функции, которые разрабатывает программист, фактически детерминированы, а модели на нейронных сетях носят вероятностный характер – точность в 100%, как правило, в такого рода задачах никогда не достигается.
Поэтому, если программисту часто достаточно один раз проверить код на работоспособность и результат бинарен (работает/не работаеит), то data scientist’у нужно попробовать (естественно, автоматически), например, тысячу или более примеров с целью убедиться, что данная модель распознавания образов работает исправно.
В связи с этим иногда возникает проблема переобучения (overfitting), когда вы “затачиваете” модель под маленькую группу примеров. Программист с обычным детерминированным подходом, грубо говоря, обучит модель на примере одного огурца и одного помидора, и такая модель будет работать только на этих примерах.
Подобных ловушек для начинающих существует еще множество. О наиболее частых я ранее написал статью “Нейронные сети, вредные советы”.
Я надеюсь, что ресурс DataReview поможет образованию программистов в культуре работы с данными и вижу в этом одну из его главных функций.
Артем Чернодуб для Datareview.info