Любая задача машинного обучения - это задача оптимизации, а задачи оптимизации удобнее всего решать градиентными методами (если это возможно, конечно). Поэтому важно уметь находить производные всего, что попадается под руку. Казалось бы, в чём проблема: ведь дифференцирование - простая и понятная штука (чего не скажешь, например, об интегрировании). Зачем же как-то специально учиться дифференцировать матрицы?
из учебника
В 1915 году мы занимались функциональными рядами, а в 1916 году - ортогональными рядами. А потом наступил тысяча девятьсот семнадцатый год. Это был очень памятный год в нашей жизни, в тот год произошло важнейшее событие, повлиявшее на всю нашу дальнейшую жизнь: мы стали заниматься тригонометрическими рядами…
приписывается Д. Е. Меньшову
За последний год много чего изменилось. Кто-то наверное скажет что даже слишком много. И если про глобальные изменения все и так в курсе (благо в честь годовщины про это отписались вообще практический все), думаю будет полезно написать и о том что изменилось в моей жизни. Сразу предупреждаю, букв много а эпиграфы полностью соответствуют основному тексту.
Итак, всё началось 6 октября 2021, когда в госуслуги мне пришло письмо с заманчивым названием «Получите цифровую профессию за полцены». Да-да, я знаю что именно так выглядит 99% рекламного спама, но это же госуслуги, госуслуги не обманывают. Решив что отказываться от подарков не вежливо (тем более родное государство не так часто их делает) я после некоторых раздумий, обсуждений, проверок, а точно ли это не спам, и прочих действий, перешёл по ссылке. Регистрация, авторизация, заполнение анкет было целой историей, достойной отдельного рассказа, но я справился и с этим.
Выбор курса тоже был непростой задачей, с учётом того что раньше я предметом вообще не интересовался. Сложное программирование внушает трепет, тестирование с присущим снобизмом считаю днищем, сайтоклепание навевает уныние, в сетях не разбираюсь. Единственное - люблю возиться с цифрами, находить максимально убедительные аргументы и делать далекоидущие выводы по нескольким разрозненным фактам. Поэтому я обратил пристальное внимание на аналитику. Курсы по аналитике делились на два направления (эх, милый и наивный 2021 год, сейчас там минимум десять видов разных специализаций), собственно анализ данных и дата саенс. При этом DA учили шесть месяцев а DS - восемь, ну и цена у последнего была побольше. В общем, я сделал вывод, что это та же аналитика только выглядит солиднее, обучение объёмнее, заработки больше а суеты меньше. Тем более, если платить только половину то нужно брать по максимуму, подумал я, и записался в яндекс практикум на DS. А яндекс практикум я выбрал в основном по тому что в описании обучения там было расписано больше всего подробностей, обещано больше всего учебных часов и показана самая правдоподобная (в смысле - низкая) будущая зарплата. Ну и со скидками забавная история вышла. Большинство курсов пользовались старым маркетинговым трюком - писали заоблачную базовую цену а потом «только сегодня, только для вас» при заходе на сайт совали скидки в 30, 40 и 50 процентов. Если учесть что государство выплачивает половину от исходной стоимости, то разница в цене между вариантами «возиться с кучей справок и получать 50% скидки» или «тупо кликнуть баннер на сайте и получить 40%» получалась минимальной. Практикум же гордо писал что-то типа «мы ценим своих преподавателей и студентов, поэтому фиг вам а не скидки» что внушало уважение если не честностью то по крайней мере неизбитым приёмом.
После завершения всех бюрократических квестов и оплаты половины стоимости меня записали в группу, обучение которой начиналось примерно через месяц. Надо отметить важную деталь, скидка от государства действовала только при условии успешного окончания курсов, последующего написания кучи отчётов/рефлексий, и соблюдения ещё ряда условий. Так что не смотря на свою природную самоуверенность я немного нервничал, платить полную цену из своего кармана в случае провала очень не хотелось. Поэтому, начал подготовку заранее. Среди нескольких курсов самым полезным оказался «Python для работы с данными» от Нетологии (Олег Булыгин крут неимоверно), который дал базовое представление о том с чем придётся столкнуться. Ну а в декабре 2021 года началась учёба в практикуме.
Итак, я приступил к основной учёбе. Моё первое и самое сильное впечатление - количество студентов. В группе было около 300 человек, а с учётом того что группы запускались каждые две недели, с учётом того что существуют смежные специализации (а ещё расширенные, урезанные, ускоренные и тд), с учётом что онлайн школ и так довольно много (кроме упоминавшейся Нетологии ещё есть всякие курсеры, скилфактори, скилбоксы, гикбрейнсы, отдельные авторские курсы на степике, курсы от универов, и тд и тп), стало очевидно, что идея «получить цифровую профессию» пришла в голову далеко не только мне одному. Как оказалось, за второй «ковидный» год произошёл взрывной рост популярности удалённого обучения и айтишных профессий, что создало две проблемы. Первая - быстрое масштабирование привело к тому что система «захлебнулись» (по крайней мере, в практикуме случилось именно это). Вторая проблема - выход на рынок труда всех закончивших курсы «недо-джунов» мог с большой вероятностью этот самый рынок труда просто обрушить. Впрочем, неожиданные вызовы, проблемы и трудности делают занятие только интереснее.
О том как проходит обучение много рассказывать не хочу, это и на сайте подробно расписано и во всех отзывах рассказано. Кстати, про отзывы, я их много читал и до поступления, и после, известный психологический механизм когда хочется оправдать и подтвердить сделанный выбор. Так вот, изучая отзывы о практикуме я обратил внимание на несколько основных источников негатива (по понятным причинам я больше смотрел именно на негатив). Людям не нравился неуместный юмор, плохо работающий тренажёр, необходимость посвящать учёбе очень много времени, отсутствие конкретных ответов от преподавателей и хитрая система возврата денег. Скажу сразу, лично я ни по одному из пунктов не чувствовал никаких особых неудобств. Юмор был довольно ненавязчивый, к тому же после где-то первой трети обучения плавно сошёл на нет. С проблемами тренажёра я столкнулся раза 3-4, некоторые были достаточно неочевидные но всегда были люди которые столкнулись с ними раньше меня, так что решение чаще всего было уже известно. Ответы преподов были вполне подробные, вплоть до кусков кода, в гугл ни разу не посылали (может услышали критику и сменили стиль? или просто мне так повезло?). Ну и, понятное дело, времени мне хватило а деньги возвращать не понадобилось. Кстати, забавное (ну или грустное) наблюдение. По программе «Цифровые профессии» в начале возмещали только 30 тыс со строгим отбором, потом половину стоимости всем обратившимся, а сейчас до 100% но только отдельным категориям граждан. В том числе - безработным, малообеспеченным, инвалидам и тд. По численности - учащихся было 39 тыс в 20 году, потом 50 тыс в 21, потом 200 тыс в 22. Если вспомнить что господдержка действует только при условии полного прохождения курса (если вылететь, придётся выложить полную стоимость из своего кармана) можно представить в какую двусмысленную ситуацию попали создатели курсов, к которым ломанулись те кто в случае отчисления лишится господдержки а самостоятельно с высокой степенью вероятности заплатить не сможет. В общем, если встретите кучу возмущённо-недоумевающих отзывов в стиле «что за фигня, мне долго задавали не относящиеся к делу вопросы а потом отказали без объяснения причин», не удивляйтесь.
Если говорить непосредственно про предметы, то в начале был питон и много пандаса. Начало курса, насколько понимаю, было одинаковым на всём направлении аналитики. Это впрочем и к лучшему, материал был подробный, интересный, без глюков, ошибок и прочих некорректностей. Самостоятельные проекты в меру подробные, ревьюеры писали интересные замечания и подкидывали ссылки на доп информацию. Увлёкшись этой доп информацией я набрал бесплатных курсов, для углубления в темы в свободное время. Здесь стоит отметить
легендарный курс «Основы статистики» от Анатолия Карпова. В нём особенно интересны две вещи. Первое - это на самом деле очень подробный, интересный и понятный базовый курс по статистике, всем рекомендую. Второе - его автор. Когда он начинал начитывать курс выглядел как типичный молодой аспирант - в белой рубашке, щуплый, шустрый и с горящими глазами. Продолжение курса - тот же Карпов уже в роли бизнесмена и руководителя своей онлайн школы - забронзовевший (натурально с тропическим/бронзовым загаром), вальяжный и заматеревший, уверенный в себе чувак. В общем «к успеху пришёл», и судя по качеству лекций, к вполне заслуженному успеху.
Ещё хороший курс -
Практикум по математике и Python точнее это не курс а куча задач. Когда решал, прямо чувствовалось как мозги разворачиваются в нужном направлении.
Потом, лекции от ШАД, фрагментарные и довольно поверхностные (те что мне попадались) но тоже неплохие.
И последнее (по порядку но не по значимости) на что стоит обратить внимание - курс "Deep Learning" Школы глубокого обучения ФПМИ МФТИ. Он очень хорошо дополняет курс практикума, при этом повторяется в «живом» виде каждый год, так что это не застывший набор видеолекций а почти обычное заочное обучение, полностью бесплатное.
После новогодних праздников, начала проявляться первая из упомянутых мной проблем - сроки проверки самостоятельных проектов поползли вправо и вместо обещанных двух дней стали доходить до восьми - девяти (у некоторых, слышал, до двух недель). При том что одна тема обычно изучалась именно две недели, длинные проверки сильно снижали осмысленность, ломали график и вообще демотивировали. К счастью, я предусмотрел довольно неплохие резервы для ускорения и интенсификации учёбы, поэтому теорию я стал проскакивать сразу как откроется новая тема за 2-3 дня, и как можно скорее приступать к задачам и проектам, что позволило проскакивать «бутылочное горлышко» без особых проблем. Через пару месяцев ситуация более-менее выправилась. Общий материал закончился (более узкие специалисты стали проверять более узкие области), набрали больше людей на проверку а часть учеников отсеялись или отстали. Кстати, в качестве «компенсации за неудобства» открыли доступ к части материалов более дорогого курса, в общем, лично я от всей этой суеты остался только в плюсе.
Завершив блок по анализу, приступили непосредственно к машинному обучению. Что могу сказать, восхитительное чувство узнавания чего-то нового и интересного трудно описать но невозможно ни с чем спутать. Впрочем, это продолжалось только пока мы проходили классическое МL. После базовых алгоритмов мы рассмотрели пик работы с табличными данными - градиентный бустинг, и даже сравнили несколько его реализаций (понятное дело, в рабочей среде яндекс практикума яндексовский же катбуст победил конкурентов с большим отрывом). К счастью (или к несчастью) мы на этом не закончили и перешли на нейросети. А с ними всё было уже не так радужно, в ограниченном несколькими месяцами объёме программы получить хоть какое-то системное и целостное представление фактический невозможно. Поэтому PyTorch и Tensorflow мы оставили без рассмотрения, о больших данных прочитали пару абзацев, метод загрузки картинок узнали ровно один (без всяких пояснений), вычисления на GPU "прошли" (мимо) и тд и тп. В итоге, например, вся работа с изображениями свелась к тому, что мы писали функцию меняющую последний слой предобученной ResNet, отправляли её «куда-то туда» (на яндексовский сервер) и в ответ получали итоговую метрику. Что особенно смешно, некоторые пытались повторить ту же задачу в нормальном исполнении и на своей машине, у некоторых вообще ничего не получилось у остальных результат получился сильно хуже. Проще говоря, практический весь Deep learning добавлен в курс исключительно для галочки, чтобы можно было написать в учебном плане «материал пройден», без каких-то рабочих навыков и без малейшего понимания. Ситуацию извиняет тот факт что в указанные рамки нормальную подачу этой темы вместить в принципе невозможно. Лично я так и не нашёл ответ на вопрос, что хуже обещать DL и подсовывать поверхностное знакомство/профанацию, или вообще ничего не давать.
Ещё был блок SQL, судя по всему тоже общий на всё направление. Вот он понравился, плотность информации практический на пределе умственных ресурсов, один раз даже пришлось копипастить код из обсуждения более продвинутых и зашедших вперёд учащихся (ни до ни после я такого себе не позволял). Впрочем, ему отводилось всего две недели, а за две недели даже лучший курс полного представления не даст, но база получилась неплохая, вплоть до довольно сложных вещей.
В конце был итоговый проект. Итоговый проект был сравнительно простой и довольно бестолковый. Нагнетание напряжения (кто не сдаст диплом не получит), созвон с «тимлидом», баллы, которых нужно получить определённое количество для зачёта, ограничение по времени, всё это оказалось гораздо страшнее на словах чем в реальности.
На этом непосредственно учёба закончилась и можно было выдохнуть, хотя бы в том смысле ничего доплачивать не придётся. Пора было переходить к следующей задаче, найти место где можно будет использовать полученные знания, а в идеале ещё и получать за это деньги. Помня о второй проблеме (разросшиеся курсы обрушили рынок и чем дальше тем выпускников становилось больше) я начал рыться в вакансиях довольно рано, где-то в середине обучения. И везде я получал презрительное молчание. Поняв, что в этот раз выбрал явно неудачную стратегию, я даже немного расстроился но быстро взял себя в руки и сменил тактику. А точнее я сделал две вещи, выписал список нужных тем (чтобы привести в систему кучу бесплатных курсов на которые записался ранее) и начал активно участвовать в активностях.
список тем выглядел примерно так
В последнем мне сильно помогла так называемая «мастерская». В практикуме (как и почти во всех курсах) обещают не только обучение но и карьерную помощь. В принципе, ничего сверхъестественного там не говорят, «опишите свой опыт», «вот список ресурсов с вакансиями», «подготовьте рассказ о себе» и прочие очевидные для не в первый раз ищущего работу человека вещи. И в процессе этой самой карьерной помощи периодический предлагают поучаствовать в более-менее реальных проектах, это и есть мастерская. Группы там всего по 10-15 человек, задачи интересные и разнообразные. В общем, тот самый бесценный «реальный опыт» позволяющий выбраться из замкнутого круга «никуда не берут по тому что нет опыта - нет опыта потому что никуда не берут». А одно из тех самых реальных заданий заключалось в кагловском соревновании. Как оказалось, ничего страшного в этом нет, а пользы много, начиная от азарта борьбы с соперниками (и повышении самооценки) заканчивая разбором решений более продвинутых соперников. Так я и покатился по наклонной, хакатоны, соревнования, онлайн-стажировки, другие активности... Оказалось что по DS их реально очень и очень много. А ещё оказалось, что я однозначно не хуже как минимум половины всех участвующих, а то и в верхних 10% (для локальных соревнований начального-среднего уровня, конечно, но и это неплохо). Параллельно я сделал ещё несколько проектов в мастерской, в том числе с реальной аналитикой и попытками прикрутить ML к ранее существующему сервису. Параллельно развивал профиль в линкедин, и доразвивался до воплощения известной шутки в реальности. При этом «предложили пообщаться» даже не по теме DS который я так долго и старательно изучал а по первому образованию. В любом случае, собеседоваться в известную геймдев компанию, с учётом того что ты не особенно хочешь туда попасть, это полезный опыт да и просто весело, даже если в итоге отказали. В конце концов работу я всё же сменил, и даже умудрился подтвердить своим примером обещания «большая часть выпускников находит работу в пределах четырёх месяцев*» (после звёздочки куча уточнений мелким шрифтом)
Подводя итог и делая выводы. Когда я советовался со знающими людьми о том стоит ли переходить в IT все говорили что однозначно да (тем из них кто это сейчас читает - спасибо за совет). При этом сотни курсов готовят тысячи людей по всем направлениям ежемесячно, чувство «успел заскочить в последний вагон» не оставляет до сих пор. И то что я умный, это только один фактор, не заметный на фоне множества других обстоятельств где основную роль играло чистое везение.
Итак мне повезло в том что:
1. Наткнулся на «Цифровые профессии» в 2021 году, когда суммы господдержки были уже заметными, брали практический всех а не по категориям, и огромные толпы людей только начали набегать в айти.
2. У меня были в наличии деньги которыми не жалко рискнуть ради такого довольно авантюрного дела как изучение совершенно новой профессии.
3. Я подобрал хороший набор платных и бесплатных курсов. Это дало равномерность нагрузки (когда одни провисали занимался другими), лучшее понимание сложных моментов (что плохо рассказали одни хорошо рассказали другие), глубину погружения и широту обзора. При этом одни только платные или одни только бесплатные курсы такого эффекта бы не дали. Потому что в платных из-за ограниченного времени информации явно недостаточно а нормальные бесплатные нужно искать в кучах хлама, без базы от платных я бы этого сделать точно не смог.
4. Изначально была хорошая работа. В смысле и правда хорошая, не далеко от дома, с понимающим и не напрягающим начальством, с возможностью откладывать на будущее проседание дохода, с возможностью часть вещей делать вообще на автомате используя только спинной мозг. Это всё критический важно, результативность учёбы когда загружен сложным проектом и когда левой ногой рисуешь по простым шаблонам различается в разы. И без достаточно большого количества задач которые можно выполнять не приходя в сознание, с совмещением работы и учёбы я бы не справился.
5. У меня не случилось проблем ни с семьёй ни со здоровьем ни связанных с внешней политико-экономико-эпидемиологической ситуацией. А случилась всеобщая поддержка и понимание.
6. Выбранная тема мало того что и раньше была довольно крутой-модной-хайповой так ещё и в прошлом году «выстрелила» так как никто и ожидать не мог, со всякими болталками, рисовалками и прочим. Так что все аспекты, от учебных и справочных материалов, до соревнований/конференций/встреч были на самом высоком уровне.