Эта статья является третьей и последней статьей из серии «Должен ли я получить степень по науке о данных». В первых двух статьях (ознакомьтесь с частью I и частью II) я поделился своим взглядом на самоучку в области науки о данных и на классическое обучение. Я попытался ответить на этот вопрос со своей точки зрения, т. е. через призму, которую дал мне мой опыт сначала самообучения с помощью МООК и различных онлайн-ресурсов, а затем фактического получения степени по науке о данных. Вы можете вернуться к двум статьям, если вам нужны подробности, но я пообещал, что эта статья не будет обо мне или болтовне о моем опыте, а скорее будет представлять собой конкретную дорожную карту для получения того, что я бы назвал «хорошими данными». научная база».

Опять же, каждому свое путешествие. Эта дорожная карта — это всего лишь основа тем, на которые вы можете взглянуть, заменить похожим контентом или полностью отбросить. Я попытался включить различные типы ресурсов по одному и тому же предмету, чтобы учесть разницу между стилями обучения каждого из них. Я больше визуальный/звуковой ученик, мне нравится смотреть видео/Moocs и работать над реализациями, упражнениями и т. д. Я знаю, что я медленно читаю, и я часто ловлю себя на том, что читаю один и тот же абзац 3 раза, потому что я не мог Первые два раза не сосредотачиваюсь, поэтому я продолжаю читать книги для «сложных вещей», то есть доказательств, математики, теоретических материалов или реализации документов.

Хорошо, давайте перейдем к хорошему!

Две дорожные карты

Я написал две отдельные дорожные карты:

  • KISS (будь проще, тупица): первый предназначен для новичков или тех, кто хочет проверить, о чем вся эта шумиха в области науки о данных. Может быть, вы инженер-электрик, который хочет узнать об этом, или разработчик, который хочет получить представление о ML/DL перед внедрением модели. Для новичков я старался сосредоточиться на основах, свести к минимуму математику и предоставить достаточную глубину, чтобы понять все сексуальные темы, такие как нейронные сети, кластеризация или обучение с подкреплением (хотя для полного понимания может потребоваться больше теории). понимание RL) на глубоком (достаточно) уровне
  • ALL-IN:второй вариант для All IN по науке о данных. Я попытался собрать все ресурсы и структурировать их в последовательную дорожную карту, чтобы получить степень магистра в области науки о данных. Я, вероятно, пропустил некоторые важные вещи, поэтому, пожалуйста, не стесняйтесь обращаться ко мне, если вы видите какую-то явную дыру в этой дорожной карте, я обновлю ее соответствующим образом.

ПОЦЕЛУЙ:

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

Фонды

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

Линейная алгебра

  • Суть линейной алгебры — 3Blue1Brown: я очень рекомендую этот канал на YouTube, у Гранта Сандерсона есть удивительный дар, с помощью которого он может элегантно показать красоту математики с предельной простотой. Такое ощущение, что вы могли бы сами создать линейную алгебру!

Исчисление:

Статистика и вероятность:

Книги:

  • Я рекомендую одну книгу (и она находится в свободном доступе), в ней есть вся необходимая математическая основа в сжатой и красивой форме: https://mml-book.github.io/

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

Я считаю, что практический подход к программированию — лучший, Python — это простой язык, который был создан в соответствии с парадигмой языка программирования ABC и изначально предназначался для обучения программированию учащихся средней школы! Я не думаю, что вам нужно тратить время на изучение дизайна языка программирования, алгоритмов и структур данных... (если вы хотите ознакомиться с дорожной картой ALL-IN). Вы можете проверить эти ресурсы для базового Python:

  1. Генератор паролей: в этом проекте вы создадите программу для генерации паролей, используя модуль random в Python3.
  2. Игра «Угадай». В этом проекте вы создадите игру-угадайку, в которой пользователь пытается определить число, выбранное компьютером.
  3. Игра «Крестики-нолики»: это игра «крестики-нолики» для двух игроков, в которой используются различные модули Python.
  4. Валидатор кредитной карты: простая реализация «алгоритма Луна» или алгоритма Mod 10 проверяет действительный номер кредитной карты.

Машинное обучение и глубокое обучение

Теперь вы можете перейти к пикантным вещам: глубокому обучению. Я буду рекомендовать эти Moocs и книги

  • Специализация глубокого обучения: вы научитесь реализовывать нейронную сеть с нуля, используя только Numpy в качестве зависимости. Это очень, очень мощно, и я хотел бы, чтобы эта практика более широко использовалась для обучения нейронным сетям и переходила от уже доступных фреймворков, таких как Tensorflow или Pytorch, при первом обучении этому материалу. Вы также узнаете о CNN, LSTM, языке моделей и многом другом…
  • Второй курс, который я очень рекомендую, — Практическое глубокое обучение для программистов: https://course.fast.ai/. Если у вас есть хороший опыт в программировании, пройдите этот курс. Единственным недостатком является то, что для обучения используется библиотека DL Fast.ai, которая может немного сбивать с толку при первом изучении этого материала.
  • Я обнаружил, что книги по глубокому обучению либо не добавляют дополнительного понимания технических реализаций, либо немного больше связаны с теорией. Я не могу рекомендовать какие-либо книги здесь (я не читал ВСЕ книги по глубокому обучению, поэтому, пожалуйста, напишите мне, если вы знаете несколько хороших), но не стесняйтесь проверить дорожную карту ALL-IN для рекомендаций по книгам, но ремень во время их чтения.

