Что случилось
AlphaCode протестировали на заданиях из десяти последних соревнований по программированию, организованных площадкой Codeforces. В режиме симуляции реального участника алгоритм смог занять место среди первых 54% рейтинга, что, как отмечают создатели, соответствует уровню среднего программиста. И если для человека это не самый выдающийся результат, то для искусственного интеллекта — огромный скачок. Именно в сфере программирования это первый случай, когда алгоритм смог «придумать» действительно новое и оригинальное решение, а не просто скомбинировать его из уже существующих вариантов.
В AlphaCode используется масштабируемая архитектура-трансформер — в таких моделях данные обрабатываются не по порядку (из начала в конец), а параллельно, что делает их более гибкими и обучаемыми. Появившись в 2017 году благодаря ученым из Google Research и Google Brain, эта архитектура стала главным трендом в машинном обучении. Например, подобная архитектура лежит в основе знаменитой языковой модели GPT-3, которая умеет генерировать осмысленные тексты, иногда — почти не отличимые от написанных человеком. И хотя изначально она была предназначена для обработки естественного языка (текста и голоса), сейчас её адаптировали под решение любых задач, в том числе и для написания программ.
«Навыки решения задач, которые требуются для успешного выполнения заданий на соревнованиях, находятся за пределами способностей существующих систем искусственного интеллекта. Однако благодаря комбинации из масштабируемых моделей-трансформеров (которые недавно показали многообещающие способности к генерированию кода) с масштабной выборкой и системой фильтров мы смогли добиться значительного прогресса […] который показал потенциал моделей глубокого обучения в задачах, требующих критического мышления. И это только начало», — пишут сотрудники DeepMind в своём блоге.
Как создавали модель и оценивали ее работу
В препринте подробно объясняется, как именно была создана и натренирована модель, а также рассказывается о том, какие вызовы стояли перед её авторами. Решение любой задачи подразумевает несколько этапов, каждый из которых для ИИ гораздо сложнее, чем для человека. Например, на первом этапе алгоритму нужно понять и проанализировать текстовое описание задачи, откинуть нерелевантную информацию и предположить, что должно получиться в итоге. Второй этап еще сложнее: придумать способ решения проблемы требует как знания большого числа алгоритмов и структур данных, так и способности к глубокому пониманию и размышлению о самой сути проблемы. Ранее считалось, что ИИ к такому не способен — так что результат AlphaCode можно назвать значительным скачком в когнитивных способностях ИИ.
В модель были загружены примеры кода из базы GitHub и относительно небольшой датасет задач из соревнований. Алгоритм обучили создавать большое число программ на языках C++ и Python для каждой задачи — причем их сложность повышалась с каждой итерацией — а затем отфильтровали и классифицировали результаты. Как говорят сами разработчики, у них получилось создать автоматизированный аналог процесса перебора возможных решений — через метод проб и ошибок.
10 лучших решений и были представлены для внешней экспертизы — в частности, работу алгоритма показали Михаилу Мирзаянову, основателю Codeforces, и Петру Митричеву, входящему в топ-10 лучших спортивных программистов мира. Оба они высоко оценили способности AlphaCode.
Почему алгоритм все-таки не заменит живых программистов
Однако о замене живых программистов автоматизированными системами в ближайшем будущем речи не идет. Скорее,такие системы могут стать инструментом для облегчения работы разработчикам и автоматизации некоторых процессов, например, перебора решений, устранения багов, компиляции и так далее.
Михаил Мирзаянов, основатель Codeforces, ассистент факультета информационных технологий и программирования ИТМО:
«Конечно, возможности AlphaCode производят впечатление. Система действительно может решать несложные задачи с соревнований по программированию. Это удивляет, ведь даже такие задачи требуют целого комплекса навыков и знаний. Но можно выдохнуть — пока не кажется, что машина заменит человека для более сложных задач даже в соревнованиях, не говоря уже о работе в индустрии. Следует помнить, что соревнования по программированию — тепличные условия для подобных исследований. Здесь есть формально поставленная задача, примеры работы и автоматизированная система оценивания. Я полагаю, что такие исследования скорее приведут не к замене программистов машинами, а изменят инструментарий современного программиста. Сместят акценты. Возможно, это будут встроенные в систему разработки "умные помощники", которые могут на себя брать ряд типовых действий и несложных задач».