Мой путь в профессию: из журналистов в программисты

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


ОБ АВТОРЕ

Расскажу немного о себе, чтобы стало понятнее, как пришёл к тем выводам и рекомендациям, к которым пришёл.


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


Последние года четыре занимаюсь исключительно разработкой и внедрением коммерческого ПО – на основе алгоритмов машинного обучения – в российских и американских компаниях. Официально я Senior Data Scientist, по факту Machine Learning Engineer Middle.


МИНИМАЛЬНЫЕ ЗНАНИЯ И УМЕНИЯ

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


Математика

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


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


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


Программирование и технологии

Датасаентисту пригодятся R, Python и Java/С++. Но для начала хватит пайтона и умения гуглить такие слова, как git, bash, ssh, conda, virtualenv, docker, sql, mongodb, jupyter… Список будет пополняться в процессе.


Использовать можно любую ОС, но лучше ubuntu, kubuntu и прочие mint. В дальнейшем сильно упростит жизнь.


Алгоритмы машинного обучения

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


Компьютерное зрение. Классификация изображений, детекция объектов, сегментация, генерация... Область применения довольно широка: от спутникового наблюдения и диагностики заболеваний до фильтров в инсте и дипфейков. Рекомендую сначала освоить манипуляции с изображениями в numpy, потом изучить библиотеку OpenCV, затем перейти к нейронным сетям.


Обработка естественного языка. Имхо, сложнее двух предыдущих. Придётся пройти длинный путь от TFIDF, матричных разложений, Наивного Байеса и Скрытых Марковских Моделей до рекуррентных нейронных сетей и трансформеров. По-хорошему, понадобятся и базовые знания лингвистики.


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


Есть ещё удивительный мир Big Data, но я с ним не особо знаком. Для интересующихся гуглите: hdfs, hadoop, pig, hive, hbase, cassandra, spark.


СТРАТЕГИЯ ОБУЧЕНИЯ

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


Поэтому я пропустил скучное и сразу перешёл к интересному. В моём случае – к некой разновидности data journalism – стал добавлять больше графиков и чисел в статьи, постепенно повышая их сложность.


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


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


Поэтому совет: делайте что-то конкретное – сайт, приложение, ботов, парсеры, игры, алгоритмы для прогнозирования, рекомендательные системы, автоматизируйте ежедневную рутину, применяйте к вашей текущей работе – параллельно изучайте теорию. В результате получите: 1. готовый продукт – вторичный и довольно ублюдский; 2. настоящие знания – с удивительными пробелами, местами искажённые. Но с каждой итерацией будет получаться всё лучше, а картина нового мира будет проступать всё чётче и яснее.


Если самому трудно что-то придумать, для датасаентистов есть Machine Learning and Data Science Community Kaggle – там можно решать задачи любой сложности (от ученических до реальных бизнес-кейсов), читать обучающие материалы, изучать чужой код, участвовать в соревнованиях. Крайне рекомендую.


ПЕРВАЯ РАБОТА

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


Первое собеседование прошло бодро и, к моему удивлению, результативно:


- Математику знаешь?

- Скорее нет, чем да.

- Программирование?

- Немного могу.

- Машинное обучение?

- Поверхностно, но…

- Приемлемо.


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


ГДЕ БРАТЬ ЗНАНИЯ

Платные курсы

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


Плюсы: 1. помогут сделать первый шаг к профессии; 2. помогут структурировать процесс обучения; 3. потраченные средства обеспечат дополнительную мотивацию.


Полезные курсы и книги

Сам я изучал теорию на Stepik.org (#stepik), Coursera.org (#coursera), Youtube.com (#youtube) и по книгам (#book). Читал чужой код и решал задачи машинного обучения на Kaggle.com.


На Степике большинство курсов бесплатны, на Курсере лекции можно смотреть бесплатно, сертификат и практические задания – за деньги, на Каггле за победу в соревнованиях платят от 10 тыс. до 100 тыс. долларов.


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

Математика для анализа данных – ВШЭ #coursera

Mathematics for Machine Learning – Imperial College London #coursera

Математический анализ (часть 1 и часть 2) – CS центр #stepik

«Основы математического анализа. В 2 частях» – Фихтенгольц Г.М. #book

«Математический анализ. В 2 частях» – Зорич В.А. #book

Линейная алгебра – CS центр #stepik

Линейная алгебра (Linear Algebra) – ВШЭ #coursera

Основы перечислительной комбинаторики – CS центр #stepik

Теория вероятностей – CS центр #stepik

Основы статистики (часть 1, часть 2, часть 3) – Bioinformatics Institute #stepik

Математическая статистика – CS центр #stepik

dU / dV stud (прикладная математика и анализ данных) #youtube


2. Программирование и технологии

Алгоритмы: теория и практика. Методы – CS центр #stepik

Программирование на Python – Bioinformatics Institute #stepik

Python: основы и применение – Bioinformatics Institute #stepik

«Изучаем Python» – Лутц М. #book

«Программирование на Python 3» – Саммерфилд М. #book

Python для решения практических задач – CS центр #stepik

Автоматизация тестирования с помощью Selenium и Python #stepik

Введение в Linux – Bioinformatics Institute #stepik

Murad Aslanov (про GNU/Linux и IT) #youtube

Свободное погружение в СУБД – CS центр #stepik


3. Машинное обучение

Машинное обучение и анализ данных – МФТИ #coursera

Введение в Data Science и машинное обучение – Bioinformatics Institute #stepik

Машинное обучение – ОмГТУ #stepik

Deep Learning Specialization – DeepLearning.AI #coursera

Нейронные сети и обработка текста – Samsung Research Russia #stepik

Natural Language Processing (NLP) – DeepLearning.AI #coursera

Обработка изображений – ВШЭ #stepik

«Learning OpenCV 3 Computer Vision with Python» – Joe Minichino #book

Нейронные сети и компьютерное зрение – Samsung Research Russia #stepik

sentdex (python tutorials and machine learning) #youtube

Reinforcement Learning – University of Alberta #coursera

Machine Learning with Phil (deep learning tutorials & reinforcement learning) #youtube


Не всё из этого списка подойдёт именно вам. Получайте информацию из разных источников. Не понимаете Зорича – читайте Фихтенгольца, не нравятся лекции от ВШЭ – смотрите МФТИ. Гуглите, изучайте отзывы, пробуйте. Тут всё индивидуально.


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


Аналогичные посты на Пикабу от других авторов:

Программа обучения Data science для самостоятельного изучения

Дорога в Data Science глазами новичка

Мой путь в data science