«Крутой data scientist получает как гендиректор средней компании». Эксперт по машинному обучению «Яндекс.Такси» — о том, как данные предсказывают будущее и формируют мир

В рамках совместного с МФТИ проекта «Азбука ИИ» мы уже писали о так называемых , которые позволяют «выращивать» программы по принципам и законам дарвиновской эволюции. Однако пока такой подход к искусственному интеллекту это, безусловно, «гость из будущего». Но как системы искусственного интеллекта создают сегодня? Как их обучают? В этом нам помог разобраться Виктор Кантор, старший преподаватель кафедры алгоритмов и технологий программирования МФТИ, руководитель группы анализа пользовательского поведения Yandex Data Factory.

Согласно недавнему отчету исследовательской компании Gartner, которая регулярно обновляет свой «цикл зрелости технологий», на сегодняшний день из всего IT на пике ожиданий находится именно машинное обучение. Это неудивительно: за последние несколько лет машинное обучение вышло из сферы интересов узкого круга математиков и специалистов по теории алгоритмов и проникло сначала в словарь IT-бизнесменов, а затем и в мир обывателей. Сейчас о том, что существует такая вещь, как нейросети с их особой «магией», знает любой, кто пользовался приложением Prisma, искал песни с помощью Shazam или видел изображения, прошедшие через DeepDream.

Однако одно дело - пользоваться технологией, а другое - понимать, как она работает. Общие слова вроде «компьютер может научиться, если ему дать подсказку» или «нейросеть состоит из цифровых нейронов и устроена наподобие мозга человека» кому-то, возможно, и помогают, но чаще только запутывают ситуацию. Тем же, кто собирается серьезно заниматься матобучением, популярные тексты не нужны: для них есть учебники и прекрасные онлайн-курсы . Мы попробуем пройти средним путем: объяснить, как на самом деле происходит обучение на максимально простой задаче, а затем показать, как этот же подход можно применить для решения реальных интересных проблем.

Как учатся машины

Для начала, чтобы разобраться с тем, как именно происходит машинное обучение, определимся с понятиями. По определению одного из пионеров этой области Артура Самуэля , к машинному обучению относятся методы, которые «позволяют компьютерам учиться без их непосредственного программирования». Существуют два обширных класса методов машинного обучения: обучение с учителем и обучение без учителя. Первое применяется тогда, когда нам, например, нужно научить компьютер искать фотографии с изображением котиков, второе - когда нам надо, чтобы машина, например, смогла самостоятельно группировать новости в сюжеты, как это происходит в сервисах вроде Яндекс.Новостей или Google News. То есть в первом случае мы имеем дело с задачей, которая подразумевает существование правильного ответа (кот на фото или есть, или нет), во втором - единственного правильного ответа нет, а есть разные способы решения задачи. Мы сосредоточимся именно на первом классе задач как на наиболее интересном.

Итак, нам нужно научить компьютер делать некоторые предсказания. Причем, желательно, как можно более точные. Предсказания могут быть двух типов: либо надо выбрать между несколькими вариантами ответа (есть на снимке кот или нет - это выбор одного варианта из двух, умение распознавать буквы на изображениях - это выбор одного варианта из нескольких десятков и так далее), либо сделать численное предсказание. Например, предсказать вес человека на основании его роста, возраста, размера обуви и так далее. Два типа этих задач только выглядят непохожими, на самом деле они решаются почти одинаково. Попробуем понять, как именно.

Первое, что нам необходимо, чтобы сделать систему предсказания, это собрать так называемую обучающую выборку, то есть данные о весе людей в популяции. Второе - определиться с набором признаков, на основании которых мы можем делать выводы о весе. Понятно, что одним из самых «сильных» таких признаков будет рост человека, поэтому в первом приближении достаточно взять только его. Если вес зависит от роста линейно, то наше предсказание будет очень простым: вес человека будет равен его росту, умноженному на какой-то коэффициент, плюс какая-то постоянная величина, что записывается простейшей формулой y=kx+b. Все, что нам нужно сделать, чтобы обучить машину предсказывать вес человека, это как-то найти правильные величины k и b.

Прелесть машинного обучения в том, что даже если зависимость, которую мы изучаем, очень сложная, в самом нашем подходе по сути почти ничего не поменяется. Мы по-прежнему будем иметь дело с той же самой регрессией.

