ПУТЬ К ПОЗНАНИЮ МИСТЕРИЙ ОБУЧЕНИЯ МАШИН БЕЗ ТРАТЫ ДЕНЕЖНЫХ РЕСУРСОВ источник картинки ПУТЬ К ПОЗНАНИЮ МИСТЕРИЙ ОБУЧЕНИЯ МАШИН БЕЗ ТРАТЫ ДЕНЕЖНЫХ РЕСУРСОВ ЧАСТЬ I (предварительные знания) ДИСКЛЕЙМЕР Мир машинного обучения и анализа данных многообразен. Внутри него есть целый ряд специализаций, которые требуют разных навыков. Эта презентация является частным мнением одного человека с математическим бэкграундом и опытом работы только в левой колонке Рис.1 (Machine Learning Engineer и Machine Learning Researcher). Рис. 1. Можно посмотреть источник картинки для того, чтобы узнать чуть больше об этих специализациях ДИСКЛЕЙМЕР Поэтому путь, указанный в данной презентации, является лишь одним из возможных и больше ориентирован также в сторону той же левой колонки. Люди с другим бэкграундом и опытом работы могут иметь другое мнение на то, чему нужно учиться для успешных занятий ML (Machine Learning) или DS (Data Science) и указать другой путь, и это нормально. Рис. 1. Можно посмотреть источник картинки для того, чтобы узнать чуть больше об этих специализациях Предварительные знания Классическое машинное обучение Глубокое машинное обучение Инструменты для конкретной роли Поиск работы ЧАСТЬ I Вот приблизительная схема областей, которые нужно постичь для работы в области машинного обучения. На картинке путь выглядит прямым, как будто он идет сверху вниз, но в реальности обучение всегда нелинейное. Время от времени нужно возвращаться обратно, чтобы что-то повторить, пересмотреть план обучения и т.д. и т.п. В данной презентации мы разберем часть “Предварительные знания”. Предварительные знания Классическое машинное обучение Глубокое машинное обучение Инструменты для конкретной роли Поиск работы Предварительные знания МАТЕМАТИКА Основы Линейной Алгебры Основы Мат. Анализа Основы Мат. Статистики ПРОГРАММИРОВАНИЕ Основы выбранного языка программирования Основы Алгоритмов и Структур Данных МАТЕМАТИКА Основы Линейной Алгебры Основы Мат. Анализа Основы Мат. Статистики Самые минимальные знания по основам линейной алгебры и мат. анализа, которые нужны для того, чтобы можно было начать смотреть и немного понимать некоторые учебные материалы про работу нейросетей, можно получить, посмотрев по четыре первых видео из следующих плейлистов известного 3blue1brown: ● ● Essence of Linear Algebra Essence of Calculus (К сожалению, видео на английском, но нам все равно придется привыкнуть к этому языку, так как подавляющее большинство материалов по машинному обучению сделаны на английском.) МАТЕМАТИКА Основы Линейной Алгебры Основы Мат. Анализа Основы Мат. Статистики Однако, просмотра вводных видео, указанных выше, недостаточно для того, чтобы действительно хорошо понимать ML-алгоритмы, а также в будущем создавать свои собственные пайплайны по обработке данных или нейросети (даже если последние будут модификациями уже известных архитектур). Кроме того, в этой области очень важно не бояться математических формул и иметь привычку с ними работать. Иначе будет очень сложно понимать статьи по машинному обучению и делать какие-либо нетривиальные расчеты. Поэтому сейчас мы разберем примеры бесплатных курсов и демонстраций, в которых можно изучить нужные области математики более основательно и с практикой. ОСНОВЫ ЛИНЕЙНОЙ АЛГЕБРЫ Два варианта бесплатного курса по этому предмету: ● Более быстрый вариант, для тех, кто уже изучал математику в ВУЗе и хочет повторить: https://stepik.org/course/2461 Главный минус - в курсе не хватает секции про собственные значения, которые используются в алгоритмах понижения размерности (PCA). Эту тему можно повторить, посмотрев конец плейлиста 3blue1brown с предыдущей страницы. ● Более подробный вариант, может быть доступнее для тех, кто раньше не изучал предмет: https://www.khanacademy.org/math/linear-algebra Также не забываем продолжать просмотр плейлиста 3blue1brown Essence of Linear Algebra ОСНОВЫ ЛИНЕЙНОЙ АЛГЕБРЫ Главное, чего нужно достичь при изучении линейной алгебры - научиться свободно работать с векторами, матрицами, хорошо понимать формулы с участием этих объектов и не бояться их. Именно в этом - основная цель решения упражнений. При этом для практиков уметь решать все задачи "со звёздочкой" не обязательно, главное научиться уверенно работать с объектами линейной алгебры хотя бы в более-менее типичных сценариях. Чуть более сложные темы, наподобие обратных матриц, собственных значений и векторов, смены базиса в векторных пространствах, пригодятся для того, чтобы в дальнейшем понять алгоритмы уменьшения размерности (PCA), а также чтобы уметь интерпретировать работу алгоритмов машинного обучения в терминах работы с линейными пространствами (иногда это удобнее). Эти темы можно отложить, если очень хочется скорее приступить к изучению базовых алгоритмов ML, где они еще не используются, и вернуться к ним позже, когда понадобятся. ОСНОВЫ МАТЕМАТИЧЕСКОГО АНАЛИЗА Два варианта бесплатного курса по этому предмету: ● Вариант похардкорнее: https://stepik.org/course/95/syllabus Тут наиболее полезны модули 1-3 (т.е. все, кроме 4го модуля - интегралов, которые можно отложить в бэклог). ● Вариант поподробнее: https://www.khanacademy.org/math/calculus-1 Также не забываем продолжать просмотр плейлиста 3blue1brown Essence of Calculus ОСНОВЫ МАТЕМАТИЧЕСКОГО АНАЛИЗА Главное тут - дойти до раздела "производная сложной функции". Если соединить это знание с линейной алгеброй, этого, в принципе, достаточно для понимания смысла обучения ML моделей, в том числе для понимания алгоритма обратного распространения ошибки (backpropagation). Изучать интегралы не обязательно для понимания большей части того машинного обучения, что используется на практике. Поэтому с ними достаточно поверхностно ознакомиться по видео 3blue1brown, а более подробное изучение отложить на время, и вернуться при необходимости. Если большинство типичных упражнений по мат.анализу из выбранного курса сделать получается, а какие-то сложные задачи с большими выкладками не идут, можно их пропустить. В реальной практике большие выкладки редко встречаются разве что их можно увидеть в некоторых научных статьях. ОСНОВЫ МАТЕМАТИЧЕСКОЙ СТАТИСТИКИ К этому предмету можно подступиться, начав с изучения вот такого сайта с демонстрациями, чтобы постепенно войти в тему: https://seeing-theory.brown.edu/basic-probability/index.html А потом перейти к какому-нибудь более серьезному курсу с упражнениями, например: https://stepik.org/course/326/syllabus Но тут надо отметить, что этот курс сложный, и полностью его проходить не обязательно. Максимально полезен первый модуль и упражнения к нему; в модулях 2-3 желательно просмотреть хотя бы лекции, чтобы понимать, о чем речь. Дальнейшее прохождение можно отложить, просто запомнив названия тем на будущее. Если на следующих этапах поймете, что вам необходимо пройти эти темы вернетесь к курсу обратно. ОСНОВЫ МАТЕМАТИЧЕСКОЙ СТАТИСТИКИ Математическая статистика нужна разным специалистам в разной степени. Тем, кто хочет глубоко проникнуть в статистический анализ данных, она нужна в большей степени (например, им может потребоваться понять хотя бы в общих чертах, что такое статистические критерии), а тем, кому не нужен такой глубокий анализ или кто в основном работает с алгоритмами - им она нужна меньше. Тем не менее, всем специализациям из ML и DS полезно знать самые базовые основы - что такое мат.ожидание, дисперсия, что такое распределение, выборка, что такое статистическая значимость. Для последнего желательно понять в общих чертах и то, что такое доверительный интервал. Без этого будет очень трудно по науке оценить результат работы алгоритмов машинного обучения и протестировать гипотезы насчет данных. ЧТО ДЕЛАТЬ, ЕСЛИ НИЧЕГО НЕ ПОНЯТНО Если не удается ничего понять ни в мат.анализе, ни в линейной алгебре, ни в мат. статистике, то, возможно, все очень плохо с математикой школьного уровня. Ведь для понимания вышеизложенных предметов необходимо помнить довольно существенную часть школьной математики. Если так, то придется потратить дополнительное время на восполнение этих пробелов. Пример бесплатного мини-курса, в котором можно восполнить некоторые пробелы: https://practicum.yandex.ru/math-foundations/ , а также понять, какие именно разделы математики вызывают трудности (в рекламу платных курсов рядом с ним, заходить, естественно, не обязательно). В случае, если этого курса тоже будет недостаточно - можно поискать другие курсы на https://www.khanacademy.org/ и https://stepik.org/ , ища по названию тех разделов математики, которые даются с особенным трудом. ПРОГРАММИРОВАНИЕ Основы выбранного языка программирования Основы Алгоритмов и Структур Данных Я условно разделила секцию “Программирование” на две части, но на самом деле, основы алгоритмов и структур данных часто изучаются совместно с языком. Еще надо отметить, что я сама на профессиональном уровне работала только с двумя языками программирования, поэтому и обучающие материалы знаю именно по ним. Первым у нас будет самый популярный язык для машинного обучения. Большинство курсов по машинному обучению используют в домашних заданиях и примерах именно этот язык, и без знания этого языка вы их просто не решите, поэтому он крайне рекомендуется к изучению. Вот он: ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ (PYTHON) Вот на какой бесплатный курс по Python я советую обратить внимание в первую очередь: https://stepik.org/course/512 Здесь не только рассказывается про программирование на Python, но и про такие важные темы, как работа с API, скачивание и парсинг html, json etc - это как раз то, что часто используют в работе любители машинного обучения и анализа данных. Но есть важная деталь: курс рассчитан на тех, кто уже умел раньше программировать на другом языке (хотя бы немного). Если опыта программирования нет совсем, лучше начать с этого курса: https://stepik.org/course/67 а потом вернуться к курсу выше. ЧТО ДЕЛАТЬ, ЕСЛИ НИЧЕГО НЕ ПОЛУЧАЕТСЯ Если не получается решать упражнения из курсов выше, можно попробовать обратиться к более подробным курсам, где больше упражнений, на которых можно “набить руку”. Например, вот такой курс: https://stepik.org/course/58852 И его вторая часть: https://stepik.org/course/68343 . Есть у курса и третья часть, но она, к сожалению, платная, а значит, не является предметом обзора данной презентации. Так что если есть желание остаться в рамках концепции “без траты денежных ресурсов”, есть вариант пройти первые две части этого курса, а потом вернуться к курсам с предыдущего слайда и прорешать там те разделы, которые в этом курсе не покрыты. ЧЕГО МЫ ХОТИМ В ИТОГЕ ДОБИТЬСЯ И ДОПОЛНИТЕЛЬНЫЙ УЧЕБНЫЙ МАТЕРИАЛ В конечном итоге, мы хотим добиться знаний: ● ● ● Основных конструкций и ключевых слов (keywords) языка Python - без этого мы не сможем писать свой код и понимать чужой; Основных механик языка (например, как происходит присваивание по ссылке и копирование) - чтобы понимать на базовом уровне, что происходит под капотом и, как следствие, уметь понимать и исправлять ошибки при написании кода; Основ объектно-ориентированного программирования - чтобы умело пользоваться ML-библиотеками и создавать свои собственные ML-модели. И напоследок, еще один, дополнительный учебный материал по Python. Его важные особенности - наличие разделов “установка инструментов” и “Jupyter Notebook”. Эти разделы очень важны для практической работы, но не до конца покрыты курсами, указанными выше. Поэтому этот учебный материал послужит отличным дополнением к всему вышеперечисленному. ПРОГРАММИРОВАНИЕ Основы выбранного языка программирования Основы Алгоритмов и Структур Данных Второй язык программирования, по которому я могу дать совет, имеет неоднозначную репутацию. Он нужен только небольшому числу ML-специалистов - в основном разработчикам (Developer), которые работают с очень высокопроизводительным продакшн-кодом, хотят иметь совместимость с каким-то уже написанным кодом или нуждаются в работе с особым оборудованием (например, с какими-то промышленными устройствами). Кроме того, изучать его намного сложнее, чем Python. Поэтому тратьте время на этот язык только если вы точно уверены в том, что это ваш вариант. Вот он: ОСНОВЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ (С++) В качестве первого пособия по этому языку предлагаю книгу Б. Страуструпа "Язык программирования С++". По-хорошему книга, конечно, платная, но в реальности ее несложно можно найти и скачать в интернете бесплатно. Если что-то непонятно, можно обращаться к аналогичному пособию по языку С (без плюсиков) - обычно все непонятное приходит именно оттуда. После изучения этой книги и основ алгоритмов и структур данных (см. следующую часть презентации) можно посмотреть курс: https://stepik.org/course/153 Здесь можно познакомиться с продвинутыми темами языка С++ и шаблонами проектирования, которые, опять же, пригодятся только людям, сильно нацеленным на интеграцию ML-решения в продакшн и другие задачи, требующие создания сложных программ. Остальным ML и DS специалистам не обязательно изучать это. ДРУГИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Вот какие еще языки программирования могут использовать специалисты по машинному обучению и анализу данных: ● SQL. Это язык с очень ограниченной областью применения: его используют для работы с базами данных. Вот пример ресурса, где можно поупражняться в SQL: https://stepik.org/course/63054 Однако, на этапе получения предварительных знаний глубоко изучать SQL рано. Для начала можно просто познакомиться с тем, что такое базы данных и узнать простейшие примеры работы с ними. Сделать это можно, например, полистав такую забавную книжку с картинками, как “Занимательное программирование. Базы данных. Манга”, которую также можно найти бесплатно в интернете. Ну, а серьезно тренироваться в SQL нужно только тогда, когда будете точно уверены, что хотите пойти податься на вакансию, где требуется работа с SQL (он нужен далеко не везде) и займетесь подготовкой к такой вакансии. ДРУГИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Вот какие еще языки программирования могут использовать специалисты по машинному обучению и анализу данных: ● R. Этот язык используют для анализа данных, особенно много в нем встроено инструментов для применения аппарата математической статистики. Стал менее популярен с развитием библиотек для Python, но иногда все еще встречается в описаниях вакансий. Если не уверены, что он вам нужен, изучать не обязательно. ● Java. Этот язык используют чаще всего разработчики, в пайплайнах для обработки данных, а также в продакшн-коде. Если не уверены, что он вам нужен, изучать не обязательно. ПРОГРАММИРОВАНИЕ Основы выбранного языка программирования Основы Алгоритмов и Структур Данных Конечно, в мире намного больше языков программирования. Но те, что я перечислила, пожалуй, покрывают 99% вакансий, связанных с ML/DS. В стандартном сценарии нам для начала достаточно изучить только Python, а потом переходить к алгоритмам и структурам данных. ОСНОВЫ АЛГОРИТМОВ И СТРУКТУР ДАННЫХ Большинству специалистов в Machine Learning и Data Science достаточно знать лишь основы этих тем. Посмотреть на эти основы я рекомендую в следующих источниках: ● ● https://stepik.org/course/1547 изучить модуль “Базовые структуры данных”, чтобы узнать про наиболее часто используемые структуры данных. https://stepik.org/course/217 изучить модуль “Введение: теория и задачи”, чтобы посмотреть простые примеры алгоритмических задач и узнать что такое сложность алгоритма. Дальше первых модулей изучать эти курсы на начальном этапе не нужно. Продолжить изучение рекомендуется либо если вы будете точно уверены, что хотите углубиться в разработку (Development), либо перед собеседованиями. А еще изучать эти модули можно и параллельно с изучением ML-алгоритмов. ОСНОВЫ АЛГОРИТМОВ И СТРУКТУР ДАННЫХ Еще один занятный способ знакомиться с базовыми алгоритмами и структурами данных - приложение “Алгоритмы. Понятные и анимированные” на Android. (ссылка открывается либо с ПК с VPN, либо со смартфона). Приложение представляет собой набор демонстраций к классическим алгоритмам и структурам данных. К сожалению, некоторые демонстрации доступны только платно, но большая часть бесплатная. Приятно смотреть эти демонстрации по дороге на работу или учебу как дополнительный материал к основным занятиям. Я рекомендую просмотреть разделы “структуры данных” и “поиск” (в списках и графах). Предварительные знания Классическое машинное обучение Глубокое машинное обучение Инструменты для конкретной роли Поиск работы ЧАСТЬ I Итак, после выполнения всех предыдущих пунктов, мы будем иметь все нужные знания и навыки, которые станут, так сказать, фундаментом нашего будущего счастья в мире машинного обучения. О следующих темах и о примерах бесплатных книг / курсов, в которых они раскрываются, будет рассказано в следующих частях презентации. Предварительные знания Классическое машинное обучение Глубокое машинное обучение Инструменты для конкретной роли Поиск работы А пока я добавлю небольшой список дополнительных материалов по темам, указанным пунктирными стрелками. Этими материалами можно пользоваться параллельно с изучением математики и программирования, чтобы не заскучать и не забыть, для чего мы этим занимаемся. НОВОСТИ ИЗ ГЛУБИН Есть много ресурсов, на которых можно узнавать новости из мира глубокого обучения, и, раз вас заинтересовали данные слайды, вы, скорее всего, читаете или смотрите некоторые из них. Вот еще пара ресурсов, которые можно смотреть, даже не зная математики и программирования: ● Two Minute Papers - красочные демонстрации работы нейросетей из последних научных статей с нужными объяснениями, чтобы было примерно понятно, что к чему. Сами статьи в деталях не разбираются. Полезно, чтобы наглядно посмотреть, на что способны современные алгоритмы. ● CodeWizer , AI Warehouse - демонстрации работы алгоритмов машинного обучения с подкреплением, в основном на основе глубоких (и не очень) нейросетей. Можно поразвлекаться, посмотрев на приключения самообучающихся агентов в разных ситуациях. ЗАБЕГАЯ ВПЕРЕД: ОСНОВЫ МАШИННОГО ОБУЧЕНИЯ Если хочется немного забежать вперед, то сразу после изучения векторов и матриц, можно обратить внимание на эти интерактивные демонстрации по основам машинного обучения, которые включают некоторые классические алгоритмы: ● https://mlu-explain.github.io/ А после изучения градиентов и цепного правила можно посматривать эти видео про основы работ глубоких нейросетей: ● https://youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi АЛЬТЕРНАТИВНЫЕ МНЕНИЯ И ДРУГИЕ ПОЛЕЗНЫЕ РЕСУРСЫ Сообщества, где можно найти другие полезные материалы пообщаться с людьми на темы Machine Learning и Data Science: и ● Better Data Community - сообщество в телеграм. Есть специальный раздел “вкатывальщики” для общения новичков, где можно спросить совет. ● Singularis AI - другое сообщество, на этот раз в слаке. Здесь можно не только пообщаться онлайн, но и узнать об оффлайн-встречах участников сообщества в крупных городах России и мира. АЛЬТЕРНАТИВНЫЕ МНЕНИЯ И ДРУГИЕ ПОЛЕЗНЫЕ РЕСУРСЫ Некоторые другие мнения о том, как лучше учиться математике и всему остальному, нужному в ML / DS: ● https://habr.com/ru/companies/ruvds/articles/676114/ - автор этой статьи считает, что в DS используется очень мало математики. Посыл спорный, но примеры работы с данными он привел очень интересные, рекомендую посмотреть и постараться понять, какие преобразования он делает в этих примерах. Внизу статьи есть ссылка на канал автора. ● https://vas3k.club/post/9904/ - очень интересное руководство о том, как стать Data Scientist, также рекомендую. Похоже, у автора больше опыта в работе с данными, поэтому его мнение является как бы комплементарным к моему (у меня взгляд с акцентом на ML, а у него - с акцентом на DS). Единственный недостаток руководства: оно было написано давно, и многие ссылки на ресурсы, к сожалению, погибли. Внизу также есть ссылка на канал автора. АЛЬТЕРНАТИВНЫЕ МНЕНИЯ И ДРУГИЕ ПОЛЕЗНЫЕ РЕСУРСЫ ● https://t.me/mommyscientist/14 - автор показывает сразу несколько возможных траекторий, по которым мячик вашего разума может покатиться в мир машинного обучения. Также он собрал коллекцию разных курсов и учебных материалов, которые могут пригодиться. Главное, не запутаться в этом лабиринте: не пытаться браться сразу за все подряд, иначе разум укатится не в машинное обучение, а в депрессию и апатию. ● https://t.me/tech_priestess - мой личный канал. Тут обсуждается много разных тем - обзоры учебных материалов, книг, научных статей про ML и математику, рассказы про жизнь автора, всякая всячина, как-то касающаяся ML/DS и, разумеется, мемы. В общем, пишу про все подряд, что мне интересно, так что часть материалов будет понятна только людям с соответствующим бэкграундом. Также я надеюсь когда-нибудь сделать и выложить в канале следующую часть данного руководства. До новых встреч! ПУТЬ К ПОЗНАНИЮ МИСТЕРИЙ ОБУЧЕНИЯ МАШИН БЕЗ ТРАТЫ ДЕНЕЖНЫХ РЕСУРСОВ КОНЕЦ ЧАСТИ I (предварительные знания)