Освоить новую профессию и начать работать в сфере ИТ сейчас хотят многие. Моя история доказывает, что переквалифицироваться реально, хотя и очень сложно. Расскажу о своем входе в сферу Data Science с несколько нестандартной исходной точки. Шесть лет учёбы филологии, преподавания языков и разработки игр привели к тому, что к тридцати годам я поняла, что хочу всё поменять, и отныне моё призвание – Data Science. В этой статье в блоге ЛАНИТ - подробно о том, какой путь мне пришлось пройти и чему я училась на каждом из этапов. Все пароли-явки курсов и полезных учебных материалов вы найдете под катом. 


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

В этом посте я расскажу:

  • какая нужна подготовка, чтобы погружаться в Data Science;

  • какие темы нужно изучить и где взять ресурсы;

  • стоит ли идти на курсы по Data Science или учиться самостоятельно.

Подготовка

Первым моим шагом был курс Andrew Ng на Coursera (зайти на сайт Coursera можно, лишь используя VPN). Несмотря на высокое качество курса, отсутствие математической подготовки сильно затрудняло мое обучение. Я читала, что для прохождения курса достаточно базовых знаний. Для меня это, когда ты умеешь возводить числа в степень и от букв в формулах не падаешь в обморок.  Для авторов курсов – это экспонента, производные и операции с матрицами. Поэтому после непрерывных рыданий и ударов головой о стену я всё же решила восполнить упущенное. Но об этом подробно чуть позже. 

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

  1. Обещание: «специальные математические знания не требуются, достаточно школьной программы».
    Реальность: математика необходима. Возможно, ваша школьная программа была особенной, но половина моих однокурсников в лучшем случае могла пользоваться калькулятором и понимала принцип работы с дробями. Без основополагающих знаний вам будет ничего не понятно: ведь оптимизация любой модели машинного обучения требует строгих математических расчётов.
    Расскажу байку для понимания масштаба проблемы. Производили отладку кода с однокурсником, искали ошибку, анализируя переменные. Обнаружив, что вместо ожидаемого вектора у нас был скаляр, я указала на ошибку. Однокурсник недоумевал: «И что?» Такие моменты подчеркивают необходимость освоения базовых концепций.

  2. Обещание: «не нужно уметь программировать, мы вас научим».
    Реальность: изучение Python проходит скоротечно, сбивчиво и без возможности усвоить информацию. Если вам всё понятно с первого раза – повезло. Лично я редко что понимаю с первого прочтения, а курсы обычно не предусматривают времени на подумать. Поэтому настоятельно рекомендую, попрактиковаться писать хоть что-то хоть на каком-то языке программирования. В идеале – на Python. 

  3. Обещание: «английский не нужен, вся программа на русском».
    Реальность: программа на русском, это так. Но большая часть технической документации, научных исследований, да и форумы вроде Stack Overflow на английском. Отсутствие базовых знаний английского языка, наверняка, вызовет трудности. Необходимости сразу погружаться в технический английский нет, но начать читать тексты подлиннее, чем комиксы в соцсетях, определённо стоит.

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

Готовый трек смены профессии

0. Английский язык. Просто зафиксирую здесь, что он нужен. Учите любым доступным способом. Даже не требуется технический английский, просто поймите, как строятся предложения.

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

Прежде всего, рекомендую замечательный курс на Хан Академии, который в понятной манере раскрывает основы математики. Для визуального понимания добро пожаловать на канал 3Blue1Brown на YouTube, где математические понятия воплощаются в живые образы. Обязательно решайте задачи на Хан Академии. Каждое успешное решение задания будет отмечено анимацией с милыми детальками лего; это не только забавно, но и очень мотивирует.

a) Видео о векторах и матрицах: YouTube Channel - 3Blue1Brown

b) Задачи по калкулусу: Khan Academy - AP Calculus AB

c) Полезное дополнение к курсу Хана: YouTube - Essence of calculus

2. Python

Для освоения Python рекомендую курс Артёма Егорова на платформе Stepik. Он отлично структурирован. С ним вы плавно перейдете от основ к продвинутым темам.

3. Работа с Linux

Командная строка - это нечто большее, чем просто черный экран с белыми буквами. Ознакомьтесь с базовыми Linux-командами, например в этой статье. Этот навык вам точно пригодится.  

4. Специфические модули Python для ML

- Jupyter Notebook — среда, в которой удобно писать и тестировать код.

- Pandas — для работы с данными в табличной форме.

- NumPy — для эффективных математических расчетов.

Открывайте официальную документацию модулей и экспериментируйте прямо в ноутбуках.

5. Git и версионирование

Понимание Git - это ключевой навык. Упражняйтесь в создании и слиянии веток, работе с коммитами на интерактивном ресурсе Learn Git Branching. 

6. FAST API (REST)

Практически ни одна модель не обходится без интеграции в приложение. Рано или поздно вам придется осваивать REST API для того, чтобы ваша модель могла взаимодействовать с веб-сервисами. Начните с FastAPI — это современный, быстрый web-фреймворк для построения API с Python.

7. Классическое машинное обучение

Теперь об изучении самого сердца Data Science — машинного обучения. Можно выбрать простой путь: найти готовый курс, где все темы рассматриваются последовательно. Если же вы любите вызовы, выбирайте самостоятельное погружение — каждое ключевое слово из списка ниже станет маяком, который поможет не утонуть в океане информации. В качестве помощника рекомендую взять учебник по машинному обучению от Яндекса.