Допустим, на вес человека его рост влияет не линейно, а в третьей степени (что вообще-то говоря ожидаемо, ведь вес зависит от объема тела). Чтобы учесть эту зависимость, мы просто вносим в наше уравнение еще один член, а именно третью степень роста с собственным коэффициентом, получая при этом y=k 1 x+k 2 x 3 +b. Теперь, чтобы обучить машину, нам нужно будет найти не две, а три величины (k 1, k 2 и b). Допустим, мы хотим в нашем предсказании учитывать еще и размер обуви человека, его возраст, время, проведенное им у телевизора, и расстояние от его квартиры до ближайшей точки фаст-фуда. Никаких проблем: мы просто вносим эти признаки как отдельные члены в то же самое уравнение.

Самое главное - создать универсальный способ находить нужные коэффициенты (k 1 , k 2 , … k n). Если он есть, нам будет почти безразлично, какие использовать признаки для предсказания, ведь машина сама обучится придавать большой вес важным, и маленький - неважным признакам. К счастью, такой метод уже придуман и на нем успешно работает почти все машинное обучение: от простейших линейных моделей до систем распознавания лиц и анализаторов речи. Называется этот метод градиентным спуском. Но прежде чем объяснить, как он работает, надо сделать небольшое отступление и рассказать про нейросети.

Нейросети

В 2016 году нейросети настолько плотно вошли в информационную повестку, что стали чуть ли не идентифицироваться с любым машинным обучением и продвинутым IT вообще. Формально говоря, это неверно: нейросети в матобучении используются далеко не всегда, есть и другие технологии. Но в целом, конечно, такая ассоциация понятна, ведь именно системы на основе нейросетей сейчас дают самые «магические» результаты вроде возможности поиска человека по фотографии, появления приложений, переносящих стиль одного изображения на другое, или систем генерации текстов в манере речи определенного человека.

То, как устроены нейросети, мы уже . Здесь только хочется подчеркнуть, что сила нейросетей по сравнению с другими системами машинного обучения заключена в их многослойности, но это не делает их чем-то принципиально отличным по способу работы. Многослойность действительно позволяет находить очень абстрактные общие особенности и зависимости в сложных наборах признаков, вроде пикселей на картинке. Но важно понимать, что с точки зрения принципов обучения нейросеть ничем радикально не отличается от набора обычных формул линейной регрессии, поэтому тот же самый метод градиентного спуска прекрасно работает и здесь.

«Сила» нейросети заключается в наличии промежуточного слоя нейронов, которые суммируя комбинируют значения входного слоя. Из-за этого нейросети могут находить очень абстрактные особенности данных, которые сложно свести к простым формулам вроде линейной или квадратичной зависимости.

Поясним на примере. Мы остановились на предсказании, в котором вес человека зависит от его роста и роста в кубе, что выражается формулой y=k 1 x+k 2 x 3 +b. С некоторой натяжкой, но фактически даже такую формулу можно назвать нейросетью. В ней, как и в обычной нейросети, есть первый слой «нейронов», он же слой признаков: это x и x 3 (ну и «единичный нейрон», который мы держим в уме и за который отвечает коэффициент b). Верхний, или результирующий, слой представлен одним «нейроном» y, то есть предсказанным весом человека. А между первым и последним слоем «нейронов» есть связи, сила или вес которых определяется коэффициентами k 1 , k 2 и b. Обучить эту «нейросеть» означает просто найти эти самые коэффициенты.

Единственное отличие от «настоящих» нейросетей тут в том, что у нас нет ни одного промежуточного (или скрытого) слоя нейронов, задача которых - комбинировать входные признаки. Введение таких слоев позволяет не выдумывать «из головы» возможные зависимости между имеющимися признаками, а полагаться на их уже существующие комбинации в нейросети. Например, возраст и среднее время перед телевизором могут оказывать синергетическое влияние на вес человека, но, имея нейросеть, мы не обязаны это знать заранее и вносить их произведение в формулу. В нейросети обязательно найдется нейрон, комбинирующий влияние любых двух признаков, и если это влияние действительно ощутимо на выборке, то после обучения этот нейрон автоматически получит большой вес.

Градиентный спуск

Итак, мы имеем обучающую выборку примеров с известными данными, то есть таблицу с точно измеренным весом человека, и некоторую гипотезу зависимости, в данном случае линейную регрессию y=kx+b. Наша задача заключается в том, чтобы найти правильные величины k и b, причем не вручную, а автоматически. И желательно, универсальным методом, который не зависит от количества параметров, включаемых в формулу.

