Разработка → От веб-разработчика до специалиста по машинному обучению

pkruglov 3 октября в 16:38 24,9k

Не у каждого хватает смелости поменять освоенную профессию, в которой уже достиг каких-то вершин. Ведь это требует больших усилий, а положительный результат не гарантирован. Полтора года назад мы рассказывали, как один из наших тимлидов серверной разработки переквалифицировался в iOS-программиста. И сегодня мы хотим рассказать о ещё более «крутом повороте»: Алан Chetter2 Басишвили, занимавшийся frontend-разработкой, настолько увлёкся машинным обучением, что вскоре превратился в серьёзного специалиста, стал одним из ключевых разработчиков популярного проекта Artisto, а теперь занимается распознаванием лиц в Облаке Mail.Ru. Интервью с ним читайте под катом.


Почему ты захотел быть программистом?


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


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


Начинал, как и многие, с CMS. Эта работа сама меня нашла. Думаю, многих программистов, даже если они никак не связаны с вебом, хоть однажды, но просили сделать онлайн-магазин. Дальше была целая сеть магазинов, там я писал админки. Делалось это без фреймворков, изобретали велосипеды, но было очень увлекательно. Там же полюбил проектирование архитектуры ПО. А затем перешёл к работе над фронтендом. Писал чаты, p2p-видеозвонки и многое другое.


Что общего между вороном и письменным столом? В смысле, между фронтендом и нейросетями? Почему так быстро удалось изучить их?


Ничего общего, за исключением необходимости писать код. А помогло математическое образование. Кроме того, программисту проще изучать deep learning, как мне кажется.



С чем связан тогда интерес к переходу из фронтенда в нейросети?


Меня всегда это интересовало, и дипломный проект был связан с машинным обучением, хотя я не очень тогда понимал, что я делаю. На Coursera я прошёл курс «Введение в машинное обучение». Постепенно зарождалось понимание, как работают вещи, которыми я пользуюсь каждый день, такие как персональные рекомендации, поиск и многое другое, и понимание приводило меня в восторг. Это, наверное, один из основных мотиваторов — жажда понять, как работает современное машинное обучение. И когда я познакомился с deep learning, то потерял интерес ко всему остальному. Фронтенд стал просто рутиной. Я приходил на работу, и, хотя у меня были довольно интересные и сложные задачи, они отошли на второй план по сравнению с тем, чем я занимался по ночам.


А какой график занятий у тебя был?


Поначалу, когда было только введение в машинное обучение, я тратил на это только выходные. Затем я начал участвовать в соревновании. На него уходили и выходные, и ночи. До трёх часов ночи я обычно сидел и занимался. И после этого ещё довольно долгое время оставался запал, так что я продолжал изучать нейросети каждый день по ночам. Так я прожил полгода.


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


Сейчас есть множество курсов, где всё разложено по полочкам. Они могут дать очень быстрый старт. По нейросетям есть замечательный стенфордский курс cs231n, его ведёт Андрей Карпатый. Далее можно читать и конспектировать «Deep Learning» от Яна Гудфеллоу. Ещё неплохой ресурс Neural Networks and Deep Learning. Но начинать, конечно, лучше с основ ML.


Как считаешь, какой формат обучения сейчас лучше: книги, курсы, видео на YouTube, ещё что-то, может быть?


Мне показалось разумным сначала окончить курсы, а затем прочесть книги, потому что на курсах всё довольно упрощённо, там разжёвывают информацию, а книги дают уже полное понимание. Сегодня по машинному обучению существует очень много курсов. Тот, что я окончил на Coursera, называется «Введение в машинное обучение», им занималась команда из «Яндекса», включая Воронцова.


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


Также очень помогает писать код. Только тогда начинаешь замечать важные детали и получать настоящий опыт. Можно прочитать 50 статей, и на выходе у тебя что-то останется в голове, но на уровне концепции. А чтобы действительно что-то понять и научиться это применять, нужно сесть и начать программировать. Самое эффективное — поучаствовать в каком-нибудь соревновании типа Kaggle. Или просто брать и делать свой проект на основе прочитанного.


Какие блоги по нейросетям ты читаешь и почему?


У Карпатого есть отличный блог, но новые посты давно не появлялись. Ещё OpenAI Blog, inFERENCe. Читаю в Twitter и Facebook свежие новости ведущих разработчиков. Мне нравится поисковик Карпатого по научным публикациям. Там есть ещё рекомендации и очень интересная рубрика «Топ Хайп» — это самые часто упоминаемые в твитах статьи.


