Не учите машинное обучение

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

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

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

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

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

До конца 2000-х годов машинное обучение в основном использовалось в исследовательских целях. Лишь небольшое количество компаний применяло его на производстве.

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

Даже неуниверситетские материалы в некоторой степени придерживаются этого шаблона. Например, этот отрывок взят из руководства «Быстрый старт для новичков» от TensorFlow:

Источник: TensorFlow

Здесь можно просмотреть это руководство полностью.

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

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

Скорее всего, вы научились программировать, написав «hello world» на высокоуровневом языке. Затем, по мере внесения небольших сложностей в свои проекты, вы изучали все более низкоуровневое программирование.

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

Как изучить МО в процессе создания программного обеспечения?

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

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

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

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

Освоили разработку с помощью МО? Время переходить к теории!

Если вы инженер, то вы, вероятно, уже реализовывали некоторую форму аутентификации, то есть хэшировали пароли.

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

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

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

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Caleb Kaiser: Don’t learn machine learning