Управление командой ML, планирование продукта, процесс разработки

В Части 1 мы рассмотрели основы работы AI PM. В части 2 давайте начнем с того, как управлять командой машинного обучения.

Управление командой

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

Убедитесь, что все сотрудники обоих подразделений понимают, какие задачи необходимо выполнить для функции машинного обучения и какие ограничения связаны с ее реализацией, желательно, включив их в основные принципы продукта. Требуется ли для вашей функции вывод в реальном времени? Есть ли у модели ограничения по размеру? Есть ли эталон точности? Как часто и в каком масштабе будет выполняться вывод? Эта ясность будет определять важные решения по архитектуре и разработке. Например, модуль ML будет понимать форматы входных данных и результатов логического вывода, как решать вопрос компромисса между точностью, размером и временем вывода (подробнее об этом в Части 3), как часто будет выполняться конвейер вывода и т. Д. разработчики смогут выбирать такие вещи, как оптимальная передача данных (сокеты, REST API, pub / sub и т. д.), в то время как дизайнеры UI / UX будут знать, как лучше всего сообщать результаты пользователю.

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

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

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

Из-за этих факторов зачастую невозможно заранее четко определить всю дорожную карту развития. Скорее, каждый этап зависит от результатов экспериментов на предыдущем. В этом случае спринты с ограничением по времени - не лучший вариант. Доска Канбан для отслеживания текущих задач + регулярно обновляемый бэклог лучше всего подходят для управления командами машинного обучения. В идеале в бэклоге должна быть отдельная история для каждого экспериментального подхода. Рекомендуемые этапы Канбана: «Приостановлено», «Задача», «Выполняется», «Проверка», «Готово».

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

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

Конвейер приема данных

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

  1. Каков формат данных?
    Данные могут быть в виде изображений, видео, аудио, текста, CSV, JSON и т. д.
  2. Что такое источник данных?
    Данные могут поступать из облачного хранилища, базы данных, хранилища данных, инструмента ведения журнала, инструмента пользовательской аналитики, камеры, микрофона и т. д.
  3. Данные генерируются в цифровом виде или в реальном мире?
    Примером данных, генерируемых в реальном мире, является видео, на котором автомобили проезжают через перекресток, снятое камерой.
    Примером данных, сгенерированных в цифровом виде, может быть история покупок пользователя или шаблоны просмотра на веб-сайте электронной коммерции.
  4. Где вы будете хранить данные?
    Это место, откуда данные будут доступны для предварительной обработки и обучения.
  5. Они генерируются непрерывно или пакетами?
    Определите, нужно ли передавать ваши данные постоянно или их можно перемещать большими партиями. Оба потребуют разных облачных архитектур. В любом случае убедитесь, что вы знаете, сколько данных вы будете получать в единицу времени (например, 5 ГБ в день).

Основываясь на ответах на приведенные выше вопросы, ваша команда построит конвейер для отправки данных из источника в пункт назначения. В зависимости от постановки задачи некоторые варианты используют REST API, облачную функцию, службу публикации / подписки, службу потоковой передачи данных, автономную службу в Интернете, такую ​​как AWS Snowball, или что-то еще, что работает лучше всего. Как только ваши данные будут там, где вы хотите, и в соответствующем формате, переходите к предварительной обработке.

Предварительная обработка данных

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

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

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

Наконец, данные также необходимо разделить на обучающий набор (используемый для обучения вашей модели машинного обучения) и набор тестов (используемый для оценки производительности вашей модели машинного обучения). Эмпирическое правило: 80% данных попадает в обучающую выборку и 20% - в тестовую.

Аннотация к данным

Аннотации данных, или теги, - это процесс сообщения вашей модели, какие данные она содержит. Этот шаг необходим для приложений машинного обучения с глубоким обучением, таких как компьютерное зрение или обработка естественного языка (NLP). Допустим, вы хотите научить модель компьютерного зрения подсчитывать количество автомобилей и мотоциклов, пересекающих перекресток. В каждом кадре видео, снятого камерой, вам нужно будет нарисовать ограничивающую рамку вокруг транспортного средства и пометить его соответствующим классом - в данном случае - автомобиль или мотоцикл.

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

Результатом процесса аннотации изображения обычно является файл XML или JSON, который содержит координаты аннотаций вместе с тегом класса, который идентифицирует объект. Изображения вместе с файлом данных аннотации используются для обучения модели. В процессе обучения мы обучаем модель тому, что на изображении прямоугольник с координатами (x1, y1), (x2, y1), (x1, y2) и (x2, y2) содержит объект A.

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

Как AI PM, одна из самых важных вещей, которые вам нужно сделать, - это настроить оптимизированные рабочие процессы аннотаций и обеспечить строгий процесс контроля качества до того, как аннотированные данные будут использоваться для обучения. Если возможно, назначьте одного проверяющего QA аннотаций на каждые 10 аннотаторов. Единственная задача этого рецензента - проверять и утверждать аннотированные наборы данных по одной выборке за раз. Даже в этом случае перед началом обучения модели убедитесь, что инженеры по машинному обучению еще раз взглянули на аннотации, чтобы убедиться, что все в порядке.

В машинном обучении мусорные данные входят = мусор выводится

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

Модельное обучение

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

Для обучения массивных моделей, особенно нейронных сетей глубокого обучения для компьютерного зрения или НЛП, вы обычно будете использовать графический процессор. Графические процессоры имеют преимущество при обучении глубокому обучению из-за их архитектуры параллельных вычислений. Обучение глубокому обучению состоит из миллионов операций умножения матриц (вспомните свой класс линейной алгебры, если у вас есть инженерное образование). Вместо того, чтобы выполнять эти операции последовательно, как в CPU, мы можем выполнять их параллельно в GPU из-за его особой архитектуры. Графические процессоры Nvidia в значительной степени являются отраслевым стандартом для глубокого обучения. Nvidia также разработала такие инструменты, как CUDA, платформу параллельных вычислений и модель программирования для работы с графическими процессорами.

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

После того, как модель завершит обучение, подайте ей тестовый набор данных, но без функции, которую вы хотите прогнозировать (только независимые переменные). Если вы прогнозируете цены на автомобили, не учитывайте столбец цен, который является зависимой переменной. Для аннотированных наборов данных просто загружайте изображения, а не файлы аннотаций. Модель должна возвращать прогнозы, основанные на процессе обучения, также известные как результаты вывода. Сравните результаты вывода с фактическими данными, которые вы ему не предоставили. Чем ближе совпадение, тем точнее модель. Это, конечно, упрощенное объяснение процесса. Существуют математические методы оценки точности модели, но вы можете подобрать их из любого курса машинного обучения.

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

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

Если вы найдете эту информацию ценной, подпишитесь на меня в Twitter и LinkedIn, чтобы быть в курсе последних новостей об искусственном интеллекте, дополненной реальности, управлении продуктами и стартапах.