Примечание. Этот блог был впервые опубликован 2 февраля 2022 г. После публикации статьи в журнале Science 8 декабря 2022 г. мы внесли в текст незначительные обновления, чтобы отразить это.
Решение новых задач и установление новой вехи в соревновательном программировании
Создание решений для непредвиденных проблем является второй натурой человеческого интеллекта — результатом критического мышления, основанного на опыте. Сообщество машинного обучения добилось огромного прогресса в создании и понимании текстовых данных, но успехи в решении проблем по-прежнему ограничены относительно простыми математическими и программными задачами или поиском и копированием существующих решений.
Как часть Миссия DeepMind для решения проблемы интеллекта мы создали систему под названием AlphaCode, которая пишет компьютерные программы на конкурентном уровне. AlphaCode вошла в число 54% лучших участников соревнований по программированию, решая новые задачи, требующие сочетания критического мышления, логики, алгоритмов, кодирования и понимания естественного языка.
Опубликовано на обложке Scienceв нашей статье подробно описывается AlphaCode, который использует языковые модели на основе преобразователей для генерации кода в беспрецедентном масштабе, а затем разумно фильтрует небольшой набор перспективных программ.
Мы подтвердили свою эффективность с помощью соревнований, организованных на Codeforces, популярная платформа, на которой регулярно проводятся соревнования, привлекающие десятки тысяч участников со всего мира, приезжающих проверить свои навыки программирования. Мы выбрали для оценки 10 недавних контестов, каждый из которых новее наших тренировочных данных. AlphaCode оказался примерно на уровне среднего конкурента, что стало первым случаем, когда система генерации кода ИИ достигла конкурентоспособного уровня производительности в соревнованиях по программированию.
Чтобы помочь другим использовать наши результаты, мы выпустили набор данных о проблемах и решениях соревновательного программирования. на GitHub, включая обширные тесты, чтобы убедиться, что программы, прошедшие эти тесты, корректны — критически важная функция, которой не хватает в текущих наборах данных. Мы надеемся, что этот тест приведет к дальнейшим инновациям в решении проблем и генерации кода.
Соревновательное программирование — популярный и сложный вид деятельности; сотни тысяч программистов участвуют в соревнованиях по программированию, чтобы набраться опыта и продемонстрировать свои навыки в веселой и совместной форме. Во время соревнований участники получают серию длинных описаний задач и несколько часов на написание программ для их решения.
Типичные проблемы включают в себя поиск способов размещения дорог и зданий с определенными ограничениями или создание стратегий для выигрыша в пользовательских настольных играх. Затем участники ранжируются в основном на основе того, сколько задач они решают. Компании используют эти конкурсы в качестве инструментов для найма, и подобные проблемы часто возникают при найме инженеров-программистов.
«Могу смело сказать, что результаты AlphaCode превзошли мои ожидания. Я был настроен скептически, потому что даже в простых соревновательных задачах часто требуется не только реализовать алгоритм, но и (и это самое сложное) его придумать. AlphaCode справился выступать на уровне многообещающего нового конкурента. Не могу дождаться, чтобы увидеть, что ждет впереди!»
– Майк Мирзаянов, основатель Codeforces
Способности решать проблемы, необходимые для достижения успеха в этих соревнованиях, выходят за рамки возможностей существующих систем искусственного интеллекта. Однако, сочетая достижения в крупномасштабных моделях преобразователей (которые недавно продемонстрировали многообещающие возможности для генерации кода) с крупномасштабной выборкой и фильтрацией, мы добились значительного прогресса в ряде проблем, которые мы можем решить. Мы предварительно обучаем нашу модель на выбранном общедоступном коде GitHub и настраиваем ее на нашем относительно небольшом наборе данных для конкурентного программирования.
Во время оценки мы создаем огромное количество программ на C++ и Python для каждой задачи, на несколько порядков больше, чем предыдущая работа. Затем мы фильтруем, группируем и ранжируем эти решения до небольшого набора из 10 программ-кандидатов, которые отправляем на внешнюю оценку. Эта автоматизированная система заменяет конкурентный процесс проб и ошибок отладки, компиляции, прохождения тестов и, в конечном итоге, отправки.
С разрешения Codeforces мы оценили AlphaCode, смоделировав участие в 10 недавних конкурсах. Впечатляющая работа сообщества конкурентоспособного программирования создала область, в которой невозможно решать проблемы с помощью ярлыков, таких как дублирование решений, увиденных ранее, или опробование каждого потенциально связанного алгоритма. Вместо этого наша модель должна создавать новые и интересные решения.
В целом AlphaCode находится примерно на уровне среднего конкурента. Хотя это далеко не победа в соревнованиях, этот результат представляет собой существенный скачок в возможностях решения задач ИИ, и мы надеемся, что наши результаты вдохновят сообщество конкурентоспособного программирования.
«Решение задач конкурентного программирования — это действительно сложная задача, требующая от людей как хороших навыков кодирования, так и творческого подхода к решению задач. создавать код и направлять его случайные исследования для создания решений».
– Петр Митричев, инженер-программист, Google и профессиональный программист мирового уровня.
Чтобы искусственный интеллект мог помочь человечеству, наши системы должны быть способны развивать возможности решения проблем. AlphaCode входит в число 54% лучших на реальных соревнованиях по программированию, что демонстрирует потенциал моделей глубокого обучения для задач, требующих критического мышления. Эти модели элегантно используют современное машинное обучение, чтобы выражать решения проблем в виде кода, возвращаясь к основанию ИИ на основе символических рассуждений, существовавшему несколько десятилетий назад. И это только начало.
Наше исследование генерации кода оставляет обширные возможности для совершенствования и намекает на еще более интересные идеи, которые могут помочь программистам повысить свою производительность и открыть поле для людей, которые в настоящее время не пишут код. Мы продолжим это исследование и надеемся, что дальнейшие исследования приведут к инструментам для улучшения программирования и приблизит нас к ИИ для решения проблем.
Ознакомьтесь с решениями AlphaCode и изучите модель на alphacode.deepmind.com