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

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

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

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

Пример: запуск автоматической транскрипции

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

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

Во время этого исследования Сидни разговаривал с друзьями из других факультетов университета, которые часто проводят интервью для своих исследований. Им часто требуется расшифровывать записанные интервью (скажем, 30 интервью по 40–90 минут каждое) в виде текста для дальнейшего анализа, и они разочарованы существующими услугами транскрипции. Большинство исследователей используют сервисы транскрипции, которые используют других людей для расшифровки аудиозаписей (например, нанимая краудсорсинговых сотрудников на Amazon Mechanical Turk в бэкэнде), обычно по цене около 1,50 доллара за минуту и ​​со временем обработки в несколько дней. В настоящее время существует несколько сервисов для машинной транскрипции и субтитров, таких как автоматизированные субтитры Youtube, но они были невысокого качества, особенно когда дело доходит до технических терминов (сегодня системы значительно улучшились; рассмотрим, например, temi.com как передовая система в этой области). Точно так же Сидни обнаружил, что организаторы конференций все больше заинтересованы в предоставлении живых субтитров для выступлений, чтобы сделать их доступнее для участников конференции. Опять же, существующие решения часто связаны с людьми и дороги, или они предоставляют субтитры низкого качества, если они полностью автоматизированы.

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

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

  • В научных статьях модели Сидни превзошли современные модели по точности, измеренной на тестовых данных, со значительным отрывом, но аудиофайлы, полученные от клиентов, часто бывают более шумными, чем те, которые поступают по общественному радио, используемому для обучения и оценки в академических исследованиях. .
  • Во время исследования не имело значения, сколько времени ушло на обучение модели или расшифровку аудиофайла. Теперь клиенты становятся нетерпеливыми, если их аудиофайлы не расшифровываются в течение 15 минут, а для живых субтитров это должно быть почти мгновенным. Ускорение вывода модели и его лучшая масштабируемость для параллельной обработки множества транскрипций внезапно становится важным направлением для команды. Создание субтитров в реальном времени, вероятно, будет нереальным, если в место проведения конференции не будет доставлено дорогостоящее специализированное оборудование для достижения приемлемой задержки в настройках реального времени.
  • Стартап хочет значительно подорвать рынок и предложить транскрипцию по очень низким ценам. Однако как обучение, так и вывод (фактическая транскрипция с моделью) требуют больших вычислительных ресурсов, поэтому сумма денег, выплачиваемая поставщику облачных услуг, существенно сокращает размер прибыли. У команды уходит много времени, чтобы определить разумную и конкурентоспособную цену для клиентов.
  • В то время как ранее она была полностью сосредоточена на исследованиях в области науки о данных, теперь команде необходимо создать веб-сайт, на котором пользователи смогут загружать аудиофайлы и видеть результаты - что не обязательно является тем, что им нравится делать или с чем они имеют опыт. Пользовательский опыт показывает, что о веб-сайте думали позже, потому что им утомительно пользоваться, и он выглядит устаревшим. Разработчикам теперь также необходимо иметь дело с поставщиками платежных услуг, такими как компании, выпускающие кредитные карты. Утром понять, что веб-сайт не работал всю ночь или что некоторые аудиофайлы несколько дней стояли в очереди на обработку, - это не весело. Они знают, что должны обеспечить безопасное и конфиденциальное хранение данных клиентов, но у них мало опыта в этом, и сейчас это не является приоритетом. Наем внешнего веб-разработчика помог улучшить внешний вид сайта и облегчить его изменение, но общение между членами команды с разным опытом и обеспечение того, чтобы модель, серверная часть и пользовательский интерфейс хорошо работали вместе, оказывается гораздо более сложной задачей, чем ожидалось. .
  • Модели были ранее обучены с помощью множества ручных шагов и набора скриптов. Теперь каждый раз, когда модель улучшается или добавляется новый домен, кому-то нужно тратить много времени на повторное обучение модели и решение проблем, перезапуск заданий, настройку гиперпараметров и т. Д. Никто не обновлял библиотеку Tensorflow почти за год из опасения, что что-то может сломаться. На прошлой неделе обновление модели пошло совершенно не так, что привело к серьезному отключению и долгой ночи попыток вернуться к предыдущей версии и повторному запуску множества транскрипций для затронутых клиентов.
  • Отзывы клиентов в основном положительные, но некоторые постоянно недовольны, а некоторые сообщают о довольно вопиющих ошибках (например, диагноз, неправильно расшифрованный с высокой степенью достоверности в медицинских условиях, неизменно низкое качество транскрипции для носителей афроамериканского языка). Несколько членов команды тратят большую часть своего времени на поиски проблем, но отладка остается сложной задачей, и каждая исправленная проблема вызывает три новых. К сожалению, если заказчик не пожалуется, команда не может понять, как на самом деле работает модель. Они также только сейчас начинают собирать базовую статистику о том, возвращаются ли клиенты.

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

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

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

Специалисты по обработке данных и инженеры-программисты

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

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

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

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

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

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

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

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

Проблемы машинного обучения в программных проектах

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

Давайте рассмотрим три проблемы, которые мы рассмотрим более подробно в следующих главах этой книги.

Отсутствие спецификаций

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

/**
 * compute deductions based on provided adjusted
 * gross income and expenses in customer data.
 *
 * see tax code 26 U.S. Code A.1.B, PART VI
 *
 * Adjusted gross income must be positive;
 * returned deductions are not negative.
 */
float computeDeductions(float agi, Expenses expenses);

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

/**
 * Return the text spoken within the audio file
 * ????
 */
String transcribe(File audioFile);

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

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

Взаимодействие с реальным миром

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

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

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

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

Ориентация на данные и масштабируемость

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

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

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

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

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

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

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

Резюме

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

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

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

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

Дальнейшие чтения