Сделать это, в общем, несложно. Главная идея заключается в том, чтобы создать некую функцию, которая будет измерять текущий суммарный уровень ошибки и «подкручивать» коэффициенты таким образом, чтобы суммарный уровень ошибки постепенно падал. Как сделать, чтобы уровень ошибки падал? Нужно подкручивать наши параметры в нужную сторону.

Представьте два наших параметра, которые мы ищем, те самые k и b, как два направления на плоскости, как оси север-юг и запад-восток. Каждой точке на такой плоскости будет соответствовать определенное значение коэффициентов, определенная конкретная зависимость между ростом и весом. И для каждой такой точки на плоскости можно посчитать суммарный уровень ошибок, который дает это предсказание на каждом из примеров в нашей выборке.

Получается что-то вроде конкретной высоты на плоскости, а все окружающее пространство начинает напоминать горный ландшафт. Горы - это точки, где уровень ошибок очень высокий, долины - это места, где ошибок меньше. Понятно, что обучить нашу систему означает найти самую низкую точку на местности, точку, где уровень ошибок минимален.

Как можно найти эту точку? Самый правильный способ - двигаться все время вниз из той точки, где мы исходно оказались. Так рано или поздно мы придем в локальный минимум - точку, ниже которой в ближайшей окрестности ничего нет. Причем желательно делать шаги разного размера: когда уклон крутой, можно шагать шире, когда уклон небольшой, то лучше подкрадываться к локальному минимуму «на цыпочках», иначе можно и проскочить.

Именно так работает метод градиентного спуска: мы меняем веса признаков в направлении наибольшего падения функции ошибки. Меняем их итерационно, то есть с неким шагом, величина которого пропорциональна крутизне уклона. Что интересно, при увеличении числа признаков (добавлении куба роста человека, его возраста, размера обуви и так далее) по сути ничего не меняется, просто наш ландшафт становится не двумерным, а многомерным.

Функцию ошибки можно определить как сумму квадратов всех отклонений, которые текущая формула допускает по отношению к людям, чей вес нам уже точно известен. Возьмем какие-то случайные величины k и b, например 0 и 50. Тогда система будет нам предсказывать, что вес каждого человека в выборке всегда равен 50 килограммам y=0×x+50 На графике такая зависимость будет выглядеть как прямая, параллельная горизонтали. Понятно, что это не очень хорошее предсказание. Теперь возьмем отклонение в весе от этого предсказанного значения, возведем ее в квадрат (чтобы отрицательные значения тоже учитывались) и просуммируем - это и будет ошибка в данной точке. Если вам знакомы начала анализа, то можно даже уточнить, что направление наибольшего падения задается частной производной функции ошибки по k и b, а шаг - это величина, которая выбирается из практических соображений: мелкие шаги занимают много времени на вычисления, а большие могут привести к тому, что мы проскочим мимо минимума.

Хорошо, а если у нас не просто сложная регрессия с множеством признаков, а настоящая нейросеть? Как нам применить градиентный спуск в таком случае? Оказывается, что и с нейросетью градиентный спуск работает точно так же, только обучение происходит 1) поэтапно, от слоя к слою и 2) постепенно, от одного примера в выборке к другому. Метод, который здесь применяется, называется алгоритмом обратного распространения ошибки, он был независимо описан в 1974 году советским математиком Александром Галушкиным и математиком из Гарвардского университета Полом Джоном Вебросом (Paul John Webros).

Хотя для строгого изложения алгоритма потребуется выписывать частные производные (как, например, ), на интуитивном уровне все происходит довольно просто: для каждого из примеров в выборке мы имеем на выходе нейросети некое предсказание. Имея правильный ответ, мы можем вычесть из предсказания правильный ответ и получить, таким образом, ошибку (точнее набор ошибок для каждого нейрона выходного слоя). Теперь нам нужно передать эту ошибку предыдущему слою нейронов, причем чем бóльшую лепту данный конкретный нейрон этого слоя внес в ошибку, тем сильнее нам надо уменьшить его вес (фактически, речь снова идет о взятии частной производной, о движении по максимальной крутизне нашего воображаемого ландшафта). Когда мы это сделали, ту же процедуру нужно повторить для следующего слоя, двигаясь в обратном направлении, то есть от выхода нейросети ко входу.

