Из физиков в Data Science (Из двигателей науки в офисный планктон). Третья часть
Эта картинка, за авторством Артура Кузина (n01z3), достаточно точно суммирует содержание блог поста. Как следствие, дальнейшее повествование должно восприниматься скорее как пятничная история, нежели как что-то крайне полезное и техническое. Кроме того, стоит отметить, что текст насыщен английскими словами. Какие-то из них я не знаю как правильно перевести, а какие-то переводить просто не хочется.
О том, как проходил переход из среды академической в среду индустриальную раскрыто в первых двух сериях. В этой же, разговор пойдет о том, что было дальше.
Шел январь 2017 года. На тот момент у меня было чуть больше года трудового стажа и работал я в Сан-Франциско в компании TrueAccord как Sr. Data Scientist.
TrueAccord — это стартап, который занимается сбором долгов. По-простому — коллекторское агентство. Обычно коллекторы много звонят. Мы же посылали много email’ов, а звонили мало. Каждый email вел на сайт компании, где должнику предлагалось сделать скидку на долг, да еще и позволить платить в рассрочку. Такой подход приводил к лучшей собираемости, позволял масштабироваться и меньше встревать на судебные иски.
Компания была нормальная. Продукт понятный. Руководство вменяемое. Местоположение удачное.
В среднем, в долине люди работают на одном месте порядка полутора лет. То есть любая компания, в которой вы работаете — это лишь небольшая ступенька. На этой ступеньке вы поднимете немного денег, приобретёте новые знания, навыки, связи и строчки в резюме. После этого идет переход на следующую ступень.
В самом TrueAccord я занимался тем, что прикручивал рекомендательные системы к email рассылкам, а также к приоритизации телефонных звонков. Impact понятный и через A/B тестирование достаточно хорошо измерялся в долларах. Так как до моего прихода машинного обучения толком не было, то и impact от моей работы был неплохой. Опять же, улучшать ничего гораздо проще, чем что-то, что уже сильно оптимизировано.
Мне даже base pay подняли после полугода работы над этими системами с $150k до $163k. В сообществе Open Data Science (ODS) есть мем про $163k. Ногами он растет именно отсюда.
Все это было прекрасно, но никуда не вело, или вело, но не туда.
К TrueAccord, как к компании, так и к ребятам, с которыми я там работал, я отношусь с большим уважением. Я многому у них научился, но долго работать над рекомендательными системами в коллекторском агентстве не хотелось. С этой ступеньки надо было шагать в какую-то сторону. Если не вперед и вверх, то хотя бы вбок.
Что мне не нравилось?
С точки зрения машинного обучения задачи меня не возбуждали. Хотелось чего-то модного, молодежного, то есть Deep Learning, Computer Vision, чего-то, скорее, близкого к науке или хотя бы к алхимии.
Стартап, да еще коллекторское агентство, имеет проблемы с наймом высококвалифицированного персонала. Как стартап он не может много платить. А как коллекторское агентство он проигрывает по статусности. Грубо говоря, если девушка на свидании спросит, где ты работаешь? Твой ответ: «В гугле» звучит на порядки лучше чем в «коллекторском агентстве». Меня слегка напрягало то, что у знакомых, работающих в Google, Facebook, в отличие от меня, имя их компании открывало двери типа: тебя могут пригласить на конференцию или митап, как спикера, или же более интересные люди пишут на LinkedIn с предложением встретится пообщаться за рюмкой чая. Я очень люблю общаться с незнакомыми мне людьми вживую. Так что если вы проживаете в Сан-Франциско, не стесняйтесь писать — сходим на кофе, поговорим.
Кроме меня в компании работало три Data Scientist’a. Я занимался машинным обучением, а они занимались другими Data Science задачами, коих в любом стартапе отсюда и до завтра. Как результат, в машинном обучении они толком не разбирались. А мне, чтобы расти, нужно с кем-то общаться, обсуждать статьи и последние наработки, просить совета, в конце концов.
Что было в наличии?
Образование физика, а не computer science.
Единственный язык программирования, который я знал — Python. Было чувство, что и с C++ надо перейти на ты, но руки все никак не доходили.
Год с копейками работы в индустрии. Причем на работе я не занимался ни Deep Learning, ни Computer Vision.
Ни одной статьи по Deep Learning / Computer Vision в резюме.
Была ачивка Kaggle Master.
Чего хотелось?
Позицию, на которой надо будет тренировать много сетей, причем поближе к компьютерному зрению.
Лучше, чтобы это была большая компания типа Google, Tesla, Facebook, Uber, LinkedIn, и т.д. Хотя в крайнем случае подошел бы и стартап.
Нужно, чтобы в команде я не был самым большим экспертом по машинному обучению. Очень нужны были старшие товарищи, менторы и всевозможное общение, которое должно было ускорить процесс обучения.
Обчитавшись блог постов о том, как выпускники без индустриального опыта имеют total compensation $300-500k в год, хотелось уйти в тот же диапазон. Не то, чтобы меня c этого сильно бомбило, но раз говорят что это распространенное явление, а у меня при этом меньше, то это сигнал.
Задача выглядела вполне решаемой, правда не в том смысле, что можно с ноги заходить в любую компанию, а скорее, что если брать измором, то все получится. То есть десятки-сотни попыток, и боль от каждой неудачи и каждого rejection, использовать на то, чтобы обострить фокус, улучшить память и растянуть сутки до 36 часов.
Я подправил резюме, начал рассылать, и ходить на интервью. Мимо большей части я пролетал еще на стадии общения с HR. Многим требовался C++, а знать я его не знал и было стойкое чувство, что на позициях, на которых требуется C++ мне будет не очень интересно.
Стоит отметить, что примерно в то же время произошел фазовый переход в типе соревнований на Kaggle. До 2017 было много табличных данных и очень редко картиночные, а вот начиная с 2017 пошло много задач на компьютерное зрение.
Жизнь потекла в режиме:
Днем работа.
Когда tech screen / onsite берешь time off.
По вечерам и выходным Kaggle + статьи / книжки / блог посты
Конец 2016 года отметился тем, что я присоединился к сообществу Open Data Science (ODS), что очень много всего упростило. В сообществе хватает ребят с богатым индустриальным опытом, что позволило задавать много глупых вопросов и получать много умных ответов. Также там хватает очень сильных специалистов по машинному обучению всех мастей, что, неожиданно, позволило мне через ODS закрыть вопрос с регулярным глубоким общением про Data Science. До сих пор, в разрезе ML, ODS мне дает в разы больше, чем я получаю на работе.
Ну и, как водится, в ODS хватает специалистов по соревнованям на Kaggle и других площадках. В коллективе решать задачи веселее и продуктивнее, так что с шутками, матом, мемами и прочими ботаническими развлечениями мы начали рубить задачи одну за другой.
В том же марте я сходил на интервью в NVidia в команду Self Driving. Сильно плыл на вопросах про Object Detection. Знаний не хватало.
На удачу, в это же время началось соревнование по Object Detection на aerial imagery от тех же DSTL. Сам бог велел решать задачу и прокачиваться. Месяц по вечерам и выходным. Я нахватался знаний и финишировал вторым. В этом соревновании был интересный нюанс в правилах, который привел к тому, что меня показывали в России по федеральным и не очень каналам. Я попал на главную Lenta.ru, и в кучу печатных и интернет изданий. Mail Ru Group получил чуть-чуть положительно PR за мой счет и свои деньги, а фундаментальная наука России обогатилась на 12000 фунтов. Как водится, на эту тему был написан блог пост на хабр. За подробностями туда.
В это же время со мной связался рекрутер «Теслы» и предложил пообщаться на тему Computer Vision позиции. Я соглаcился. Лихо прошел take home, два tech screen, onsite interview, очень приятно пообщался с Andrei Karpathy, которого как раз наняли в Теслу, как Director’а of AI. Следующая стадия — background check. После этого Elon Musk должен был лично одобрить мою заявку. В Tesla жесткое Non Disclosure Agreement (NDA).
Backgound check я не прошел. Рекрутер сказал, что я много треплюсь online, нарушая NDA. Единственное место, где я что-то говорил про интервью в Tesla — это ODS, так что текущая гипотеза, что кто-то сделал screenshot и написал HR в Tesla, и меня сняли c забега от греха подальше. Тогда было обидно. Сейчас я радуюсь, что не срослось. Моя текущая позиция сильно лучше, хотя поработать с Андреем было бы очень интересно.
Сразу после этого я окунулся в соревнование по спутниковым снимкам на Kaggle от Planet Labs — Understanding the Amazon from Space. Задача была простая и крайне скучная, никому решать ее не хотелось, но халявную золотую медальку или призовые хотелось всем. Поэтому командой Kaggle Master’ов из 7 человек мы сошлись на том, что будем закидывать железом. Натренировали 480 сетей в режиме ‘fit_predict’ и сделали из них трехэтажный ансамбль. Финишировали седьмыми. Блог пост с описанием решения от Артура Кузина. К слову, Jeremy Howard, который широко известен как создатель Fast.AI закончил 23.
После окончания соревнования через знакомого, который работал в AdRoll, на их площадях я организовал Meetup. Там выступили представители Planet Labs о том, как выглядела организация соревнования и разметка данных с их стороны. Wendy Kwan, которая работает в Kaggle и курировала соревнование, рассказала о том, как видела это она. Я описал наше решение, трюки, приемы и технические детали. Две трети аудитории решало эту задачу, поэтому вопросы задавались по делу и вообще все было круто. Jeremy Howard там тоже был. Выяснилось, что завершил он на 23 месте, потому что не знал как стакать модели и что вообще не знал про такой метод построения ансамблей.
Митапы в долине по машинному обучению сильно отличаются от митапов в Москве. Как правило, митапы в долине — это дно. Но вот наш получился хорош. К сожалению товарищ, который должен был нажать на кнопку и все записать, на кнопку не нажал 🙁
После этого меня пригласили пообщаться на позицию Deep Learning Engineer в этот самый Planet Labs, причем сразу на onsite. Его я не прошел. Формулировка отказа — недостаточно знаний в Deep Learning.
Каждое соревнование я оформлял как project в LinkedIn. По задаче DSTL мы написали pre-print и выложили на arxiv. Не статья, но и то хлеб. Всем остальным тоже рекомендую раздуть LinkedIn profile через соревнования, статьи, скилы и прочее ололо. Положительная корреляция между тем, сколько ключевых слов у вас в профиле в LinkedIn, и тем, как часто вам пишут есть.
Если зимой-весной я сильно плыл по технической части, то к августу появились и знания, и уверенность в себе.
В конце июля на LinkedIn со мной связался парень, который работал как Data Science manager в Lyft и пригласил выпить кофе, пообщаться за жизнь, за Lyft, за TrueAccord. Пообщались. Он предложил поинтервьюироваться к нему в команду на позицию Data Scientist. Я сказал, что вариант рабочий, при условии, что это Computer Vision / Deep Learning с утра и до вечера. Он уверил, что с его стороны возражений нет.
Я отослал резюме, он закинул во внутренний портал Lyft. После этого мне позвонил рекрутер, чтобы раскрыть резюме и узнать обо мне побольше. С первых же слов повеяло, что для него это формальность, так как ему и по резюме очевидно, что «I am not a material for Lyft». Предполагаю, что после этого моё резюме пошло в мусорную корзину.
Все это время, пока я интервьюировался, я обсуждал свои неудачи и падения в ODS и ребята давали мне feedback и всячески помогали советами, хотя, как водится, дружеского троллинга там тоже хватало.
Один из членов ODS предложил свести меня с его приятелем, который как раз Director Of Engineering в Lyft. Сказано — сделано. Я прихожу на обед в Lyft, а там кроме этого приятеля еще Head of Data Science и один Product manager, который большой фанат Deep Learning. На обеде пообщались за DL. А так как я уже пол года тренировал сети 24/7, обчитывался кубометрами литературы, да гонял задачи на Kaggle с более-менее внятным результатами я мог говорить про Deep Learning часами, причем, как в разрезе новых статей, так и в разрезе практических приемов.
После обеда они посмотрели на меня и говорят — сразу видно, что ты красавчик, не хочешь к нам пособеседоваться? Причем добавили, что по мне понятно, что take home + tech screen можно пропустить. И что меня пригласят сразу на onsite. Я согласился.
После этого мне позвонил тот рекрутер, чтобы назначить само onsite interview, причем недовольный. Бормотал что-то там про то, что не надо через голову прыгать.
Пришел. Onsite interview. Пять часов общения с разными людьми. Ни одного вопроса не то что про Deep Learning, про машинное обучение в принципе ничего не было. Раз нет Deep Learning / Computer Vision, то мне это не интересно. Так что результаты интервью были ортогональны.
Звонит этот рекрутер и говорит — поздравляю, ты прошел на второе onsite интервью. Это все вызывает удивление. Какой еще второе onsite? Я про такое и не слышал ни разу. Сходил. Там пара часов, в этот раз все про традиционное машинное обучение. Это уже лучше. Но все равно не интересно.
Звонит рекрутер с поздравлением, что я прошел на третье onsite interview и клятвенно обещает, что вот это будет последнее. Сходил и на него — и вот тут был и DL, и CV.
У меня был многомесячный prior, который говорил мне, что офера не будет. Слечу не на технических скилах, так на soft. Не на soft, так на том, что позицию закроют или что компания пока не нанимает, а просто щупает рынок и уровень кандидатов.
Середина августа. Я нормально выпил пива. Мысли мрачные. Прошло 8 месяцев, а офера все нет. Под пивом хорошо креативится, особенно если креатив этот странный. Мне в голову приходит идея. Я ей делюсь с Алексеем Швецем, который на тот момент был postdoc’ом в MIT.
А что если взять ближайшую конференцию по DL/CV, посмотреть соревнования, которые в рамках ее проводятся, что-нибудь натренировать и сделать сабмит? Так как там все эксперты, которые на этом строят свои карьеры, и занимались этим много месяцев или даже лет, то шансов у нас нет. Но это не страшно. Делаем по какому-то осмысленному сабмиту, улетаем на нем на последнее место, а после этого пишем pre-print или статью о том, что мы не такие, как все и рассказываем о нашем решении. А статью уже в LinkedIn и в резюме.
То есть вроде и по делу и больше правильных ключевых слов в резюме, что должно чуть увеличить шансы добраться до tech screen. Код и сабмиты с меня, тексты с Алексея. Дичь, конечно, но почему бы и нет?
Сказано-сделано. Ближайшая конференция, которую мы загуглили, была MICCAI и там и правда были соревнования. Мы ткнули в первое же. Это было Gastrointestinal Image ANAlysis (GIANA). В задаче 3 подзадачи. До дедлайна оставалось 8 дней. С утра я протрезвел, но идею не отбросил. Взял свои пайплайны с Kaggle, перебил со спутниковых данных на медицинские. ‘fit_predict’. Алексей подготовил двустраничное описание решений по каждой задаче, и мы отослали. Готово. В теории можно выдохнуть. Но выяснилось, что на этот же workshop есть еще одна задача (Robotic Instrument Segmentation) с тремя подзадачами и что у нее дедлайн сдвинули на 4 дня, то есть мы можем и туда сделать ‘fit_predict’ и отослать. Так мы и сделали.
В отличие от Kaggle у этих соревнований была своя академическая специфика:
Никакого Leaderboard. Сабмиты отправляются по email.
Тебя снимают, если представитель команды не приехал представить решение на конференцию на Workshop.
Твоё место на лидерборде становится известно только во время конференции. Этакий академический драматизм.
Конференция MICCAI 2017 проходила в Quebec City. Скажу честно, к сентябрю — я начал выгорать, так что идея взять неделю отпуска на работе и смотаться в Канаду выглядела интересно.
Приехал на конференцию. Пришел на этот Workshop, никого не знаю, сижу в углу. Все друг друга знают, что-то там общаются, сыпят умными медицинскими словами. Обзор первого соревнования. Выступают участники, рассказывают про свои решения. Там лихо накручено, с огоньком. Моя очередь. А мне как-то даже стыдно. Они-то задачу решали, работали над ней, науку двигали, а мы чисто — ‘fit_predict’ с прошлых наработок, не для науки, а чтобы резюме качнуть.
Вышел, сказал, что я не эксперт и в медицине по нулям, извинился за то, что трачу их время, показал один слайд с решением. Спустился в зал.
Объявляют первую подзадачу — мы первые, причем с отрывом.
Объявляют вторую — третьи.
Объявляют третью — снова первые и снова с отрывом.
Общее — первое.
Некоторые в аудитории улыбаются — смотрят на меня с уважением. У других же, тех, кто, видимо, считался экспертом в области, выбил грант на эту задачу и много лет этим занимался, лица чуть перекосило.
Дальше — вторая задача, та, в которой три подзадачи и которую подвинули на четыре дня.
Тут я тоже извинился, снова показал наш один слайд.
Та же история. Два первых, одно второе, общее первое.
Я думаю, что, наверное, это первый в истории случай, когда коллекторское агентство выиграло соревнования по медицинским изображениям.
И вот стою я на сцене, мне вручают какой-то очередной диплом и меня бомбит. Как же, мать вашу, так? Эти академики тратят деньги налогоплательщиков, работают над тем, чтобы упростить и улучшить качество работы докторов, то есть, в теории, и мою продолжительность жизни, а какое-то тело порвало весь этот академический коллектив на британский флаг за несколько вечеров.
Бонусом к этому — в других командах у аспирантов которые этими задачами много месяцев занимались, будет симпатичное для HR’ов резюме, то есть до tech screen они дойдут легко. А у меня перед глазами стоит свеже полученный email:
A Googler recently referred you for the Research Scientist, Google Brain (United States) role. We carefully reviewed your background and experience and decided not to proceed with your application at this time.
В общем, прямо со сцены, я и спрашиваю аудиторию: «А вот кто-нибудь знает, где я работаю?» Один из организаторов соревнования знал — он загуглил, что такое TrueAccord. Остальные — нет. Продолжаю: «Работаю я в коллекторском агентстве, и на работе я не занимаюсь ни Computer Vision, ни Deep Learning. А во многом, это происходит, потому что HR отделы Google Brain и Deepmind фильтруют моё резюме, не давая шансов показать техническую подготовку. «
Вручили грамоту, перерыв. Меня отзывает в сторону группа академиков. Выяснилось, что это Health группа с Deepmind. Они так прониклись, что сразу захотели со мной пообщаться на тему вакансии Research Engineer в их команде. (Мы, таки, пообщались. Это общение затянулось на 6 месяцев, я прошел take home, quiz, но срезался на tech screen. 6 месяцев от начала общения до tech screen — это долго. Долгое ожидание придает привкус ненужности. Research Engineer в Deepmind в Лондоне, на фоне TrueAccord был сильный step up, но на фоне моей текущей позиции это step down. С дистанции в два года, которые с тех пор прошли, хорошо, что не прошел.)
Заключение
Примерно в то же время мне, таки, пришел offer от Lyft, который я принял.
По итогам этих двух соревнований c MICCAI были опубликованы:
То есть, несмотря на всю дикость идеи, добавить инкрементальных статей и препринтов через соревнования работает хорошо. А в последующие года мы еще и усугубили.
Последние пару лет я работаю в Lyft, занимаясь Computer Vision / Deep Learning для Self Driving машин. То есть, что хотел, то и получил. И задачи, и статусную компанию, и сильных коллег, и все остальные плюшки.
За эти месяцы у меня было общение, как с большими компаниями Google, Facebook, Uber, LinkedIn, так и с морем стартапов разной величины.
Все эти месяцы было больно. Вселенная каждый день говорит тебе, что-то не очень приятное. Регулярный rejection, регулярно делаешь ошибки и все это сдобрено стойким чувством безысходности. Гарантий, что у тебя все получится нет, а вот чувство, что ты дурак — есть. Очень напоминает то, как я пытался трудоустроится сразу после универа.
Я думаю, что многие искали работу в долине и у них все проходило сильно проще. Фокус, на мой взгляд вот в чем. Если искать работу в области, в которой ты разбираешься, имеешь обильный опыт и твоё резюме говорит об этом же — проблем нет. Взял, да нашел. Вакансий море.
А вот если искать работу в новой для себя области, то есть когда знаний нет, связей нет и резюме говорит не о том — в этот момент все становится крайне интересно.
Вот прямо сейчас мне регулярно пишут рекрутеры и предлагают заняться тем же, чем я занимаюсь сейчас, но в другой компании. Работу и правда пора менять. Но идти заниматься тем, что я и так хорошо умею смысла нет. Зачем?
А вот под то, чего мне хочется у меня снова нет ни знаний, ни строчек в резюме. Поглядим чем это все закончится. Если все срастется напишу следующую часть. 🙂