На этом этапе вы можете просмотреть документы, попробовать реализовать некоторые классические, такие как Inception Net, LSTM или GAN. Попробуйте GAN, это весело…

БОНУС: введение в глубокое обучение с подкреплением

  • Посмотрите на эту статью Андрея Карпати: Удивительная реализация игры в понг на глубоком RL с использованием только Numpy!

ВАЛ-ИН:

Добро пожаловать в дорожную карту ALL-IN, вы здесь для настоящей поездки. Эти ресурсы собраны, чтобы сформировать довольно прочную теоретическую и практическую основу для специалистов по обработке и анализу данных, и мы не ищем ярлыков! Чтобы прочитать, посмотреть и понять все эти ресурсы, потребуется время, так что не расстраивайтесь! Требуется десятилетие, чтобы стать чем-то хорошим, мы все в пути! Вы можете либо перейти по ссылкам по порядку, либо выбрать тему, которая вас больше интересует, хотя я настоятельно рекомендую сначала придерживаться основных вещей, прежде чем выбирать тему.

Фонды

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

Если вам просто нужно освежить некоторые из этих концепций, я настоятельно рекомендую эту книгу (и она находится в свободном доступе), в ней есть вся необходимая математическая основа в сжатой и красивой форме: https://mml-book.github .ио/

Линейная алгебра

Статистика и вероятность:

Расчет и оптимизация:

Теория информации:

Переходя от компьютерных наук к статистическому обучению, я думаю, что теория информации — хороший инструмент, который нужно иметь в сумке. Это даст вам много моментов AHA, когда вы увидите дивергенцию KL, такую ​​​​как определение убытка.

Временные ряды

Я не люблю временные ряды, меня вынудили перенести эту тему в фундаментальный раздел, делать что-либо с 1D данными — это абсолютное колдовство. Изучение основ обработки временных рядов, прежде чем приступать к глубокому обучению и фреймворку прогнозирования машинного обучения, вероятно, является правильным решением.

Программирование:

Есть в основном два взгляда на программирование для специалистов по данным. Во-первых, вам просто нужно хорошее понимание языков программирования (в частности, Python в 99,9% случаев), и вам нужно сосредоточиться на исследовательской части науки о данных. Вторая точка зрения заключается в том, что специалист по данным пишет код, и точка! Если вы пишете код, вам нужно понимать, как писать профессиональный код с минимальными накладными расходами. Вам нужно понимать, на какие компромиссы вы идете при написании конвейера машинного обучения. Вам нужно понять, как использовать аппаратное ускорение, почему графические процессоры так широко используются в науке о данных и во всем, что связано с распределенным программированием. Хорошо, я знаю, что это требует времени, и вам, вероятно, все это не нужно. Пропустите это, если хотите, или посмотрите, вы можете быть инженером в душе или настоящим ученым!

Либо, либо, вот основы программирования:

Вам необходимо изучить Python,это невозможно:

  • УзнайтеXinYminutes: https://learnxinyminutes.com/docs/python/
  • Изучите Python трудным путем: http://www.accorsi.net/docs/LearnPythonTheHardWay.pdf
  • Теперь вы можете немного глубже погрузиться в Python и понять такие темы, как типизация Duck, реализация внутренних структур данных, функции как первоклассные объекты, асинхронное программирование и многое другое: Fluent Python — хороший ресурс.
  • Работа над проектами!! проверить эту ссылку для идей.

Изучите SQL и NoSQL.Работа со структурированными реальными данными обычно требует выполнения запросов к базам данных. Поэтому вам нужно будет использовать декларативные языки, такие как языки SQL и NoSQL (например, языки стиля синтаксиса mongo):

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

Статистическое обучение

Почему мы можем учиться на данных? Сколько данных нам нужно, чтобы получить точные результаты? Можем ли мы извлечь уроки из всех распределений данных? Это нетривиальные вопросы, и вам понадобится довольно продвинутая математика, чтобы иметь прочную основу для ответов на такие вопросы.

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

Теория:

Практика:

  • Я настоятельно рекомендую курс Машинное обучение Эндрю Нг, это был мой первый Mooc, и он мгновенно привлек меня к прекрасной области машинного обучения, он преподается в Matlab, но я думаю, что вы:
  • Для перехода с Matlab на Python я бы порекомендовал этот МООК: Прикладная наука о данных со специализацией на Python. Это несколько медленно, но дает вам хорошую основу для использования библиотек Python, таких как Numpy, Pandas, Matplotlib, Scikitlearn и некоторых библиотек NLP.