Проходя таким образом нейросеть с каждым примером обучающей выборки и «подкручивая» веса нейронов в нужном направлении, мы в конце концов должны получить обученную нейросеть. Метод обратного распространения ошибки является простой модификацией метода градиентного спуска для многослойных нейросетей и поэтому должен работать для нейросетей любой сложности. Мы говорим здесь «должен», потому что на самом деле встречаются случаи, когда градиентный спуск дает сбои и не позволяет сделать хорошую регрессию или обучить нейросеть. О том, из-за чего возникают подобные трудности, бывает полезно знать.

Трудности градиентного спуска

Неправильный выбор абсолютного минимума. Метод градиентного спуска помогает искать локальный экстремум. Но мы не всегда с его помощью можем достичь абсолютного глобального минимума или максимума функции. Это происходит потому, что при движении по антиградиенту мы останавливаемся в тот момент, когда достигаем первый встретившийся нам локальный минимум, и алгоритм прекращает свою работу.

Представьте, что вы стоите на вершине горы. Если вы хотите спуститься в самую низкую поверхность в округе, метод градиентного спуска не всегда сможет вам помочь, ведь первая низина на вашем пути не обязательно будет самой низкой точкой. И если в жизни вы способны увидеть, что стóит немного подняться и вы сможете потом опуститься еще ниже, то алгоритм в такой ситуации просто остановится. Часто такой ситуации можно избежать, если правильно выбрать шаг.

Неправильный выбор шага. Метод градиентного спуска - итерационный метод. То есть нам самим нужно выбрать величину шага - скорость, с которой мы спускаемся. Выбрав слишком большой шаг, мы можем пролететь мимо нужного нам экстремума и не найти минимума. Это может произойти, если вы окажетесь перед очень резким спуском. А выбор слишком маленького шага грозит крайне медленной работой алгоритма, если мы окажемся на относительно ровной поверхности. Если снова представить, что мы находимся на вершине отвесной горы, то может получиться ситуация, когда из-за очень крутого спуска вблизи минимума мы его просто пролетим.

Паралич сети. Иногда случается так, что методом градиентного спуска вообще не удается найти минимума. Это может произойти в случае, если с двух сторон от минимума будут находиться ровные участки – алгоритм, попав на плоский участок, уменьшает шаг и со временем останавливается. Если, стоя на вершине горы, вы решите двигаться к вашему дому в низине, путь может оказаться слишком долгим, если вы случайно забредете на очень ровный участок. Или, если по краям от плоских участков находятся практически отвесные «склоны», алгоритм, выбрав очень большой шаг, будет прыгать от одного склона к другому, практически не продвигаясь к минимуму.

Все эти сложные моменты должны учитываться при проектировании системы машинного обучения. Например, всегда бывает полезно отслеживать, как именно меняется функция ошибки со временем - падает ли она с каждым новым циклом или топчется на месте, как меняется характер этого падения в зависимости от изменения величины шага. Чтобы избегать попадания в плохой локальный минимум, бывает полезно стартовать с разных случайно выбранных точек ландшафта - тогда вероятность застрять гораздо ниже. Есть еще много больших и маленьких секретов обращения с градиентным спуском, есть и более экзотичные способы обучения, слабо похожие на градиентный спуск. Это, однако, уже тема другого разговора и отдельной статьи в рамках проекта «Азбука ИИ».

Подготовил Александр Ершов

Практически год прошел с того момента, как на ФИВТе стартовал необычный предмет – инновационный практикум. Его суть – создание студенческими командами IT-стартапов под руководством опытных наставников. Получилось неплохо: благодаря курсу кто-то провел часть лета в Кремиевой долине, кто-то получил грант в размере 800 000 рублей на развитие проекта, у кого-то ABBYY готова полностью выкупить проект. И это далеко не все результаты практикума!

В начале 2011 года третьекурсников ФИВТа собрали в Актовом зале и сообщили: в течение следующего года вам необходимо будет создать свой собственный стартап. Студенты восприняли эту идею неднозначно: не было понятно, как вообще это делать, да и ответственность непривычная – всё-таки надо было сделать технологический бизнес, а не очередной учебный проект. Вот что об этом думает призер студенческой олимпиады МФТИ по физике, студент кафедры «Яндеска» Виктор Кантор :

