… по словам главного специалиста по принятию решений Google

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

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

Шаг 0. Найдите приложение, в котором машинное обучение полезно

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

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

Шаг 1. Определите бизнес-цель

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

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

  1. Определите свои выходные данные: какими должны быть выходные данные модели? Непрерывное число или категории?
  2. Рассмотрите ошибки: что может пойти не так? Есть ли ограничения (данные, оборудование)?
  3. Оценка проекта: есть ли ошибки, которые хуже других (ложноположительные или ложноотрицательные)? Что такое хорошее поведение модели?
  4. Определите метрику эффективности бизнеса (BPM): какая метрика помогает бизнесу измерить реальную ценность результатов модели?
  5. Подумайте о потерях: ваш BPM может (или даже не должен) подходить для использования в качестве потерь. И не стоит заставлять его быть. Так что же такое подходящая потеря?
  6. Сравните ваши функции: BPM и потери должны идти в «одном» направлении: Уменьшает ли увеличение BPM ваши потери (потому что обычно цель состоит в том, чтобы минимизировать потери)?
  7. Установите производительность: какой минимальной производительности должна достичь модель, чтобы быть 7.1) запущенной в производство 7.2) запущенной? Решите сейчас и придерживайтесь его!

Шаг 2: Получите данные

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

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

Шаг 3: Разделите данные

Ключевые участники: инженер машинного обучения.

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

Итак, теперь давайте посмотрим, как разделить наши исходные данные на 3 полезных подмножества и для чего используется каждое из них:

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

Проверочные данные. Это часть данных для проверки обученных моделей и выбора параметров. Примечание. Чтобы окончательно выбрать модель, вам придется прыгать назад и вперед от моделей обучения (изменять настройки параметров) и проверять их. Вы оптимизируете свою модель, чтобы она хорошо работала с проверочными данными, и выберете наиболее эффективную.

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

Шаг 4. Изучите данные

Ключевые участники: аналитик, эксперт по предметной области.

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

Наконец, если функции или преобразования установлены, мы применяем их ко всем нашим 3 наборам данных, чтобы представить один и тот же «мир» данных.

Шаг 5: Выбор алгоритма

Ключевые участники: лицо, принимающее решения, инженер по машинному обучению, аналитик.

На этом этапе возникает вопрос: какой из всех этих причудливых алгоритмов выбрать лучше всего?

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

  • Какой алгоритм подходит для вывода меток?
  • Какой тип обучения является проблемой? Контролируемые или неконтролируемые (или другие)?
  • Должен ли алгоритм быть интерпретируемым или нет?
  • Какой алгоритм может обрабатывать размер набора данных?
  • Какую дополнительную информацию/требования мы должны принять во внимание?
  • Какой алгоритм может подойти для производственной среды?

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

Шаг 6: Обучите модель

Ключевые участники: инженер машинного обучения, аналитик

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

Размер набора данных

Часто задаваемый вопрос: сколько признаков должен содержать набор данных?

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

Ясно одно: чем больше у вас данных, тем больше сложности можно добавить к вашей модели. Начните с малого и увеличивайте при необходимости.

Переобучение — ваш худший кошмар! — Кэсси Козырков

Шаг 7. Настройте и отладьте модель

Ключевые участники: инженер машинного обучения, аналитик

Отладка

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

Затем делаем следующее:

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

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

Тюнинг

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

Чтобы избежать случайных предположений, в игру вступает перекрестная проверка (CV). Первоначально этот метод был разработан статистиками для использования в действительно неприятных обстоятельствах с очень небольшим количеством данных. Это другой вариант использования, чем использование CV для настройки (как мы делаем сейчас).

На практике мы говорим о k-кратном CV, где k обозначает количество непересекающихся фрагментов, на которые нужно разделить данные (выбрать по желанию).

Затем выполните следующие действия:

  1. Выберите первую настройку гиперпараметра
  2. Обучите свою модель на k-1 фрагментах данных и оцените оставшиеся
  3. Сдвиньте оценочный набор, обучите и снова оцените
  4. Повторяйте до тех пор, пока все наборы не станут набором данных для оценки.

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

У этого есть дополнительное преимущество: проверьте стабильность модели. В любых двух прогонах одной и той же настройки гиперпараметра, например, в 5-кратном CV, два обучающих набора делят 75% данных. Поэтому при обучении на большом количестве одних и тех же данных мы ожидаем, что результаты будут очень похожими. Но если они сильно отличаются, это говорит о том, что что-то не так. Может не хватить данных для сложности выбранной вами модели или есть проблемы с самими данными, например выбросы.

Шаг 8: Подтвердите свои результаты

Ключевые участники: инженер машинного обучения, аналитик

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

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

Шаг 9: Проведите статистическое тестирование

Ключевые участники: лицо, принимающее решения, статистик.

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

Статистика — это изменение нашего мнения.

Мы формулируем гипотезу (называемую нулевой гипотезой) и пытаемся ответить, если имеющиеся у нас данные заставят нас передумать или продолжить.

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

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

Важно! Если тестирование завершилось неудачей, все усилия по созданию модели закончились. Модель — мусор, и вы можете начать с нуля только в том случае, если сможете собрать новый тестовый набор данных. Имейте мужество принять полученные результаты, пнуть эту созданную модель и начать заново.

Шаг 10. Запустите свою систему машинного обучения в производство

Ключевые участники: инженер

Пока у нас есть прототип модели — здорово! Чтобы подготовить его к производству, мы должны

  1. Запустите модель и инфраструктуру
  2. Повторно протестируйте модель на реальных данных (ранее ее никто не видел)
  3. Будьте очень осторожны

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

На практике новые данные поступают все время. Поэтому рекомендуется постоянно переобучать модель, снова выполняя шаги 6–9. Частой проблемой, с которой вы сталкиваетесь в производственной среде, является перекос обучения. Проще говоря, он говорит:

«Мир, представленный вашими тренировочными данными, — это единственный мир, в котором вы можете рассчитывать на успех».

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

Дальнейшие производственные соображения:

  • Повторное обучение (Модель не проходит повторное тестирование? Вернуться?)
  • Ведение журнала (Что делать, если регистрация не удалась)
  • Цепочка (Что происходит, когда ввод переобучается?)
  • Изменение крошечных частей вашего кода (Изменение чего-либо меняет все)
  • Выбросы (например, длинный хвост)
  • Ошибки (Как предотвратить смущение?)

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

Шаг 11: Запуск

Ключевые участники: статистик, лицо, принимающее решения.

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

Чтобы провести живой эксперимент и определить влияние модели, выполните следующие действия:

  1. Сформулируйте гипотезу: достаточно ли хороша производительность модели?
  2. Каковы различные возможные методы лечения: модель ML против модели без модели
  3. Рандомизация для лечения: живой трафик случайным образом отправляется в модель ML или старую систему.

Шаг 12: Мониторинг и обслуживание

Ключевые участники: инженер по надежности, аналитик

Этот шаг никогда не заканчивается. Это непрерывная процедура мониторинга вашей модели и поддержания ее в состоянии (пользовательской) готовности. Чтобы это сделать, нам нужно:

  • План мониторинга
  • План обслуживания
  • Панель отслеживания
  • Хорошая документация

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

Обязательно загляните на Cassies Youtube или ее профиль здесь, на Medium!
Если вы нашли этот пост полезным, поставьте отметку 👏! — Спасибо 🔥

Удачного кодирования и решения проблем! 🧑‍💻🔐