AlphaCode от DeepMind побеждает кодирование, работая так же хорошо, как люди

Исходный узел: 1771464

Секрет хорошего программирования может состоять в том, чтобы игнорировать все, что мы знаем о написании кода. По крайней мере, для AI.

Это кажется абсурдным, но новый кодирующий ИИ DeepMind только что победил примерно 50 процентов программистов-людей в высококонкурентном соревновании по программированию. На первый взгляд задачи кажутся относительно простыми: каждому программисту предлагается задача на повседневном языке, и участникам нужно написать программу, которая решит задачу как можно быстрее и, надеюсь, без ошибок.

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

В программистах ИИ нет ничего нового. Еще в 2021 году некоммерческая исследовательская лаборатория OpenAI выпустила Кодекс, программа, владеющая более чем дюжиной языков программирования и настроенная на естественный, повседневный язык. Что устанавливает выпуск ИИ DeepMind — дублированный АльфаКод—apart отчасти это то, что ему не нужно.

В отличие от предыдущих программистов ИИ, AlphaCode относительно наивен. У него нет никаких встроенных знаний о синтаксисе или структуре компьютерного кода. Скорее, он учится примерно так же, как малыши, схватывающие свой первый язык. AlphaCode использует подход «только данные». Он учится, наблюдая за сегментами существующего кода, и в конечном итоге способен гибко деконструировать и комбинировать «слова» и «фразы» — в данном случае фрагменты кода — для решения новых проблем.

При вызове CodeContest — мучительной битвы соревновательного программирования — ИИ решил около 30 процентов проблем, победив половину человеческих конкурентов. Вероятность успеха может показаться ничтожной, но это невероятно сложные проблемы. Codex OpenAI, например, добился однозначного успеха, когда столкнулся с аналогичными тестами.

«Это очень впечатляет, производительность, которую они могут достичь в некоторых довольно сложных задачах», — сказал Доктор Армандо Солар-Лезама из Массачусетского технологического института, который не участвовал в исследовании.

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

Возможно, что еще более важно, AlphaCode прокладывает путь к новому способу разработки кодеров ИИ: забудьте прошлый опыт и просто прислушивайтесь к данным.

«Может показаться удивительным, что у этой процедуры есть шанс создать правильный код», — сказал доктор Дж. Зико Колтер из Университета Карнеги-Меллона и Центра искусственного интеллекта Bosch в Питтсбурге, который не участвовал в исследовании. Но что показывает AlphaCode, так это то, что «при наличии надлежащих данных и сложности модели может возникнуть согласованная структура», даже если вопрос о том, действительно ли ИИ «понимает» поставленную задачу, остается спорным.

Язык для кода

AlphaCode — это последняя попытка использовать ИИ для создания лучших программ.

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

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

Трудная часть — перевести все это в ИИ, особенно при вводе, казалось бы, простого запроса: сделай мне горячий шоколад.

Еще в 2021 году Codex впервые приступил к написанию кода ИИ. Идея команды состояла в том, чтобы положиться на GPT-3, программу, которая покорила мир своим умением интерпретировать и имитировать человеческий язык. С тех пор он вырос в ChatGPT, весело и не такой уж и злой чат-бот, который ведет удивительно запутанные и восхитительные разговоры.

Так в чем смысл? Как и в случае с языками, кодирование основано на системе переменных, синтаксисе и структуре. Если существующие алгоритмы работают для естественного языка, почему бы не использовать аналогичную стратегию для написания кода?

ИИ кодирует ИИ

AlphaCode использовал этот подход.

ИИ построен на модели машинного обучения под названием «большая языковая модель», которая лежит в основе GPT-3. Важным аспектом здесь является большое количество данных. GPT-3, например, получил миллиарды слов из онлайн-ресурсов, таких как цифровые книги и статьи из Википедии, чтобы начать «интерпретацию» человеческого языка. Codex был обучен на более чем 100 гигабайтах данных, взятых из Github, популярной онлайн-библиотеки программного обеспечения, но все же потерпел неудачу, столкнувшись со сложными проблемами.

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

Во-первых, это обучающие данные. В дополнение к обучению AlphaCode на коде Github, команда DeepMind создала собственный набор данных CodeContests из двух предыдущих наборов данных с более чем 13,500 XNUMX задачами. Каждый из них сопровождался объяснением поставленной задачи и несколькими возможными решениями на разных языках. Результатом является массивная библиотека обучающих данных, адаптированных к поставленной задаче.

«Возможно, самый важный урок для любой системы ML [машинного обучения] заключается в том, что ее следует обучать на данных, которые аналогичны данным, которые она увидит во время выполнения», — сказал Колтер.

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

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

Система работала на удивление хорошо. Столкнувшись с новым набором проблем, AlphaCode выдает потенциальные решения на двух вычислительных языках — Python или C++ — и отсеивает возмутительные. В сравнении с более чем 5,000 участников-людей ИИ превзошел примерно 45% опытных программистов.

Новое поколение программистов ИИ

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

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

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

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

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

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

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

Колтер выразился лучше всего: «AlphaCode бросила жребий. Наборы данных общедоступны. Посмотрим, что нас ждет в будущем».

Изображение Фото: Pexels от Pixabay

Отметка времени:

Больше от Singularity Hub