Когда при поступлении я выбрал именно ФИВТ, я надеялся, что у нас будет нечто подобное. Так что я рад, что надеялся не зря. В течение года чувствовалось, что курс еще формируется, многое в нем новое, многие вопросы оказываются спорными не только для студентов, но и для организаторов, но в целом, я думаю, тенденции положительные. Мне этот курс понравился.

Для облегчения работы студентов были приглашены различные кураторы, которые предложили свои идеи для построения инновационных бизнесов. Среди них были совершенно разные люди: от студентов-старшекуров и аспирантов МФТИ до советника Ernst&Young по инновациям Юрия Павловича Аммосова (он был руководителем всего курса) и Михаила Батина , занимающегося регенеративной медициной и вопросами продления жизни. В итоге, физтехи выбрали наиболее интересные им идеи, кураторы прикрепились к командам, и началась тяжелая, но увлекательная работа.

Почти за год, прошедший с того момента, ребята столкнулись со множеством проблем, часть из которых удалось решить. Сейчас можно оценить их результаты – несмотря на трудности, ребята справились. Студенты МФТИ (кроме фивтов к процессу подключились некотрые студенты ФОПФа и других факультетов) сумели подготовить несколько вполне интересных и жизнеспособных проектов:

Askeroid (ранее Ask Droid) – поиск для смартфонов (Анастасия Уряшева)

Приложение под Android, которое позволяет удобно искать в большом количестве поисковиков. Некоторые эксперты проявили интерес к разработке, и в результате Анастасия все прошедшее лето провела в одном из самых известных инкубаторов Кремниевой долины – Plug&Play. обучаясь основам технологического предпринимательства и беседуя с международными венчурными экспертами.

1minute.ru – одна минута на добро (Лев Грунин)

Данный проект дает возможность любому человеку просто, быстро и совершенно бесплатно заниматься благотворительностью. Модель проста: рекламодатели предлагают на сайте некоторый набор активностей, пользователи добровольно участвуют в них, все деньги от рекламы перечисляются в благотворительный фонд. За неделю после запуска проект собрал более 6500 пользователей и не собирается останавливаться на достигнутом. В итоге, благодаря Льву и его команде 600 детей из детских домов получат на Новый Год заветные подарки от Деда Мороза. А Вы уже потратили одну минуту на хорошее дело?!

Embedded Desktop – компьютер в Вашем телефоне (Алексей Вуколов)

Приложение, позволяющее совместить в одном корпусе возможности компьютера и мобильность телефона – крайне полезный продукт для занятых людей, часто бывающих в командировках. Достаточно установить его на смартфон, и пользователь сможет “обзавестись” собственным компьютером в любом отеле, офисе да и вообще везде, где можно найти монитор (телевизор тоже подойдет), клавиатуру и мышь. Проект получил грант на развитие идеи и был представлен на выставке Кубка Техноваций, а на полученные деньги команда уже активно закупает оборудование. Американский производитель процессоров MIPS испытывает крайнюю заинтересованность в разработке.

Smart Tagger – смысловой поиск по документам (Виктор Кантор)

Что делать, если Вы помните, что где-то в почтовом ящике лежало очень важное письмо, в котором говорилось о последней серии Big Bang Theory, но при этом Вы не помните никаких ключевых слов из текста? Поиск Яндекса и Google бессилен. На помощь придет разработка Smart Tagger – «умная» программа, использующая семантический поиск выдаст Вам все тексты, смысл которых переплетается с популярным сериалом. Проект выиграл грант на конкурсе У.М.Н.И.К. общей суммой в 400 000 рублей!

MathOcr – распознавание формул (Виктор Прун)

Компания ABBYY предложила для реализации интересную задачу – создать программу, которая распознавала бы математические формулы любой сложности. Студенты ФИВТа, скооперировавшись с заинтересовавшимися фопфами, выполнили поставленную задачу – модуль действительно распознает формулы, отсканированные из учебников по матану или физике. Результат: ABBYY готова приобрести данныйпродукт за большие деньги.

- Можешь на совершенно примитивном примере рассказать, как работает машинное обучение?

Могу. Есть пример метода машинного обучения под названием «Решающее дерево», одна из старейших вещей. Давай сейчас сделаем. Допустим, абстрактный человек приглашает тебя на свидание. Что для тебя важно?

- Во-первых, знаю я его или нет…

(Виктор пишет это на доске.)

…Если не знаю, то надо ответить на вопрос, привлекательный он или нет.