Глубокое обучение

  • Специализация глубокого обучения: вы научитесь реализовывать нейронную сеть с нуля, используя только Numpy в качестве зависимости. Это очень, очень мощно, и я хотел бы, чтобы эта практика более широко использовалась для обучения нейронным сетям и переходила от уже доступных фреймворков, таких как Tensorflow или Pytorch, при первом обучении этому материалу. Вы также узнаете о CNN, LSTM, языке моделей и многом другом…
  • Второй курс, который я очень рекомендую, — Практическое глубокое обучение для программистов: https://course.fast.ai/. Если у вас есть хороший опыт в программировании, пройдите этот курс. Единственным недостатком является то, что он использует Fast.ai
  • Глубокое обучение Яна Гудфеллоу: я обычно читаю эти главы из этой книги, как статьи в блогах, это очень насыщенная книга, но она дает несколько довольно крутых самородков в исследованиях глубокого обучения.

К сожалению, теории о глубоком обучении и нейронных сетях не так много :/. Вероятно, вам следует потратить свое время на изучение основ нейронных сетей (прямое и обратное распространение, реализация векторного продукта Якоби, CNN, LSTM, преобразователи…) и работать над внедрением широко используемой архитектуры и основополагающих документов в каждой области.

Бандитские алгоритмы / Обучение с подкреплением

Давайте проясним кое-что, обучение с подкреплением довольно сложно. На самом деле, я обнаружил, что глубокое обучение — самая простая из областей науки о данных, работа с доказательствами верхней границы бандитских алгоритмов довольно сложна. У вас должна быть хорошая математическая база для этого, но это самое полезное! Вы действительно чувствуете, что происходит что-то удивительное, когда ваша модель OpenAI начинает «учиться» играть в какую-то странную игру!

Бандитские алгоритмы:

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

Продвинутые предметы

Эти предметы либо касаются области науки о данных, либо рассматриваются как «продвинутые». Я думаю, что все эти вещи, связанные с программированием, по-прежнему очень важны для изучения. Параллельное/распределенное программирование само по себе является полем, которое ускорило революцию глубокого обучения, поэтому взгляните на этот материал, чтобы понять, что происходит под капотом, когда вы можете использовать nb_jobs= -1 или использовать распределенный Pytorch.

Изучайте С:

C++ (первоначально C с классами) в основном представляет собой раздутую версию C с хорошей абстракцией, классами и кучей функций, которые я не смог бы объяснить, даже если бы от этого зависела моя жизнь. Это по-прежнему золотой стандарт в области финансов, встроенных систем и графики…

  • Экскурсия по С++
  • Эти лекции хороши, если вы предпочитаете видеостиль.
  • Инструментарий C++ — это полный кошмар. Мне нравится Cmake, посмотрите этот плейлист youtube. Я ненавижу то, что вам приходится учиться использовать инструменты только для того, чтобы правильно компилировать код, но вы мало что можете с этим поделать… (может быть, переключиться на Rust?)
  • Эффективный современный C++: 42 конкретных способа улучшить использование C++11 и C++14
  • Вы, вероятно, обнаружили, что Python, который вы использовали, не так хорош (медленный,…), но почему? Только горстка ученых, которых я встретил, смогли ответить на этот вопрос, когда все они повторяли одно и то же. Вероятно, вам следует сначала понять, как работает интерпретатор Python и CPython. Удивительна эта серия статей: Python за кулисами.

Программирование CUDA/GPU:

Теперь, когда мы изучили некоторые «настоящие» языки программирования, мы можем начать использовать аппаратное ускорение и понять силу параллелизма.

Библиотека Cuda (к сожалению) единственный игрок в городе, когда дело доходит до программирования ML GPU. Nvidia стремительно опережает конкурентов, такие библиотеки, как OpenCL, плохо поддерживаются (пока) высокоуровневыми фреймворками, такими как TF или Pytorch.

  • Начните с этого руководства.
  • На момент написания статьи, в начале 2022 года, вы можете либо продать почку, если у вас все еще есть две, и купить графический процессор, либо использовать бесплатный графический процессор Google Collab для тестирования кода Cuda, это ваш выбор.

Распределенное программирование

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

  • «Масштабирование параллельных и распределенных подходов к машинному обучению» — это САМАЯ книга, которую стоит прочитать.
  • Ознакомьтесь с библиотеками, такими как MPI, и книгами по MPI и OpenMP, такими как эта.
  • Ознакомьтесь со специальными библиотеками машинного обучения, такими как Dask и Ray.

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

Я постараюсь обновлять этот пост самыми последними ресурсами, на которые я мог наткнуться, или ресурсами, которыми некоторые из вас поделились со мной. Это последняя статья из этой серии, и я очень надеюсь, что мои скромные усилия в попытке описать мой собственный путь в области науки о данных от рассказа моей истории до сбора ресурсов, которые я читал и смотрел в течение последних 3 лет в сжатом формате, могут стать маяком. вдохновения для тех, кто потратил свое драгоценное время на чтение этих слов. Спасибо!