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

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

Машинное обучение - ключ к новой волне искусственного интеллекта

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

Среди различных методов искусственного интеллекта ключевую роль, в частности, играет машинное обучение (ML).

Изучение сложного поведения на примерах

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

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

Означает ли быстрое развитие машинного обучения, что программные системы больше не нужно будет программировать? Нужны ли нам специалисты по данным вместо разработчиков программного обеспечения?

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

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

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

  1. Алгоритмы машинного обучения сами по себе являются программным обеспечением, которое необходимо разрабатывать, тестировать и поддерживать.
  2. Использование алгоритма машинного обучения требует программирования для задач приема, очистки, объединения и улучшения данных, для подачи данных в алгоритм машинного обучения, для выполнения повторяющихся обучающих экспериментов для создания, оценки и оптимизации модели машинного обучения, а также для тестирования, интеграция, развертывание и использование моделей машинного обучения в производственных системах.
  3. Обученные модели машинного обучения - это всего лишь один из строительных блоков при построении сложных программных систем.

Итак, в чем разница?

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

ML Engineering

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

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

Изучение инженерных практик машинного обучения

Чтобы исследовать эти вопросы, исследователи в области разработки программного обеспечения и машинного обучения объединились.

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

Изучение внедрения практик машинного обучения машинного обучения

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

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

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

К каталогу передового опыта машинной инженерии

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

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

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

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

Примите участие в опросе!

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

Примите участие в опросе: https://se-ml.github.io/survey/

Йост Виссер - профессор программного обеспечения и науки о данных в Лейденском университете. Ранее Джуст занимал различные руководящие должности в группе улучшения программного обеспечения. Он является автором множества публикаций по качеству программного обеспечения и смежным темам.

Совместная работа с Alex Serban, Holger Hoos и Koen van der Blom.

Для получения дополнительной информации посетите веб-сайт проекта SE4ML.

Более ранняя версия этой статьи была опубликована в Bits & Chips.