А если знаешь, то неважно? Кажется, я понял, это ветвь френдзоны! В общем, пишу, если не знаешь и непривлекательный, то ответ «да нет, наверное». Если знаешь - ответ «да».

- Если знаю, тоже важно!

Нет, это будет ветвь френдзоны.

Хорошо, тогда давай здесь укажем, интересный или нет. Все же, когда не знаешь человека, первая реакция на внешность, со знакомым мы уже смотрим, что тот думает и как.

Давай по-другому. Амбициозен он или нет. Если амбициозен, то его будет сложно френдзонить, он же будет хотеть большего. А неамбициозный потерпит.

(Виктор дорисовывает решающее дерево.)

Готово. Теперь можно прогнозировать, с каким парнем ты, скорее всего, пойдешь на свидание. Кстати, некоторые сервисы знакомств прогнозируют такие вещи. По аналогии можно прогнозировать и сколько товаров купят клиенты, и где будут находиться люди в это время суток.

Ответы могут быть не только «да» и «нет», но и в виде чисел. Если хочется более точный прогноз, можно сделать несколько таких деревьев и усреднять по ним. И с помощью такой простой штуки можно фактически предсказывать будущее.

А теперь представь, было ли сложно придумать такую схемку людям двести лет назад? Вообще нет! Эта схемка никакого рокет сайнса в себе не несет. Как явление машинное обучение существует примерно полвека-век. Прогнозировать на основе данных начал Роналд Фишер еще в начале XX века. Он взял ирисы и распределил их по длине и ширине чашелистика и лепестка, по этим параметрам он определял вид растения.

В индустрии машинное обучение стали активно использовать последние десятилетия: сильные и относительно недорогие машины, которые нужны для обработки большого количества данных, например для таких решающих деревьев, появились не так давно. Но все равно дух захватывает: мы рисуем эти штуки для каждой задачи и с их помощью предсказываем будущее.

- Ну, точно не лучше всяких осьминогов-предсказателей футбольных матчей…

Не, ну куда нам до осьминогов. Хотя у нас вариативность больше. Сейчас с помощью машинного обучения можно экономить время, деньги и повышать комфорт жизни. Машинное обучение несколько лет назад побило человека в вопросе классификации изображений. Например, компьютер может распознать 20 пород терьеров, а обычный человек нет.

- А когда вы анализируете пользователей, каждый человек для вас - набор чисел?

Грубо говоря, да. Когда мы работаем с данными, все объекты, включая поведение пользователей, описываем определенным набором чисел. И эти числа отражают особенности поведения людей: как часто ездят на такси, каким классом такси пользуются, в какие места обычно ездят.

Сейчас мы активно строим look-alike-модели, чтобы по ним определять группы людей со схожим поведением. Когда мы вводим новую услугу или хотим пропиарить старую, предлагаем ее тем, кому это будет интересно.

Например, вот у нас появилась услуга - два детских кресла в такси. Мы можем заспамить этой новостью всех, а можем адресно сообщить о ней только определенному кругу людей. У нас за год накопилось какое-то количество пользователей, которые в комментариях писали, что им нужно два детских кресла. Мы нашли их и похожих на них людей. Условно, это люди за 30 лет, которые регулярно путешествуют и любят средиземноморскую кухню. Хотя, конечно, признаков куда больше, это я для примера.

- Даже такие тонкости?

Это нехитрое дело. Все вычисляется с помощью поисковых запросов.

А в приложении это может как-то работать? Например, вы знаете, что я нищая и подписана на группы вроде «Как выжить на 500 рублей в месяц» - мне предлагают только побитые дешевые машины, подписана на новости SpaceX - и мне время от времени подгоняют Tesla?

Работать это так может, но подобные вещи в «Яндексе» не одобряются, потому что это дискриминация. Когда персонализируешь сервис, лучше предлагать не самое приемлемое, а лучшее из доступного и то, что человеку нравится. А распределение по логике «этому нужна машина более хорошая, а этому - менее хорошая» - зло.


У каждого есть извращенные желания, и порой нужно найти не рецепт средиземноморского блюда, а, например, картинки про копрофилию. Персонализация и в этом случае будет работать?

Всегда есть приватный режим.

Если я не хочу, чтобы о моих интересах кто-то знал или, допустим, ко мне пришли друзья и захотели посмотреть какой-нибудь треш, то лучше пользоваться режимом инкогнито.

Еще ты можешь решать, сервисом какой компании пользоваться, например «Яндексом» или «Гуглом».

