Реальный проект машинного обучения - это не только машинное обучение.

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

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

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

Формулировки проблемы

Обучение: давайте решать проблемы. Реальная жизнь: в чем проблема?

Когда я посещал курсы или участвовал в соревнованиях, мне обычно давали задачи по машинному обучению , созданные экспертами по машинному обучению. Естественно, он поставляется с очень четкими инструкциями: цели, набор данных, контекст, объяснение и т. Д. Моя работа заключалась в том, чтобы просто поиграть с данными и получить результаты, без вопросов.

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

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

  • Определите «сходство» между товаром X и товаром Y. Одинаковая марка? Одинаковый тип продукта? Или пользователи, которые покупают продукт X, всегда покупают продукт Y?
  • Какова цель бизнеса? Порекомендовать похожие товары? Собирать коллекции? Или обнаруживать повторяющиеся элементы?
  • Я создаю онлайн-сервис или автономную базу данных?
  • Каковы сроки и план выполнения задачи?

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

Наборы данных

Обучение: давайте проанализируем данные. Реальная жизнь: какие данные?

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

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

  • Какие есть источники данных? Как получить к ним доступ?
  • Эти данные помечены? Если нет, как их обозначить? Если да, качество этикетки хорошее?
  • Достаточно ли данных для моего алгоритма? Если нет, как получить больше данных? Если да, то как обрабатывать такие большие данные?

Доступность, качество и количество данных имеют решающее влияние на всех без исключения этапах проекта. Если данные плохие, то любая модель машинного обучения кажется плохим выбором. Если данные верны, то могут работать даже правила if-else. Я часто слышу, как люди говорят, что специалисты по анализу данных тратят 80% своего времени на поиск и обработку данных, теперь я знаю, что они говорят правду.

Когда я только начинал работать, я часто спрашивал своих коллег, какие алгоритмы / библиотеки они используют. В наши дни самые первые вопросы, которые я задаю: «Как вы получили данные о тренировках?»

Алгоритмы

Обучение: давайте построим модели. Реальная жизнь: давайте построим трубопроводы.

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

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

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

Обучение: давайте использовать продвинутые модели, как у профессионалов. Реальная жизнь: позволь мне быть нубом.

Раньше я думал, что использование продвинутых моделей или, тем более, создание их с нуля - это признак опыта. Поэтому на тренировках, чтобы улучшить свое портфолио или набрать 0,01 балла в таблице лидеров, я склоняюсь к более сложным, модным моделям. У меня есть время, да и набор данных в любом случае невелик, так почему бы просто не пойти на это?

Однако практиковать это в реальной жизни может быть признаком глупости. Сложная модель гораздо менее применима по многим причинам:

  • Обучение стоит компании дороже.
  • На настройку уходит больше времени, а тем более на каждую итерацию обучения. Это уменьшает количество циклов обратной связи, позволяющих мне выявлять проблемы и вносить улучшения.
  • Его результаты сложнее объяснить. Представьте, если бы я использовал XLNet для обнаружения спама в электронной почте, результаты стали бы плохими, и я понятия не имел, среди этих параметров 340M, что пошло не так.
  • Мое узкое место может быть в чем-то другом, а не в модели. Представьте, если бы я потратил 2 недели на построение моделей многослойных ансамблей, просто чтобы понять, что плохая производительность связана с неправильной маркировкой моих реальных данных.

Таким образом, моя текущая процедура выбора моделей машинного обучения выглядит следующим образом:

Некоторые другие уроки, которые я извлек относительно алгоритма:

  • Знание предметной области и хорошие данные могут превзойти любую модель.
  • Цель не в том, чтобы создавать модели, а в том, чтобы решать проблемы в разумные сроки и в разумные сроки и получать разумные результаты.

Оценка

Обучение: предсказание выполнено, работа сделана. Реальная жизнь: не так быстро!

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

В реальной жизни все не останавливается, когда предсказание завершается.

  • Чаще всего мне нужно самому определять метрики оценки, что не всегда тривиально.
  • Входные данные обычно зашумлены, поэтому результаты разделения поезд-тест могут быть ненадежными. Таким образом, требуется более убедительный метод оценки, такой как ручная проверка или A / B-тестирование.
  • Хорошая работа модели - это одно, а получение одобрения менеджером - другое. Всегда необходимы правильное общение, хорошее повествование вместе с конкретными подтверждающими данными.
  • Выходные данные / модель / сервис необходимо должным образом передать следующему процессу конвейера вместе с соответствующей документацией.

Заключение

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

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

Спасибо за чтение.