Если бы у тебя была возможность освоить новую технологию в этом году, что бы это было?


Хочу поплотнее поработать с GAN-архитектурами. Это подход к обучению генеративных сетей. Допустим мы хотим генерировать правдоподобные изображения спален. Для этого мы обучаем генератор (сеть принимающую случайный вектор и выдающую изображения) обманывать дискриминатор (сеть обучаемую отличать настоящие спальни от сгенерированных). То есть сети противостоят друг другу и совершенствуются во время обучения. В конце концов генератор может выдавать изображения, которые иногда могут обмануть и человека. На практике GAN хорошо себя показали в задаче повышения разрешения изображений (SRGAN), а также позволили генерировать правдоподобных котиков по наброскам как в pix2pix.


Можно ли использовать технологии нейросетей для фронтенда. И если да, то где?


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


А какие сейчас ещё есть интересные применения нейросетей? Все мы знаем про обработку фоток, видео, сейчас ещё генерация всяких лиц. А какие ещё в принципе возможны применения?


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



Как ты оптимизируешь свой код?


Как и остальные: профилирую и устраняю узкие места. Если речь об оптимизации inference-сети, то тут всё, как правило, сделано за нас, за исключением случаев с самописными слоями. С ними приходится повозиться.


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


Сейчас нет. Работа достаточно интересна, чтобы заниматься ей как хобби. Чтобы отвлечься, читаю книги и смотрю сериалы.


Какие задачи для решения с помощью нейросетей ты считаешь самыми сложными/интересными?


Беспилотные автомобили — очень сложная и интересная проблема. Такая система должна работать очень точно. Распознавать машины, дорогу, деревья, тротуар, пешеходов, самое сложное — соединять всё это вместе и давать автомобилю команду, куда ему повернуть, ехать побыстрее или помедленнее. Ко всему прочему ответственность очень велика. Заменить все автомобили беспилотными будет трудно, но это полностью решаемая задача. Уже сейчас есть автомобили с некоторыми навыками беспилотных. Ошибки, безусловно, ещё случаются. Google идёт по пути накопления огромнейших выборок (машины проехали 3 миллиона миль). Большое количество их машин каждый день ездят, собирают информацию, выявляют краевые случаи ошибок ИИ, и специалисты всё время их дообучают. В итоге сейчас они готовы выходить в коммерческую эксплуатацию, запустили бета-программу. Думаю, у них наверняка будет самый лучший беспилотник. К тому же на первых порах человек может сидеть за рулем и контролировать. А уж если посмотреть, как люди водят в России, то беспилотники гораздо безопаснее и их надо внедрять как можно скорее.


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


А у искусственного интеллекта есть понятие обновления в софте? Первая версия, потом накатили вторую версию? Один раз запрограммировали — и он сам обучается?


Надо подчеркнуть, что мы говорим о слабом искусственном интеллекте. Конечно, у него есть понятие обновления: мы можем заменить старую нейросеть, которая работала менее качественно. Ведь нейросеть — это условный набор весов и операций, которые необходимо проделать с ними. Эти веса можно обновлять хоть каждый день. Почти все эти алгоритмы не обучаются онлайн, они специально обучаются однократно. Да, есть reinforcement learning — методы, которые заточены на то, чтобы обучаться на обратной связи от среды. Технология активно развивается, хотя примеров внедрения пока мало.


То есть в таком виде софта не может быть серьёзных ошибок?


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


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



То есть может быть такое, что машина в прошлой своей версии понимала, что это на картинке человек идёт, а потом ей накатывают новую версию — и она уже не понимает?


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


Ты работал над проектом Artisto, расскажи, как он начинался.


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


Чем различаются обработка фото и видео?


В Artisto видео разбивается на кадры, а затем они стилизуются независимо друг от друга. Есть, к примеру, другой метод стилизации видео, дающий более плавный результат. Там получается сложнее с учётом так называемого optical flow, когда для постоянства стилизации мы отслеживаем, куда «перетекают» пиксели от кадра к кадру. В частности мы стилизуем один кадр, а затем используем его модификацию для стилизации следующего. Мы знаем, как в следующем кадре расположен объект, двигаем все пиксели, которые есть на картинке, и стартуем с этого кадра. Потом берём следующий кадр, опять optical flow, двигаем пиксели, стартуем с этого кадра, стилизуем его. И так далее.


В Artisto стилизуется не весь кадр целиком, а только изменившиеся фрагменты?


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