7.1. Основы машинного обучения. Термины (выборка, таргет, функция потерь, функционал качества, метрики качества).
7.2. Линейные модели и оценка качества.
7.3. Линейная регрессия. 
7.4. Градиентный спуск (вот тут привет производным).
7.5. Обобщающая способность модели и зачем нужна кросс-валидация.
7.6. Проблемы переобучения, мультиколлинеарность, регуляризация (привет векторам).
7.7. Работа с данными (отбор признаков, работа с пропущенными значениями, работа с выбросами).
7.8. Задачи классификации (бинарная классификация). Разделяющая плоскость, метод верхней оценки, логистическая регрессия).
7.9. Метрики классификации (матрица ошибок, Precision и Recall).
7.10. ROC, ROC_AUC, калибровка вероятностей.
7.11. SVM (метод опорных векторов) VS логистическая регрессия.
7.12. Многоклассовая классификация (one vs rest, one vs one).
7.13. Метод понижения размерности (PCA, TSNE).
7.14. KNN (метод ближайших соседей).
7.15. Решающие деревья.
7.15.1. Принцип работы, критерии качества и информативности, критерий остановы, жадный алгоритм.
7.15.2. Проблемы с обобщающей способностью, методы борьбы с переобучением.
7.16. Композиции алгоритмов.
7.16.1. Бэггинг.
7.16.2. Random Forest.
7.16.3. Стеккинг.
7.17. Градиентный бустинг.
7.18. Bias-Variance trade-off.
7.19. Задачи кластеризации и алгоритмы решения (K-means, DBSCAN).
7.20. Рекомендательные системы. Контентная рекомендация VS коллаборативный подход.

8. Deep Learning

Следующий большой блок – работа с нейронными сетями. Рекомендую зайти на hugging face и искать полноценные туториалы к задачам, которые будут описаны ниже. Для лучшего погружения рекомендую курс Deep Learning на пальцах. 

8.1. Для тех, кто не хочет ждать вечность расчета моделей, а мощности на компьютере не хватает, Kaggle — это спасение. На сайте Kaggle доступны инструкции по работе с GPU для ускорения вычислений. Есть суточный лимит, но его вполне хватает.
8.2. Основы DL. Полносвязные слои и функции активации.
8.3. Оптимизация нейронных сетей, метод обратного распространения ошибки (backward).
8.4. Свёрточные нейронные сети.
8.5. Векторные представления изображений.
8.6. Основные задачи с компьютерным зрением (детекция, сегментация и т.п.).

9. Natural Language Processing

Отдельно выделю тему обработки естественного языка, потому что мне как филологу эта тема ближе всего, конечно. Очень рекомендую изучить курс Лены Войты NLP for you.

9.1. Векторные представления слов: Bag of words —> TF-IDF —> Word2Vec, Glove. В этом разделе главное - понять, как можно представить слова компьютеру и в каком случае какой способ использовать.
9.2. Задачи классификации текстов. Одна из хрестоматийных задач. Подробнее можно почитать в этом разделе курса. 
9.3. Языковые модели, рекуррентные нейронные сети, convolutional layers, генерация текста в свете классификации токенов. 
9.4. Энкодеры и декодеры и механизм внимания. 
9.5. Перенос знаний между моделями. 

10. Статистика и теория вероятностей

Эта тема хоть и включена в большинство программ, но иногда требует более глубокого понимания. Курс от Анатолия Карпова на платформе Stepik даст теоретическую базу, которая поможет в дальнейшем обучении. 

11. Оценка сложности алгоритмов, теория графов. 

В этой теме поможет практика и ещё раз практика. Решайте задачки в свободное время.

12. Используй здравый смысл.

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

Стоит ли идти на курсы

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

Тесты и упражнения для закрепления знаний

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

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

Помощь кураторов

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

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

Проектирование и практический опыт

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

Минус: на практике за время обучения часто создаётся лишь один типовой проект, в то время как самостоятельное обучение дарит свободу выбора и разнообразия в проектах.

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

Резюме

Курсы

Самостоятельное обучение

Готовая программа

Есть, составлена экспертами

Приведена мной выше, составлена с опорой на собственный опыт

Упражнения

Есть тесты и упражнения, которые помогут проверить, насколько хорошо вы усвоили материал

Упражнения есть в списке выше, плюс можно найти самостоятельно.

*Бонус: придётся зацепить больше тем и прокачаться сильнее

Помощь во время обучения

Поддержка кураторов (не всегда качественная)

Поддержка сообщества или поддержка ментора

Практика

Один шаблонный проект

Количество проектов ограничивается только вашей фантазией

Связанность материалов

Все материалы в одном месте, темы связаны

Все материалы в разных местах, логических переходов между темами нет

Дедлайны

Есть жёсткие дедлайны

Дедлайнов нет

Вывод

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

*Статья написана в рамках ХабраЧелленджа 2.0, который прошел в ЛАНИТ весной 2024 года.  О том, что такое ХабраЧеллендж, читайте здесь.

Комментарии (2)


  1. CrossEntropy
    19.09.2024 06:18

    Забыли про reinforcement learning в разделе про машинное обучения.


    1. Valery-Val Автор
      19.09.2024 06:18

      Действительно! Спасибо за дополнение! Единственное, я бы эту тему на следующую ступеньку вынесла, потому что если мы рассматриваем начальные шаги, то RL может сбить с толку