Что означает машинное обучение для разработки программного обеспечения

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

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

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

Мы занимаемся разработкой программного обеспечения примерно с 1970-х годов. У нас есть языки высокого уровня, языки низкого уровня, языки сценариев и инструменты для создания и тестирования программного обеспечения, но мало что изменилось в том, что эти инструменты требуют от нас. Наш язык и инструменты намного лучше, чем 50 лет назад, но по сути они остались теми же. У нас все еще есть редакторы кода. Эти редакторы стали более привлекательными: у них есть цветное выделение, завершение имен переменных, и они иногда могут помочь нам с такими задачами, как рефакторинг, но они все еще являются потомками emacs и vi. Объектная ориентация представляет собой другой стиль программирования, а не что-то по существу «новое» — конечно, функциональное программирование восходит к 50-м годам (если только мы не знали, что оно называется этим именем). Можем ли мы сделать лучше?

Мы сосредоточимся на машинном обучении, а не на искусственном интеллекте. Раньше машинное обучение называли «частью, в которой работает ИИ», но, что более важно, термин «машинное обучение» избегает подобных терминов «общий интеллект». Мы не обсуждаем системы, которые разрабатывают решение решаемой проблемы и сами реализуют это решение. Такой системы не существует и, вероятно, никогда не будет. Нам нужны люди, чтобы сделать это. Машинное обучение может быть немного больше, чем распознавание образов, но мы видели, что распознавание образов может многое. На самом деле, распознавание образов вручную лежит в основе нашего текущего набора инструментов: именно этим и занимаются современные оптимизирующие компиляторы.

Мы также должны установить наши ожидания. По оценкам McKinsey, «менее 5% профессий могут быть полностью автоматизированы с использованием современных технологий. Однако примерно 60% профессий имеют 30% или более рабочих операций, которые можно автоматизировать». профессий, которые будут полностью автоматизированы. Но хорошие разработчики программного обеспечения всегда стремятся автоматизировать утомительные, повторяющиеся задачи — именно для этого и нужны компьютеры. Нет сомнений в том, что сама разработка программного обеспечения будет все больше автоматизироваться.

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

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

С этой точки зрения машинное обучение легко представить как следующий уровень абстракции, самый общий инструмент решения проблем, который мы нашли на сегодняшний день. Конечно, нейронные сети продемонстрировали, что они могут выполнять множество конкретных задач: практически любую задачу, для которой можно построить набор обучающих данных. Карпати с оптимизмом смотрит на то, что для многих задач собирать данные проще, чем писать программы в явном виде. Он, несомненно, прав насчет некоторых очень интересных и очень сложных программ: легко собрать обучающие данные для игры в го или шахматы (игроки всех уровней записывают партии более 150 лет), но трудно написать явную программу, успешно играющую в эти игры. Поэтому, когда вы не умеете писать программы, но можете собирать данные, вам подойдет машинное обучение. С другой стороны, сбор данных не всегда прост. Мы даже не можем себе представить программы, которые автоматически маркируют изображения, пока такие сайты, как Flickr, Facebook и Google, не соберут миллиарды изображений, многие из которых были помечены людьми. Для таких задач, как распознавание лиц, мы не умеем писать программы, и сложно собирать данные. Для других задач, таких как выставление счетов, легко написать программы, основанные на некоторых простых бизнес-правилах. Трудно представить себе сбор данных, необходимых для обучения алгоритма машинного обучения, но если вы сможете собрать данные, написанные вами программы будут лучше адаптированы к различным ситуациям, а также смогут обнаруживать аномалии, то есть когда «вовлечение людей в цикл итерации программного обеспечения", тем более.

Машинное обучение, заменяющее код

Машинное обучение сделало код более эффективным: Джефф Дин из Google сообщает, что 500 строк кода TensorFlow заменили 500 000 строк кода в Google Translate. Хотя количество строк кода является сомнительным показателем, тысячекратное сокращение является огромным как с точки зрения усилий по программированию, так и с точки зрения объема кода, который необходимо поддерживать. Однако более важно то, как работает этот код: это нейронная сеть, обученная переводить, по сравнению с полумиллионом строк статистического кода. По мере изменения языка и сценариев использования нейронные сети можно пересматривать и переобучать на новых данных по мере обнаружения предубеждений и предубеждений. Его код не нужно переписывать. Мы не должны недооценивать сложность обучения нейронной сети любой сложности, но мы также не должны недооценивать проблемы управления и отладки огромной кодовой базы.

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

Пит Уорден описывает будущее программирования как процесс преподавания учителем: «Разработчик должен быть учителем, куратором обучающих данных и аналитиком результатов». Разработка программного обеспечения не исчезает, разработчики должны думать о себе по-другому. Как построить систему, решающую общую проблему, а затем научить эту систему решать конкретную задачу? С одной стороны, это звучит как рискованная, хлопотная сцена, как перетягивание каната. Но, с другой стороны, он предполагает, что наши системы станут более гибкими, гибкими и легко адаптируемыми. Уорден видит будущее, которое больше зависит от вывода, чем от написания строк кода: обучайте общую систему и тестируйте ее в соответствии с вашими требованиями, включая такие вопросы, как справедливость.

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

