Дата публикации: 04.02.2022
Как искусственный интеллект
стал конкурентом
программистов.
Став для человечества не просто способом выживания, создание специализированных решений непредвиденных проблем превратилось в своего рода вторую натуру нашего интеллекта. И, конечно, апогеем результатов критического мышления можно считать науку вообще и инженерные изыскания в частности. Однако, среди всего многообразия сфер применения человеческой мысли можно особенно выделить вычислительные технологии и так называемый искусственный интеллект как высшее их достижение.
Конечно, кто-то может не согласиться с таким обособлением компьютерной отрасли, руководствуясь тем, что, например, здравоохранение для человечества куда важнее: мол, без калькулятора человек прожить может, а вот без медицины – нет. Но если мы взглянем непредвзято, то окажется, что любая другая сфера деятельности облегчает работу человека, и только информационно-вычислительные технологии способны взять на себя львиную долю наших профессиональных и не только забот. Собственно, для этого они – ИТ – и существуют, и это же их отличает от молотка или скальпеля: компьютерные программы наделяют машину человеческой возможностью знать что и как делать и действовать самостоятельно.
Так что да, программирование – невероятно мощный и уже практически вездесущий инструмент решения проблем. Поэтому на данном витке цивилизации программисты становятся чуть ли не бойцами спецподразделений от науки. Однако, как и в любой другой сфере, их работу тоже можно облегчить.
Идеи по разработкам систем, которые могли бы не только помочь программистам, но даже и генерировать программы самостоятельно, сформировались уже давно. С одной стороны, такие инструменты могли бы сделать программирование более продуктивным в профессиональном применении, а с другой – гораздо доступнее для обывательского использования. Естественно, главнейшим претендентом на роль такого помощника выступает технология глубокого машинного обучения.
Исследователи и разработчики, занятые в этой сфере, добилось огромного прогресса в создании и понимании текстовых данных, однако и по сей день включение инноваций в ИИ оказывается сложной задачей. Так, прогресс технологии по-прежнему ограничен относительно простыми математическими успехами. Недавние крупные языковые модели продемонстрировали впечатляющую для машины способность генерировать код и теперь могут выполнять простые задачи программирования или поиска и копирования решений сопоставимой сложности. Но нам при этом всё-таки следует признать, что, при нацеливании на более сложные неочевидные проблемы, требующие навыков решения помимо простого перевода инструкций в код, работают эти модели по-прежнему плохо. Например, будучи весьма требовательными к пониманию не только алгоритмов, но и сложного естественного языка, остаются чрезвычайно сложными задачи соревновательного программирования.
Чтобы устранить этот пробел необходимо создать систему генерации кода, которая могла бы конструировать новые решения проблем нетривиальных – таких, которые требуют более глубоких рассуждений, и выход из которых не лежит на поверхности.
И вот, по результатам недавних соревнований по программированию, состоявшихся на платформе Codeforces, детище команды исследователей DeepMind, названное AlphaCode, в среднем входит в 54,3% лучших участников, коих всего было более 5000 человек. То есть, для ясности: итоги открытых соревнований показали, что новая система может считаться крепким средним конкурентом живому программисту.
Для справки: DeepMind – основанная в 2010 году междисциплинарная команда исследователей интеллекта и разработчиков интеллектуальных технологий. Её передовые решения известны не только в среде специалистов. Например, вы скорее всего слышали об успехе их программы AlphaGo, опередившей конкурентов почти на десятилетие, обыграв профессионального игрока в го. С 2014 года компания сотрудничает с Google, не прекращая собственных исследований.
Что же касается Codeforces – это популярная платформа, на которой регулярно проводятся соревнования, привлекающие десятки тысяч участников со всего мира, желающих проверить свои навыки программирования. А само соревновательное программирование является весьма популярным и сложным видом конкурентного противостояния: сотни тысяч программистов участвуют в состязаниях, дабы набраться опыта и продемонстрировать свои навыки в весёлой компании единомышленников. Кроме того, многие организации и бизнес используют подобные конкурсы в качестве инструментов для найма инженеров-программистов, чем, кстати, и способствуют представлением разнообразных и необычных проблем в качестве конкурсных задач.
Но вернёмся к AlphaCode. В ходе исследований было обнаружено, что решающее значение для достижения хорошей и надёжной работы имеют 3 ключевых компонента: обширный и чистый набор данных конкурентного программирования для обучения и оценки; большие и подходящие преобразующие архитектуры; крупномасштабная модель отбора для исследования пространства поиска с последующей фильтрацией на основе поведения программы для небольшого набора представлений.
То есть AlphaCode использует языковые модели на основе преобразователей для генерации кода в беспрецедентном масштабе, а затем разумно фильтрует небольшой набор перспективных программ. И соревнования подтверждают эффективность этого подхода. Для испытания было выбрано 10 недавних контестов, каждый из которых новее тренировочных данных. Техническая новинка оказалась примерно на уровне среднего конкурента, что стало первым случаем, когда ИИ-система генерации кода достигла конкурентоспособного уровня производительности в соревнованиях по программированию. Посудите сами: такой результат в условиях, когда участники получают серию длинных описаний задач (с типичными проблемами вроде поиска способов размещения дорог и зданий с определенными ограничениями или создания стратегий для выигрыша в настольных играх) и всего несколько часов на написание решающих их программ, всё-таки заслуживает аплодисментов. Тем более если учесть, что участники ранжируются на основе того, сколько задач они решают.
Чтобы помочь другим исследователям опираться на результаты эксперимента, команда DeepMind опубликовала свой набор данных о проблемах и решениях конкурентного программирования на GitHub. Сюда вошли обширные тесты, призванные подтвердить, что прошедшие эти тесты программы действительно верны. На самом деле это критически важная функция, которой не хватает в текущих наборах данных. В DeepMind надеются, что этот их комплекс тестов поможет в дальнейших инновациях в решении проблем и генерации кода.
«Могу с уверенностью сказать, что результаты AlphaCode превзошли мои ожидания. Я был скептичен, потому что даже в простых соревновательных задачах часто требуется не только реализовать алгоритм, но и – и это самое сложное – его придумать. AlphaCode удалось выступить на уровне перспективного нового конкурента. Я не могу дождаться, чтобы увидеть, что ждёт впереди!» – признаётся Майк Мирзаянов, основатель Codeforces.
Да, способности к решению проблем, необходимые для достижения успеха в этих соревнованиях, выходят за рамки возможностей существующих систем искусственного интеллекта. Это стало возможным благодаря в том числе тому, что не так давно крупные модели преобразователей продемонстрировали многообещающие свойства, способствующие генерации кода. Так вот сочетая эти достижения с крупномасштабной выборкой и фильтрацией, получилось-таки добиться значительного прогресса в ряде вопросов, которые теперь можно решить.
Команда предварительно обучила свою модель ИИ на выбранном общедоступном коде с GitHub и настроила её на своём относительно небольшом наборе данных для конкурентного программирования. Во время оценки создаётся огромное количество программ на C++ и Python для каждой задачи. Причём – на несколько порядков больше, чем в предыдущей работе. Затем эти решения учёные фильтруют, группируют и ранжируют до небольшого набора из 10 программ-кандидатов, которые по итогам отправляются на внешнюю оценку. Эта автоматизированная система заменяет собой процесс проб и ошибок – это своего рода самокритичный механизм отладки и совершенствования решений.
А далее пришла веха испытаний в полевых условиях. Codeforces создала область конкурентоспособного программирования, в которой невозможно решать проблемы с помощью ярлыков вроде дублирования решений, встречавшихся ранее, или попыток опробовать каждый потенциально связанный алгоритм на соответствие условиям и адекватность его применения. Вместо этого участники должны создавать новые и интересные решения, и, как уже было сказано, модель AlphaCode оказалась примерно на уровне среднего конкурента. И пусть это далеко не победа, данный результат представляет собой существенный скачок в возможностях применения ИИ для решения задач. Исследователи уверенны, что итоги их работы вдохновят сообщество конкурентоспособного программирования на дальнейшие свершения.
«Решение задач конкурентного программирования – это действительно сложная задача, требующая от людей как хороших навыков программирования, так и творческого подхода к решению задач. Я был очень впечатлён тем, что AlphaCode может добиться прогресса в этой области, и был рад увидеть, как модель использует своё понимание операторов для создания кода и направления случайных исследований для создания решений», – говорит Пётр Митричев, конкурентный программист мирового уровня, инженер-программист Google.
Чтобы искусственный интеллект мог помочь человечеству, он должен быть способен развивать возможности решения проблем. Успех AlphaCode демонстрирует потенциал моделей глубокого обучения для задач, требующих критического мышления. Эти модели элегантно используют современное машинное обучение, чтобы выражать решения проблем в виде кода, возвращаясь к основанию ИИ на основе символических рассуждений, существовавшему несколько десятилетий назад. И это только начало. Исследование генерации кода имеет обширные возможности для совершенствования и намекает на ещё более интересные идеи, которые могут помочь программистам повысить свою производительность и открыть поле для людей, которые в настоящее время не пишут код. Коллектив DeepMind продолжает исследования…
АРМК, по материалам DeepMind.