- А есть разница?

Сложный вопрос. Не знаю, как у других, но в «Яндексе» жестко с охраной персональных данных. Особенно контролируют сотрудников.

- То есть если я рассталась с парнем, не смогу узнать, поехал он на эту дачу или нет?

Даже если ты работаешь в «Яндексе». Это, конечно, печально, но да, не удастся узнать. У большинства сотрудников нет даже доступа к этим данным. Все зашифровано. Все просто: нельзя шпионить за людьми, это личная информация.

Кстати, на тему расставания с парнями у нас был интересный кейс. Когда мы делали прогнозирование точки «Б» - точки назначения в такси, ввели подсказочки. Вот, смотри.

(Виктор заходит в приложение «Яндекс.Такси».)

Например, такси думает, что я дома. Предлагает мне поехать либо на работу, либо в РУДН (я читаю там лекции в рамках курса по машинному обучению Data Mining in Action). И в какой-то момент, разрабатывая эти подсказки, мы поняли, что нужно не скомпрометировать пользователя. Точки «Б» кто-нибудь может увидеть. По этим соображениям мы отказались предлагать места по похожести. А то сидишь в приличном месте с приличными людьми, заказываешь такси, а тебе там пишут: «Смотри, в этом баре ты еще не был!»

- Что за синие точки мигают у тебя на карте?

Это pickup points. Эти точки показывают, куда удобнее всего вызвать такси. Ведь ты можешь вызвать в такое место, куда будет совсем неудобно заехать. Но вообще, можешь вызвать в любую точку.

- Да, в любую. Я как-то с этим пролетела на два квартала.

В последнее время были разные сложности с GPS, это приводило к разным веселым ситуациям. Людей, например, на Тверской, навигация перебрасывала через Тихий океан. Как видишь, иногда бывают промахи и побольше двух кварталов.

- А если перезапустить приложение и тыкнуть снова, то цена изменяется на несколько рублей. Почему?

Если спрос превышает предложение, то алгоритм автоматически формирует повышающий коэффициент - это помогает воспользоваться такси тем, кому важно уехать максимально срочно, даже в периоды высокого спроса. Кстати, с помощью машинного обучения можно прогнозировать, где будет больший спрос через, например, час. Это помогает нам подсказывать водителям, где будет больше заказов, чтобы предложение соответствовало спросу.

- Не думаешь, что «Яндекс.Такси» скоро убьет весь рынок такси?

Думаю, что нет. Мы за здоровую конкуренцию и не боимся ее.

Сам я, например, пользуюсь разными сервисами такси. Мне важно время ожидания, поэтому смотрю по нескольким приложениям, какое такси приедет быстрее.


- Вы же объединились с Uber. Зачем?

Это не в моей компетенции комментировать. Я думаю, объединиться - это глубоко разумное решение.

В Германии один парень установил на дроны ванну и так слетал за бургером. Вы подумывали о том, что настало время осваивать воздушное пространство?

Про воздушные пространства не знаю. За новостями в духе «Uber запустил такси на лодочках» мы следим, а про воздух ничего не могу сказать.

- А такси-беспилотники?

Здесь интересный момент. Мы их разрабатываем, но над тем, как именно нужно их использовать, надо думать. Пока еще рано делать прогнозы, в каком виде и когда они появятся на улицах, но мы делаем все, чтобы разработать технологию для полностью автономного автомобиля, где человек-водитель вообще не понадобится.

- Есть опасения, что ПО беспилотников смогут взломать, чтобы управлять машиной удаленно?

Риски есть всегда и везде, где есть технологии и гаджеты. Но вместе с развитием технологий развивается и другое направление - их защита и безопасность. Все, кто так или иначе занимаются развитием технологий, работают над системами защиты.

- Какие данные о пользователях вы собираете и как вы их защищаете?

Мы собираем обезличенные данные пользования, например, откуда, когда и куда была совершена поездка. Все важное - хешируем.

- Ты думаешь, из-за беспилотников сократится количество рабочих мест?

Я думаю, что станет только больше. Все же эти беспилотники тоже как-то надо обслуживать. Это, конечно, немного стрессовая ситуация, менять специальность, но что поделать.

- Греф на каждой своей лекции говорит, что человек будет менять профессию минимум три раза кардинально.

Я не могу назвать какую-то специальность, которая на века. Разработчик всю жизнь не работает на одном и том же языке и с одними и теми же технологиями. Везде нужно перестраиваться. С машинным обучением я отчетливо ощущаю, как ребята, которые на шесть лет меня моложе, намного быстрее меня соображают. При этом люди в 40 лет или 45 лет ощущают это еще сильнее.

- Опыт уже не играет роль?

Играет. Но методы меняются, можно прийти в область, где, например, глубокое обучение не использовалось, работаешь там какое-то время, потом методы глубокого обучения внедряются везде, а ты в этом ничего не соображаешь. И все. Твой опыт может быть полезен только в вопросе планирования работы команды, и то не всегда.

- А твоя профессия - data scientist, она востребована?

На специалистов в data science спрос просто зашкаливает. Очевидно, что сейчас период безумного хайпа. Слава богу, блокчейн немного помог этому хайпу спасть. Специалистов по блокчейну еще быстрее разбирают.

Но многие компании сейчас думают, что если они вложат деньги в machine learning, у них сразу зацветут сады. Это не так. Машинное обучение должно решать конкретные задачи, а не просто существовать.

Бывают случаи, когда какой-нибудь банк хочет сделать рекомендательную систему услуг для пользователей. Спрашиваем: «Вы думаете, это будет экономически оправдано?» Отвечают: «Да нам по фигу. Сделайте. У всех же рекомендательные системы, мы будем в тренде».

Боль в том, что реально полезную для бизнеса вещь нельзя сделать за один день. Нужно смотреть, как будет обучаться система. А она всегда в начале работает с ошибками, ей может не хватать каких-то данных при обучении. Ты исправляешь ошибки, потом снова исправляешь и даже все переделываешь. После этого нужно настроить так, чтобы система работала в продакшене, чтобы была стабильная и масштабируемая, это еще время. В итоге на один проект уходит полгода, год и больше.


Если смотреть на методы машинного обучения как на черный ящик, то запросто можно пропустить, как начинает происходить какая-то чушь. Есть бородатая история. Военные попросили разработать алгоритм, по которому можно анализировать, есть танк на снимке или нет. Исследователи сделали, протестировали, качество отличное, все здорово, отдали военным. Приходят военные и говорят, что ничего не работает. Ученые начинают нервно разбираться. Выясняется, что на всех снимках с танком, которые принесли военные, в углу ручкой была проставлена галочка. Алгоритм безупречно научился находить галочку, про танк он ничего не знал. Естественно, на новых снимках галочек не было.

Я встречала детей, которые сами свои диалоговые системы разрабатывают. Вы не думали, что уже с детьми нужно сотрудничать?

Я уже достаточно давно езжу на всякие мероприятия для школьников, читаю лекции про машинное обучение. И, кстати говоря, одну из тем меня научила рассказывать десятиклассница. Я был абсолютно уверен, что мой рассказ будет хорош и интересен, горд собой, начал вещать, и девочка такая: «А, эту штуку мы хотим минимизировать». Я смотрю и думаю, а действительно, зачем, и правда можно минимизировать, и особенно доказывать тут нечего. Уже прошло несколько лет, сейчас она наши лекции слушает как студент «Физтеха». У «Яндекса», кстати, есть «Яндекс.Лицей», где школьники могут получить бесплатно базовые знания по программированию.

- Посоветуй вузы и факультеты, где сейчас преподают machine learning.

Есть МФТИ, факультеты ФИВТ и ФУПМ. Еще в «Вышке» есть замечательный факультет компьютерных наук, в МГУ на ВМК есть машинное обучение. Ну, и сейчас в РУДН можно послушать наш курс.

Как я уже сказал, профессия эта востребована. Очень долгое время люди, получавшие техническое образование, занимались совершенно другими делами. Машинное обучение - замечательный пример, когда все вещи, что учили люди с техническим образованием, сейчас прям нужны, полезны и хорошо оплачиваемы.

- Насколько хорошо?

Назови сумму.

- 500 тысяч в месяц.

Можешь, только не будучи рядовым data scientist. Но в каких-то компаниях совсем-совсем стажер может получать за несложную работу тысяч 50. Тут очень большой разброс. Вообще, зарплату крутого data scientist можно сравнить с зарплатой гендиректора какой-то средней компании. Во многих компаниях помимо зарплаты на работника сваливается еще много плюшек, и если видно, что человек пришел не за тем, чтобы хороший бренд в резюме вписать, а реально работать, то у него все будет хорошо.