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

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

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

– Эрик Хорвиц, главный научный сотрудник Microsoft.

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

Важность систематического модульного тестирования машинного обучения

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

Эти предубеждения на самом деле более распространены, чем мы думаем. В сентябре 2020 года аспирант из Канады написал в Твиттере об удалении лица чернокожего профессора при использовании виртуального фона.

Хотя эти примеры расовой предвзятости в технологии распознавания/обнаружения лиц являются хорошим показателем того, что команды, создающие эти технологии, должны точно выявлять предвзятость до запуска продуктов, расовая предвзятость — не единственный сценарий, в котором мы хотим проверить надежность модели. Нам также необходимо проверить устойчивость модели к другим характеристикам, таким как возраст, пол, камера и погодные условия, окклюзия важных функций, таких как глаза и рот, и т. д. Совокупный показатель производительности (например, точность 98%) оставляет огромные белые пятна в отношении как модель работает с этими различными подклассами, явление, которое называется скрытая проблема стратификации.

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

Давайте подробнее рассмотрим проблему скрытой стратификации и позаимствуем некоторые концепции из лучших практик тестирования разработки программного обеспечения для решения этой проблемы.

Смягчение проблемы скрытой стратификации

Как мы упоминали в предыдущем разделе, текущий подход к оценке производительности модели заключается в том, чтобы предоставить случайную выборку данных для тестирования, а затем создать глобальную метрику производительности. В программном обеспечении это эквивалентно выбору случайного набора функций в программном продукте с последующим созданием отчета о тестировании, в котором говорится: «Ваша система поддерживает 95% функций, которые вы случайно выбрали для тестирования! ” Но какие испытания прошли? Какие провалились? Что улучшилось? Что регрессировало? Все ответы на эти вопросы в настоящее время неизвестны и потребуют недель тщательного ручного исследования специалистами по данным.

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

Модульное тестирование для машинного обучения

С этой целью Марко Рибейро и др. представили новую методологию оценки машинного обучения в своей статье За пределами точности: поведенческое тестирование моделей НЛП с контрольным списком. Предлагаемый подход основан на разбивке потенциальных отказов лингвистических возможностей на конкретные тестовые случаи, что аналогично традиционному подходу к тестированию программных систем. Здесь модульный тест, ориентированный на конкретную возможность или режим отказа, может быть создан путем сбора небольшого, но целенаправленного набора данных для тестирования или путем разделения исходного набора данных на определенные атрибуты. Другими словами, авторы предлагают разбить заданный класс на более мелкие подклассы для более детальных результатов. Каждый подкласс представляет определенный сценарий или атрибуты, которые должны оцениваться независимо. Это станет намного яснее в следующем примере.

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

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

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

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

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

Зачем модульное тестирование для машинного обучения?

На рисунке выше предположим, что у нас есть две модели, A и B, и их точность составляет 96,2% и 94,8% соответственно. Хотя модель B имеет более низкую общую точность, она может лучше подходить для варианта использования или развертывания, которое больше заботится о тестовых примерах 1 и 2. Это показывает, что общая метрика не дает достаточного представления о том, как на самом деле ведут себя модели.

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

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

Обратите внимание, что в нашем предыдущем примере с Car Detector мы перечислили только 14 тестовых случаев, чтобы проиллюстрировать концепцию модульного тестирования. В реальных сценариях это число со временем вырастет до десятков тестовых случаев на каждый помеченный класс. Для средней модели, которая обнаруживает ~ 5–20 классов, количество тестовых случаев быстро увеличивается до сотен тестовых случаев на модель.

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

В Kolena мы создаем платформу тестирования и проверки машинного обучения следующего поколения, которая ускоряет процесс модульного тестирования и проверки машинного обучения в масштабе. Если вы хотите узнать больше обо всем, что касается тестирования машинного обучения и о том, как оно может помочь вашему магазину, напишите нам на [email protected]. Мы хотели бы услышать ваши мысли и обсудить некоторые решения для ваших собственных вариантов использования.

Первоначально опубликовано на https://www.linkedin.com.