Управление данными и инфраструктура

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

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

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

наука о данных

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

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

Идем дальше: такие компании, как DataRobot, могут автоматизировать весь процесс машинного обучения, включая одновременное использование нескольких моделей и сравнение результатов. Этот процесс называется «автоматизированным машинным обучением»; Sagemaker от Amazon и AutoML от Google предоставляют облачные инструменты для автоматического создания моделей машинного обучения.

Создание модели — это не одноразовая вещь: модели данных необходимо постоянно тестировать и перенастраивать. Мы начинаем видеть инструменты для непрерывного мониторинга и настройки моделей. Эти инструменты не особенно новы: алгоритмы игровых автоматов для A/B-тестирования существуют уже некоторое время, и для многих компаний алгоритмы игровых автоматов станут первым шагом в обучении с подкреплением. Chatbase — это стартап, поддерживаемый Google, который отслеживает чат-приложения, чтобы разработчики могли оценить их производительность. Понимает ли приложение вопросы, которые задает пользователь? Действительно ли они решают проблему или пользователи часто запрашивают функции, которые еще не поддерживаются? Эти проблемы можно решить, вручную просматривая журнал чата целиком и отмечая проблемы, но даже создать бота для такой задачи сложно. Chatbase предвидит будущее, в котором многие организации будут иметь десятки или даже сотни сложных ботов для обслуживания клиентов, службы поддержки и многих других приложений.

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

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

Глядя в будущее

Как выглядит будущее разработчиков программного обеспечения? Будет ли разработка программного обеспечения следовать тому же эволюционному пути, который McKinsey предсказал другим отраслям? Будет ли автоматизировано 30% рабочих мест, связанных с разработкой программного обеспечения и наукой о данных?

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

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

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

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

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

Мы только начинаем понимать важность этики в компьютерных технологиях. Фундаментальные вопросы, такие как справедливость, непросты и требуют особого внимания. Мы только начинаем думать об улучшении пользовательских интерфейсов, включая диалоговые интерфейсы: как они будут работать? Даже с помощью искусственного интеллекта наши проблемы с безопасностью не исчезнут. Независимо от проблем безопасности, все наши устройства становятся «умнее». Что это значит? Что мы хотим, чтобы они сделали? Люди не пишут столько низкоуровневого кода. Но только потому, что они не будут писать этот код, они могут свободно думать о том, что этот код должен делать и как он должен взаимодействовать с людьми. Никогда не будет меньше проблем, требующих решения.

Трудно представить себе будущее, в котором людям больше не придется создавать программное обеспечение. Но легко представить, что разработка программного обеспечения, которая «вовлекает людей в процесс», будет составлять значительную долю в будущем.

связанная информация :

  • Статья Питера Норвига «Искусственный интеллект в рабочих процессах разработки программного обеспечения»

  • «Как думать о технологиях искусственного интеллекта и машинного обучения и их роли в автоматизации»

  • Является ли ИИ следующим цифровым рубежом? : Обзор Майкла Чуи из Глобального института McKinsey.

  • «Создание инструментов для будущих приложений ИИ»

  • «Введение в RLlib: компонуемая и масштабируемая библиотека обучения с подкреплением»

  • «Практические применения обучения с подкреплением в промышленности»: обзор коммерческих и промышленных приложений обучения с подкреплением.

  • «Машинному обучению нужно машинное обучение»: Марк Хаммонд применяет обучение с подкреплением к производству и промышленной автоматизации.

  • «Раскрытие потенциала обучения с подкреплением»: статья Дэнни Ланге о том, как обучение с подкреплением ускоряет разработку программного обеспечения и как оно может демократизировать

Бен Лорика — главный специалист по данным в O'Reilly Media, Inc. и директор по планированию контента для конференции Strata Data и конференции O'Reilly Artificial Intelligence. Он применял методы бизнес-аналитики, интеллектуального анализа данных, машинного обучения и статистического анализа в различных сценариях, включая прямые продажи, исследования потребителей и рынка, таргетированную рекламу, анализ текста и финансовый инжиниринг. Его опыт включает должности в компаниях по управлению инвестициями, интернет-стартапах и компаниях, предоставляющих финансовые услуги.

Майк Лукидес — вице-президент по стратегии контента в O'Reilly Media. Он редактировал множество известных технических книг по программированию не для Windows. В частности, его интересуют языки программирования, Unix и его приложения, системы и управление сетями. Майк — один из авторов книги «Настройка производительности системы» и «Мощные инструменты для Unix». В последние годы сосредоточьтесь на области данных и анализа данных, аналитических языках (таких как R), математике, Octave и размышлениях о том, как сделать книги более социальными.

This article originally appeared in English: "What machine learning means for software development".