В каких проектах нашей компании уже используется машинное обучение?


Во многих: в Почте, Поиске, Одноклассниках, ВКонтакте, Юле, Бипкаре. Например, с его помощью анализируется текст публикаций в соцсетях и на сайтах, индексируемых нашим поисковиком. Вообще, под термином «машинное обучение» подразумевается широкий спектр дисциплин, в том числе и глубокое обучение (deep learning), то есть нейросети. Это направление сейчас очень активно развивается. Особенно ярких результатов удалось добиться в сфере компьютерного зрения. Старые методы машинного обучения имели низкую точность распознавания изображений, но сейчас уже есть высокоэффективные подходы. Благодаря этому машинное обучение получило новый импульс развития, потому что распознавание фотографий — практичная, понятная и многим близкая задача, демонстрирующая пользу нейросетей.


С текстом дела обстоят хуже, но тоже неплохо. Машинный перевод пока уступает человеку, а в распознавании изображений deep learning во многих случаях обгоняет человека. Нейросети великолепно справляются с некоторыми компьютерными играми, особенно простыми, основанными на реакции. С другими же — слабо. Особенно когда речь идёт о тяжёлых стратегиях, где нужно управлять большим количеством юнитов. Здесь reinforcement learning работает не слишком эффективно. Полагаю, нужно больше исследований на эту тему.


Но совсем недавно прогремели ребята из OpenAI со своим ботом для Dota 2. Бот разбил лучших игроков мира в схватках 1 × 1. Dota — сложная игра, потому это знаменательное событие.


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


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


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


Какие применения нейросетей на рынке ты сегодня считаешь самыми впечатляющими/передовыми и почему?


Нейросети в принципе поражают, особенно когда знаешь, как они работают. На рынке довольно часто применяют классификаторы изображений, детекторы объектов и сети для распознавания лиц. Некоторые решения этих задач впечатляют элегантностью и простотой. Также могу отметить беспилотные автомобили и машинный перевод. Например, у Google нейросеть использует промежуточный язык, через который выполняет переводы с других, настоящих языков (точнее, речь идёт о векторных представлениях, из которых составляются фразы на любых других языках). Система получает на вход предложение на английском, формирует наборы чисел, а потом другая часть сети преобразует эти наборы, например в предложение на французском. И когда одна и та же нейросеть обучается так преобразовывать между многими языками, то у нее формируется какое-то универсальное представление текста, благодаря которому сеть может связывать друг с другом разные языки, прямому переводу между которыми она не училась. Например, её можно натренировать переводить EN ⇄ FR и EN ⇄ RU — и тогда модель сумеет переводить FR ⇄ RU.


Какими знаниями/навыками должен обладать специалист по нейросетям?


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


А как у нас в компании с вакансиями для специалистов по глубокому обучению?


У нас в компании специалисты по машинному обучению сейчас есть практически в каждом бизнес-юните. В Почту мы активно ищем специалистов для улучшения антиспама и для создания новых «умных» функций (в основном работа с текстом). Также мы заинтересованы в специалистах для разработки компьютерного зрения. В Облако — специалистов по комьютерному зрению. Еще из интересных областей, где мы используем глубокое обучение и ищем профильных специалистов, можно отметить разработку и совершенствование рекомендательных систем, анализ больших данных и работа с текстом в самых разных проектах (например, предсказание правильных ответов в Поиске Mail.Ru). ML есть и в рекламной крутилке, и в формировании умной ленты социальных сетей и в Поиске.


То есть в компании все функции людей постепенно замещаются искусственным интеллектом?


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


Какое направление в сфере нейросетей ты считаешь самым перспективным?


Самое перспективное — сильный ИИ. Тут вопрос: можем ли мы перейти от решения маленьких конкретных задач к сильному искусственному интеллекту. Как всё это совместить? Не уверен, что путь к сильному искусственному интеллекту лежит через решение простых задач. Но вообще, если исключить сильный ИИ — то да, это замещение человека во всех сферах деятельности.


Как ты думаешь, удастся ли создать ИИ, который по всем параметрам будет превосходить человека? И если да, то когда?


Это вопрос времени. Согласно опросам учёных, его появления можно ожидать в 2050—2090-е годы. Но мне кажется, это так не работает. Мы копируем отдельные функции мозга, но как от этого перейти к сильному ИИ — думаю, неизвестно пока никому. Впрочем, сегодня уже удалось добиться хороших результатов в некоторых узких направлениях, например в распознавании изображений.

Проголосовать:
+62
Сохранить: