2019/09/27 17:19:33

Software 2.0: Как новый подход к разработке ПО заставит компьютеры поумнеть

Парадигма Software 2.0 - подход к разработке программного обеспечения, который способен совершить качественный рывок в области развития компьютинга. Несмотря на то, что идея, лежащая в его основе, не нова, пока он все еще остается только гипотезой. Журналист Леонид Черняк в материале, подготовленном для TAdviser, рассказывает о предпосылках и истории появления этого подхода.

Содержание

Процессоры как фактор стагнации компьютерного прогресса

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

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

Автоматизированная звонница
Автоматизированная звонница

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

Революционная идея: как заставить компьютеры поумнеть

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

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

Андрей Карпатый
Андрей Карпатый

В 2017 году Андрей Карпатый, в прошлом ученый-исследователь в Стэнфордском университете, вступил на должность руководителя направления ИИ в компании Tesla, ответственного за разработку ПО для компьютерного зрения и автовождения. Стремительному карьерному скачку далекого от индустрии академического ученого, фаната скоростной сборки кубика Рубика прошествовала вызванная рядом автомобильных инцидентов отставка прежнего руководства этого направления в полном составе.

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

Через пару месяцев Карпатый опубликовал довольно неожиданный пост, озаглавленный «Software 2.0»[1]. Позже он прокомментировал его в получасовом выступлении [2] на конференции Train AI 2018 (Сан-Франциско, май 2018).

В своем посте он заявил, что нынешняя парадигма программирования, которую после появления Software 2.0 приходится называть Software 1.0, сохраняется неизменной 70 лет, несмотря на возникновение за прошедшие годы колоссального количества аппаратных и программных новых технологий. Суть ее в том, что строго детерминированное решение сначала описывается человеком на языке программирования, затем оно компилируется (реже интерпретируется) в машинных кодах и выполняется.

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

От гипотезы к практике

Ориентированная на такие цели парадигма Software 2.0 пока не реализована и вряд ли будет реализована в ближайшее время. Скорее, ее можно считать гипотезой или заявкой на будущее. Прежде, чем представить ее, следует отметить, что история вопроса не нова. Одним из первых, кто еще в середине 60-х осознал необходимость в адаптации математических методов к сложностям реального мира, был американский математик азербайджанского происхождения Лотфи Заде, автор теории нечетких (размытых) множеств.

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

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

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

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

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

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

Для такого подхода можно использовать известную аббревиатуру AI (Artificial Intelligence), но расшифровать ее как Augmented Intelligence, понимая под этим способность машины служить интеллектуальным помощником человеку. Важнейшим компонентом такого AI-подхода является итерационный режим работы с перманентным тестированием, то, что называют test-driven. Человек пишет задание и критерии его оценки, а машина ищет способ решения и предъявляет результат. В этом процессе разработчик освобождается от рутинной деятельности и получает возможность сосредоточиться на сути решаемой задачи. То есть, он должен быть квалифицированным специалистом в прикладной области.

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

См. также

Методология программирования

Машинное обучение

Примечания