[Перевод] Не надо учить Machine Learning

Учитесь создавать софт, используя модели машинного обучения


image

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

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

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

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

Вы хотите создавать продукты или проводить исследования?


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

Даже не связанные с университетом материалы в какой-то степени следуют этой схеме. Например, это взято непосредственно из библиотеки TensorFlow«s «Quickstart for Beginners»:

image

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

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

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

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

Когда вы научились кодить, вы, скорее всего, сделали это, написав «hello world» на языке высокого уровня. Затем, по мере усложнения проектов, вы начали изучать низкоуровневое программирование.

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

Как изучить ML, создавая софт


Если вы относитесь к тому типу людей, которые лучше всего учатся, проходя курсы, то лучшим ресурсом, пропагандирующим этот нисходящий, учись-в-процессе подход к работе с ML, будет курс на портале fast.ai Practical Deep Learning For Coders.

Цель статьи вовсе не в том, чтобы прорекламировать fast.ai, но стоит отметить, что основатели платформы (Джереми Говард и Рэйчел Томас) собрали несколько курсов для разработчиков с глубоким обучением, которые буквально заставляют создавать вещи, углубляясь в основную теорию, поскольку она непосредственно связана с проектом. Чтобы лучше понять их стиль обучения, посмотрите видео с Рэйчел Томас.

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

Чтобы лучше понять, что такое создание софта с ML (если вы идете этим путем):

  1. Определите цель, например, создать автозаполнение для текстового поля или идентификатор номерного знака.
  2. Найдите предварительно подготовленную модель, подходящую для вашего проекта — модели GPT-2 или YOLOv3 будут также работать с ранее упомянутыми проектами.
  3. Если хотите, вы даже можете использовать библиотеку как gpt-2-simple для точной настройки (настроить под ваши собственные данные) вашей модели.
  4. Наконец, разверните модель как микросервис.

После того как модель развернута в виде API, вы можете запросить ее, как и любую другую веб-службу, и построить вокруг нее свое приложение.

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

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

Как только вы сможете создавать продукты, основанные на ML, приступайте изучать теорию


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

При настройке хеширования пароля вы написали пользовательский алгоритм хеширования? Вы потратили несколько недель на изучение криптографии? Или вы просто использовали bcrypt?

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


image
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:

Читать еще


© Habrahabr.ru