Отзыв на учебу в ШАДе Султана Нурмухамедова

Отзыв на учебу в ШАДе Султана Нурмухамедова

8 мая 2023

Отзыв на учебу в ШАДе Султана Нурмухамедова

Всем салем! Меня зовут Султан Нурмухамедов

Более чем два года назад я прочитал пост Алена Баева в Сообществе о его учёбе в Школе анализа данных (ШАД).
Этот пост сильно бустанул мою мотивацию поступать в ШАД. Теперь, спустя два с небольшим года, сам будучи без пяти минут выпускником, я решил написать свою историю поступления и учёбы в ШАДе.


Мотивация

К январю 2021 года у меня был диплом НУ (math major) и работа RA там же. Примерно в это время я принял для себя решение поступать в Школу анализа данных.

Почему я решил поступать? Было две основные причины:

  1. Объективная — за ML будущее, а ШАД — одно из лучших мест, где этому обучают.
  2. Субъективная — меня замотивировали рассказы о том, как это тяжело. Хотелось поступить хотя бы потому, что это сложно.

Подготовка:

Расстановка сил на старте была такая:

  • Неплохо знал теорию вероятностей.
  • Более-менее помнил линейную алгебру.
  • Матанализ — хуже.
  • Алгоритмы последний раз трогал на первом курсе универа.

Как готовился?

  • Получил "жёлтый пояс" по C++ на Coursera.
  • Прошёл 3 курса по алгоритмам от San Diego.
  • Решал LeetCode, готовился по математике:
  • Линал — Кострикин.
  • Матан — Демидович.
  • Теорвер — задачи из сборника Севастьянова.

Вступительные

Первый этап: онлайн тест

Решил 11 из 12 задач.
Решения не проверяют, важны только ответы. Все аналитические ответы дополнительно проверял на Python.


Второй этап: контест и математика

Контест по алгоритмам

  • Решил 4 из 5 задач.
  • Последнюю даже не трогал — оказалась "гробовая", решили только единицы.

Экзамен по математике (8 задач):

  • 2 на матан,
  • 2 на линал,
  • 2 на теорвер,
  • 1 на алгоритмы (описание + оценка по времени/памяти),
  • 1 "ультрасложная" на свободную тему.

Мои ожидания:

  • Планировал решить 4, максимум 6 задач.
    Реальность:
  • Решил только 2.
    После этого вера в успех резко упала, мотивация к подготовке к следующему этапу — тоже.

Собеседования

Через три недели — письмо с приглашением!

1. Собеседование по мотивации

Главное: показать, что ты не "залётный", знаешь, куда поступаешь, и готов тратить по 30–40 часов в неделю на учёбу.

2. Алгоритмы

3 задачи уровня LeetCode Easy.
Вся сложность — время (30 минут) и необходимость проговаривать мысли вслух.
Решил все три.

3. Математика

  • Задача по линалу — найти детерминант 1000×1000. Повезло, решал её у Кострикина.
  • Затем — вопросы по теорверу.
  • Самое сложное — вычисление математического ожидания случайной величины.
  • Сначала не получалось, но затем вспомнил про moment-generating function.

Через две недели после собеседований пришло письмо о зачислении в ШАД!

Учеба в ШАДе

После поступления просят выбрать трек, по которому хочешь обучаться. Их четыре:

  • Data Science
  • Разработка машинного обучения
  • Инфраструктура больших данных
  • Анализ данных в прикладных науках

Выбор трека влияет на то, какие курсы тебе предстоит закрыть. Например, на инфраструктурном треке можно не закрывать ML, но обязателен курс по операционным системам, разработчику машинного обучения необходимо закрыть C++, а дата саентисту Python. Также имеется большая свобода в выборе элективов. Главное, чтобы в каждом семестре было как минимум три закрытых курса. Я решил выбрать трек Data Science, хотя по итогу, помимо своих курсов, умудрился закрыть все необходимые курсы для разработчика ML.

Первый семестр

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


Алгоритмы 1

Самый жесткий среди обязательных курс в ШАДе

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

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

Теоретические же домашки мне показались скучными. Обычно просят придумать решение для задачи или доказать оценку сложности для какого-нибудь алгоритма (если смотрел лекции, то все это не очень сложно).

На код-ревью, в отличие от контес��а, твой код проверяют еще и на симпатичность. Код-ревью мне показались скорее больше про знание C++ и паттерны проектирования, чем про сами алгоритмы. За несколько итераций с проверяющим (обычно работник Яндекса) твой костыльный говнокод должен превратиться во что-то более менее приличное.

Сложность: Hard
Моя оценка: Зачет


Python

Очень полезный и очень интенсивный курс

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

Из больших домашек не успел сделать только map-reduce, так как принялся за нее только за три дня до дедлайна. Курс показался мне слишком объемным. Если на первых лекциях еще успевал ухватывать суть, то к концу семестра у меня уже ехала крыша от корутин, метаклассов и дескрипторов. Очевидно, что курсу очень тесно в рамках одной части, как, например, курсу по C++.

Сложность: Medium
Моя оценка: Хорошо


Машинное обучение 1

Идеальное введение в ML

Курс прекрасно подходит для тех, кто никогда не занимался машинным обучением. Начиная с матричного дифференцирования и мат статистики, вы плавно переходите непосредственно к самому ML - классическое обучение с учителем, оценка качества, вероятностные модели, методы оптимизации и т.д. Помимо теории, каждая лекция сопровождается практикой - sklearn, catboost, pandas и прочее.

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

Сложность: Easy
Моя оценка: Хорошо

Второй семестр

На второй семестр из обязательных для меня курсов были - Основы статистики в машинном обучении и Машинное Обучение 2. Также я взял Алгоритмы 2 (да, я люблю боль) и Рекомендательные системы.


Основы статистики в машинном обучении

Много теории, мало практики

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

Сложность: Medium
Моя оценка: Хорошо


Алгоритмы 2

Алгоритмы на максималках

То же самое, что и первые алгоритмы, только на максималках. Закрывая этот курс, понял, насколько круто объясняет Макс Бабенко. Обычно преподам приходится выбирать между математической точностью и педагогической ясностью повествования. У Макса же получается объяснять довольно сложный материал понятно и во всех деталях.

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

Сложность: Hard
Моя оценка: Зачет


Машинное обучение 2

Сборная солянка всего, что не влезло в первую часть

Вторая часть курса по машинному обучению. По сути, сборная солянка всего, что не влезло в первую часть. Тут и свертки, рекуррентные сети, кластеризация, ранжирование, EM и т.д. В целом курс устроен так же, как и первая часть — теория, лабки, Kaggle конкурсы. Из минусов: в виду большого количества тем лекторы пытаются впихнуть в тебя максимум знаний за сжатые сроки. Ну, невозможно за лекцию и семинар объяснить RL или рекомендательные системы (по крайней мере мне). Скорее вам дадут некую интуицию и начальную информацию по теме. А дальше, если будет интересно, либо бери соответствующий теме курс в ШАДе, либо изучай самостоятельно.

Сложность: Medium
Моя оценка: Зачет


Рекомендательные системы

Отличный курс, на который не хватило времени

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

Сложность: Medium
Моя оценка: Незачет

Третий семестр

Говорят, второй курс в ШАДе сильно легче первого. Так оно и есть. Из обязательных курсов тут Компьютерное Зрение или NLP. Взял оба. Третьим взял C++. По Компьютерному Зрению и NLP настрой был боевой. Должен же я хоть раз в ШАДе получить «Отлично». А вот по C++ настрой был скорее вялый. Долго рассуждая о полезности C++ для дата саентиста, решил все таки, что полезно, но не настолько, чтобы рваться на оценку выше зачета.


Компьютерное Зрение

Самый лучший курс в ШАДе

По-моему, самый лучший курс в ШАДе. Курс можно разбить на две части. В первой объяснят основы обработки изображений (шумоподавление, выделение краёв, сжатие изображений). Вторая часть про нейросетевые методы классификации, сегментации, распознавание лиц и т.д. Очень понятные и интересные семинары, где объясняют, как работает каждая строчка кода (в отличие от того же ML 2, где за минуту прокликивают весь ноутбук).

Но главная фишка курса - это нереально крутые домашки. Во первых они почти все с автоматической проверкой, во вторых подкреплены подробнейшим описанием в pdf (в отличии от курса по эффективному DL, где описание походу писал ChatGPT).

Чего стоит домашки по реализации алгоритма сжатия JPEG или написании сверточных сетей (с батчнормами и дропаутами) на одном только numpy. Также понравилась домашка по поиску ключевых точек на лице, на которой я долго не мог набрать на полный балл. Оказалась, для полного балла ребята писали аугментаций на несколько страниц кода и придумывали всякие хаки для обучения.

Сложность: Medium
Моя оценка: Отлично. Даже умудрился войти в топ 3 по сумме баллов.


C++

Классные преподаватели и интересные задачи

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

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

Сложность: Medium
Моя оценка: Зачет


NLP

Понятный и последовательный курс

Очень понятный и несложный курс. В первой части курса дается база — words embeddings, text classification, language modeling, transformers и т.д. Во второй части идут лекции от приглашенных спикеров.

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

Из минусов: долгая проверка домашек. Последнюю дз мне проверили аж в начале следующего семестра.

Сложность: Easy
Моя оценка: Отлично

Четвертый семестр

В последнем семестре у меня была полная свобода в выборе предметов. Я взял два курса от ВШЭ: Генеративные модели и Эффективные системы глубинного обучения. И два чисто шадовских курса: Обучение с подкреплением и Рекомендательные Системы. Ген Модели и Эффективный DL начались вместе с учебой в вышке в середине января. Остальные предметы, как обычно в ШАДе, стартовали во второй половине февраля.


Генеративные Модели

Дорогой, но очень интересный курс

Самый дорогой для меня курс в ШАДе. Сейчас объясню. Дело в том что в начале каждого семестра студенту в пользование выдается датасфера (яндексовый аналог google colab). Но в этот раз доступ к ней мне выдали слишком поздно. Соответственно, все свои модели я обучал на колабе. А так как ГАНы - Гадкие и Абсолютно Необучаемые, то пришлось раскошелиться на кругленькую сумму на покупку ресурсов.

Помимо ГАНов на курсе рассказывают о вариационных автокодировщиках, авторегрессионных моделях, нормализующих потоках и других подходах. Курс состоит из 4 основных домашек, проекта и экзамена (последние два необязательны). Кроме первой, все домашки сильно времязатратные. Например, на написание StarGAN v2 потратил около 30 часов чистого времени без учета времени обучения модели. Зато когда видишь конечные картинки, испытываешь нереальный кайф.

Сложность: Hard
Моя оценка: Хорошо


Эффективные системы глубинного обучения

Про то, как пошаманить с нейросетями

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

Домашки тут все разные. Где-то надо просто добавить WandB и Hydra в готовый код, а где-то нужно было написать свой Butterfly All-Reduce и Ring All-Reduce. В целом курс получился очень полезным и информативным.

Из минусов: крайне непонятное описание домашек и чат, на 99 процентов состоящий из мемов и аниме, в массе которой теряется очень важная инфа.

Сложность: Medium
Моя оценка: Хорошо


Обучение с подкреплением

Понятный и интересный курс

Понятный и крайне интересный курс. Преподы классные, стараются объяснять материал максимально простым языком.

Домашки несложные а-ля вставьте свой код в указанном месте. Были также и теоретические дз на доказательства. Понравилась домашка с реализацией Advantage Actor Critic для игры Atari Breakout. При оптимальной политике обучения (не лезть писать код, пока полностью не поймешь теорию) курс покажется легким и кайфовым.

Сложность: Easy
Моя оценка: Хорошо-Отлично (жду проверки)


Рекомендательные Системы

Вторая попытка

Моя вторая попытка закрыть рекомендашки.

Сложность: Medium
Моя оценка: Курс еще не завершен

Финальные проекты

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

Итоги

Что дал мне ШАД:

  • Фундаментальные знания в области DS/ML
  • Умение быстро учиться и адаптироваться
  • Сильное портфолио проектов
  • Сеть контактов среди талантливых специалистов

Насколько хорош ШАД сейчас?

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

Кем надо быть чтобы поступить в ШАД?

Есть расхожий стереотип о том, что в ШАД идут те, кто между дотой и пивом с пацанами выберет порешать Демидовича. Отчасти это правда. Хорошее математическое образование, наверное, обязательно, хотя и были люди, кто поступал с гуманитарных факультетов, но это скорее исключение из правил. При этом богом математики и крутым олимпиадником быть не требуется. И без этого при должной подготовке поступить очень даже возможно.

Советы поступающим:

  1. Не бойтесь сложностей — они закаляют
  2. Готовьтесь системно — особенно по математике и алгоритмам
  3. Будьте готовы к интенсивной учебе — это действительно 30-40 часов в неделю
  4. Не сдавайтесь после неудач — я думал, что провалил математику, но все равно поступил

Сейчас, оглядываясь назад, могу сказать, что это были одни из самых сложных, но и самых полезных двух лет в моей жизни. ШАД полностью изменил мою карьерную траекторию и открыл двери, о которых я раньше мог только мечтать.