В 2015 году исследовательская работа по машинному обучению наделала много шума, обсуждая скрытый технический долг в системах машинного обучения. В этой статье Скалли и др. др. подчеркнул, что код для построения модели машинного обучения — это очень маленькая часть всего проекта. С тех пор это понятие было подтверждено во всей отрасли, поскольку специалисты по данным и инженеры по машинному обучению пытались производить модели в ноутбуках Jupyter с небольшим успехом.
Рис. 1. Элементы систем машинного обучения. Адаптировано из статьи «Скрытый технический долг в системах машинного обучения». Облако Google, общественное достояние.
На самом деле, большинство моделей, которые все еще производятся сегодня, не попадают в производство даже с широким спектром инструментов, которые появляются на рынке. Фактически, в последние годы эта область занимает центральное место среди продуктов машинного обучения. Хотя я с оптимизмом смотрю в будущее, беглый взгляд на обширный и разнообразный ассортимент продуктов MLOps сегодня может легко вас обескуражить. Михаил Эрик написал отличную статью об этом в своем блоге MLOps — это беспорядок, но этого и следовало ожидать.
MLOps, или операции машинного обучения, — это набор инструментов, практик, методов и культур, которые обеспечивают надежное и масштабируемое развертывание систем машинного обучения. Это одна из самых, если не самая важная специализация, которую должны принять специалисты по данным в ближайшее десятилетие, потому что осознание ценности систем машинного обучения в производстве имеет решающее значение для успеха в бизнесе.
Рисунок 2. Дисциплины MLOps.
Жизненный цикл проекта машинного обучения
Жизненный цикл проекта машинного обучения чрезвычайно итеративен. Каждый шаг на этом пути может дать новую информацию или идеи, которые потребуют от вас сделать один-два шага назад, чтобы вы могли сделать три шага вперед. Именно эта итерация делает работу такой сложной; Специалисты-практики в области машинного обучения феноменальны в экспериментах, но при работе с быстро меняющейся информацией и идеями эффективно экспериментировать может быть сложно.
Проект машинного обучения относится к следующим категориям:
- Обзор
- Данные
- Моделирование
- Развертывание
Давайте рассмотрим каждый из них на высоком уровне.
Обзор
При определении объема мы создаем проект и оцениваем, готов ли бизнес реализовать ценность данных. Это начинается с хорошо сформулированной постановки проблемы. Действительно ли мы знаем, что мы пытаемся решить и для кого мы это решаем? Это что-то, что действительно нужно решить? Полностью ли мы понимаем, почему и кто стоит за тем, что мы стремимся сделать?
После полного понимания проблемы и людей, для которых мы ее решаем, важно оценить ресурсы, ограничения и сроки. Действительно ли собираются данные для нашего варианта использования? Здорово иметь лунные идеи, но без данных машинное обучение невозможно. Если данные не собираются (или не поддерживаются в высоком качестве), то это серьезное ограничение. Лучше сказать «нет» до начала работы, чем потратить месяцы на «отличную идею», чтобы понять, что данных собрано недостаточно.
Обычно лучше всего начинать проектный документ на этом этапе, чтобы определить ключевых людей, работающих над проектом, источники данных, релевантные для использования, ограничения качества данных, ожидаемые сроки, возможные этические соображения и приблизительные сроки прогресса. В этом документе также должно быть указано, что именно вы планируете делать в этом проекте; это рекомендательный механизм, прогнозирование, кластеризация и т. д.? Каждый из них имеет разные требования и должен быть идентифицирован заранее.
Этот документ следует рассматривать как незавершенный, особенно в отношении сроков. Высокая итеративность работы с данными делает нереальным точное определение сроков на столь раннем этапе проекта. Фактически, плохо управляемые проекты данных в первую очередь упускают этот момент и вызывают множество срывов сроков и / или сильное выгорание среди специалистов по данным.
Последнее, но не менее важное, о чем следует серьезно задуматься, — это сценарий реализации вашей модели. Готово ли ваше решение к использованию заинтересованными сторонами? Предназначено ли оно для размещения на веб-сайте, в приложении, на отдельном столе и т. д.? Как ваши пользователи должны взаимодействовать с вашими результатами? Слишком много проектов начинаются без учета этого шага, и их следует остановить, если нельзя дать хороший ответ — ценность проекта машинного обучения может быть реализована только в том случае, если люди будут его использовать.
Данные
Первая часть этого этапа может немного пересекаться с определением масштаба, поскольку вы пытаетесь определить источники данных и установить базовые планы того, что можно сделать. Это может означать много EDA; охота, собирательство и визуализация работы. Крайне важно определить ограничения качества на этом этапе, потому что, если данные недостаточно доступны на определенном уровне детализации или в значительной степени нулевые для подгруппы, это может стать серьезной проблемой, когда вы доберетесь до более поздних этапов проекта.
Одна из худших вещей, которые я видел, что люди делают на этом этапе, — это то, что они не остаются в нем должным образом в течение достаточно долгого времени. Поспешное прохождение этой стадии или выполнение некачественной работы только для того, чтобы пройти ее (т. е. слепое исчисление средних значений для получения числовых значений) — очень пагубная проблема. Это иронично, потому что большинство проектов машинного обучения состоят из очистки данных, но я утверждаю, что даже в этом случае используется слишком много ярлыков только для того, чтобы «довести дело до конца», и это приводит к серьезным проблемам на последующих этапах.
К сожалению, побочным эффектом этого этапа является то, что он может быть очень неорганизованным. Требуется много поиска и поиска высококачественных данных, что может привести к неэффективному коду или беспорядочным запросам. Когда вы закончите первый проход на этом этапе, я рекомендую очистить ваш код и организовать ваши данные в разумных областях. Убедитесь, что ваши метки правильно определены, таблицы данных созданы с описательными именами и предоставлена документация о том, как можно повторно запустить код на новых данных.
При поиске источников важно помнить о реализации вашей системы машинного обучения. Замечательно, что вы можете найти качественные данные для обучения своей модели, но есть ли они для новых данных? Как можно настроить систему, чтобы убедиться в этом? Баланс между быстрой итерацией и надежной реализацией трудно найти, но он крайне необходим. К счастью, чем больше вы практикуетесь, тем лучше у вас это получается.
Моделирование
Что «весело» стоит за проектами машинного обучения и чему больше всего учат на курсах и проектах. Я не буду подробно рассказывать о выборе и обучении правильных моделей в этой серии, поскольку такого контента уже существует множество, но очень важно знать, что вы выбираете и почему.
Я лично не считаю, что вам нужно знать каждую математическую глубину моделей, чтобы правильно их использовать, но вы должны подробно изучить их сильные и слабые стороны, чтобы понять, почему одни работают, а другие нет. Это приводит ко второй части этого этапа — анализу ошибок.
Этот этап может быть в значительной степени экспериментальным и итеративным, и вы должны иметь острый глаз, чтобы отлаживать, где модели терпят неудачу и как устранять эти ошибки (и стоит ли это вашего времени). Часто производительность модели необходимо тщательно сбалансировать с затратами на бизнес и технологии (ресурсы, вычисления, задержка, пропускная способность и т. д.).
Прикладное машинное обучение сейчас вступает в стадию, когда выбор надежной модели на самом деле не является сложной задачей, гораздо сложнее действовать стратегически при экспериментировании и отладке. Это искусство — знать, как попробовать определенные стратегии или методы анализа ошибок, чтобы понять, что изучает ваша модель и где она терпит неудачу (уместно или нет). Здесь действительно может помочь совместная команда, потому что по мере того, как люди приобретают больше опыта, они понимают, как проводить эффективный ретроспективный анализ моделей.
Развертывание
Развертывание — это не шаг, который необходим для каждой отдельной модели, но он необходим для создания системы машинного обучения. Это связано с тем, что просьба к пользователям или заинтересованным сторонам запустить блокнот Jupyter для просмотра ваших результатов не принесет им никакой пользы. Обычно модели необходимо интегрировать в веб-сайт, приложение или какую-либо платформу, которую компания уже использует, и это может быть затруднено.
Кроме того, работа над этим проектом не считается «завершенной» только потому, что вы запускаете ее в производство. Необходимо настроить мониторинг и техническое обслуживание системы, чтобы обеспечить эффективную работу модели с течением времени. Это связано с тем, что модели основаны на данных, а данные не являются статическим ресурсом. Он развивается и изменяется с течением времени, что может привести к ухудшению качества моделей в процессе производства. Это может быть связано с такими вещами, как дрейф данных (изменение распределения функций), дрейф концепции (сопоставление функций с целевым изменением), проблемы с качеством данных и т. д.
В дополнение к мониторингу модели, на этом этапе необходимо настроить множество элементов разработки программного обеспечения:
- В режиме реального времени или в пакетном режиме
- Облако или Edge/браузер
- Память процессора/графического процессора
- Задержка, пропускная способность
- Ведение журнала
- Безопасность и конфиденциальность
От первого развертывания до обслуживания — это важные аспекты, о которых нужно помнить, и которые трудно сделать правильно. Это основная причина, по которой создание систем машинного обучения может так часто давать сбои; для этого требуется инфраструктура для программного обеспечения и данных, которые должны быть на месте, чтобы полностью реализовать ценность проектов моделирования.
Каждый проект машинного обучения включает в себя два проекта, и второй запускается при развертывании первого.
Итерации, эксперименты и вызовы
Хотя эти шаги носят последовательный характер, каждый шаг может дать информацию, которая заставит вас принимать другие решения на предыдущих шагах. Развертывание моделей может дать новое представление о том, какие модели работают с оптимальной производительностью, или новые проверки дрейфа данных/концепций, моделирование может дать новое понимание потребностей или базовых показателей качества данных и многое другое.
Требуется сильное стратегическое мышление, чтобы принять огромную неопределенность и пролить свет на важные элементы для успеха проекта. Вы должны подходить к этим проектам с рядом гипотез о том, почему определенные идеи будут работать, почему все идет хорошо, почему что-то не получается, где это может быть проблемой и т. д. Опыт построения систем помогает невероятно хорошо формировать это суждение.
Эта потребность в итерациях для продвижения вперед и экспериментах для проверки различных идей должна быть тщательно сбалансирована с производительностью, сроками и стоимостью, поэтому это ремесло может быть таким сложным. Каждый шаг наполнен неопределенностью, и лучшее ноу-хау — это ориентироваться в неопределенных водах со здравым смыслом.
Рис. 3. Жизненный цикл проекта машинного обучения.
Почему MLOps
Тревейл и др. др. обозначьте три основные причины для использования MLOps (и наличия мощной инфраструктуры MLOps), и все они были в центре внимания многих организаций, пытающихся создать системы машинного обучения.
- Снижение рисков. Наличие модели машинного обучения в локальном блокноте Jupyter, которую необходимо запускать раз в месяц, сопряжено с минимальным риском, но если модель находится на вашем веб-сайте и ежедневно обслуживает миллионы клиентов, рискованная затея. Централизованная команда, отслеживающая и поддерживающая множество таких моделей в реальном времени, может взять на себя множество рисков, связанных с: модель недоступна в течение определенного периода времени, модель возвращает неверный прогноз для данной выборки, модель точность или справедливость со временем снижаются, навыки, необходимые для поддержания модели (например, талант в науке о данных), теряются, библиотеки программного обеспечения с открытым исходным кодом выходят из строя или значительно изменяются. Даже с советом по управлению данными вам нужна настоящая инфраструктура MLOps, чтобы смягчить эти критически важные для бизнеса проблемы.
- Ответственный искусственный интеллект. В наши дни недостаточно просто построить высокопроизводительную модель, она также не должна несправедливо дискриминировать разные демографические группы или подгруппы. Хотя машинное обучение явно учится на прошлых примерах, легко может случиться так, что прошлые примеры запекли в человеческих предубеждениях. Преодолеть их может быть довольно сложно, но системы машинного обучения должны быть успешными по двум параметрам: преднамеренность и подотчетность.
- Масштаб. MLOps — это не просто возможность масштабирования, это необходимость. Вот некоторые из многих преимуществ, связанных с этим: отслеживание версий, особенно с экспериментами на этапе проектирования, понимание того, лучше ли переобученные модели по сравнению с предыдущими версиями (и продвижение моделей в производство, которые работают лучше), обеспечение ( в определенные периоды — ежедневно, ежемесячно и т. д.), что производительность модели не ухудшается в производстве и т. д.
Фундаментальные вызовы
В Введение MLOps Тревейла и др. др., авторы выделяют три ключевые причины, которые делают управление всем жизненным циклом машинного обучения в таком масштабе таким сложным.
- Много зависимостей. Потребности в данных и бизнесе постоянно меняются, поэтому рабочие модели необходимо постоянно отслеживать и оценивать, чтобы они работали в соответствии с ожиданиями и решали исходную проблему.
- Много языков. Это относится не только к языкам программирования. В этот процесс вовлечено множество людей — бизнес-лидеры, специалисты по данным/аналитики/инженеры, инженеры по машинному обучению, ИТ-команды и т. д. Большинство из этих людей используют множество инструментов и концепций, поэтому может быть сложно координировать между крупными предприятиями.
- Много наборов навыков. Как и в предыдущем выпуске, может быть сложно ожидать, что специалисты по данным будут знать все тонкости разработки программного обеспечения (и наоборот). Хотя инструменты MLOps могут со временем упростить переход по этому мосту, в текущем сценарии трудно выделить одну роль, которую нужно отстаивать, не вызывая выгорания. Эта трудность, естественно, вызывает большую текучесть кадров и, как следствие, большую сложность, когда предполагается управлять моделями, которые вы не создавали.
Я бы добавил еще одну задачу:
- Отсутствие надежной инфраструктуры данных. Зрелые организации данных имеют систему словарей данных, хорошую документацию о том, что можно найти в примерах запросов, которые люди использовали для получения общих потребностей, индикатор качества того, какие поля/таблицы/системы не работают или имеют проблемы, и многое другое. Наличие простого инструмента EDA, который отслеживает существующие и новые данные в быстро меняющейся среде, может оказать огромную помощь в создании систем машинного обучения.
В следующих частях этой серии я рассмотрю каждый раздел более подробно, разъяснив концепции более подробно и даже показав, как это можно сделать с помощью TensorFlow. В настоящее время я читаю несколько книг MLOps об O'Reilly, заканчиваю эту Инженерию машинного обучения для специализации производства от DeepLearning.ai и практикую эту работу в своей повседневной работе, так что продолжайте, если хотите узнать больше. !
Читайте другие статьи по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от начального до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг. Вы также можете пройти обучение по науке о данных по запросу, где бы вы ни находились, с нашей платформой Ai+ Training. Подпишитесь также на нашу быстрорастущую публикацию на Medium, ODSC Journal, и узнайте, как стать писателем.