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