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

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

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

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

Источники технического долга в системах машинного обучения

Сложность соблюдения границ абстракции

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

Системы машинного обучения, напротив, этого не делают — они используют сигналы или функции, которые по своей сути запутаны — изменение распределения одной функции может изменить веса или важность других функций. Это называется принципом CACE — «Изменение чего-либо меняет все».

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

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

Зависимости данных

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

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

Прямые и скрытые петли обратной связи

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

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

Шаблоны проектирования с высокой задолженностью

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

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

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

Настройка систем машинного обучения

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

Меняющийся внешний мир

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

Измерение технического долга

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

В заключение

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

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

И, наконец… Мои мысли об идеях, представленных в статье

Не все источники технологического долга, указанные здесь, на самом деле способствуют ему. Например, связующий код — отличный способ объединить абстракцию и связать слои. Недостаточная документация или неоднородный дизайн — вот что позволяет коду Glue вносить свой вклад в технический долг. Технический долг накапливается в результате неправильного использования этих компонентов или инструментов.

Затраты на ОД, связанные с изменением внешнего мира (переобучение, изменение порогов, тестирование и т. д.), не могут быть отнесены к категории технического долга. Эти затраты возникнут независимо от передовой практики — они являются «неконтролируемыми» факторами.

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

дальнейшее чтение

  1. https://matthewmcateer.me/blog/machine-learning-technical-debt/
  2. https://blog.metaobject.com/2021/06/glue-dark-matter-of-software.html
  3. https://convincedcoder.com/2019/04/27/Software-architecture-boundaries/