Google разогнал свой искусственный интеллект до уровня программиста-джуна
Искусственный интеллект Google DeepMind AlphaCode смог написать функциональный программный код без понимания, что такое алгоритм. Результативность ИИ оценили на уровне начинающего программиста.
На «джуна» сгодится
Искусственный интеллект AlphaCode, разработанный подразделением Google DeepMind, самостоятельно решил задачи по программированию с минимальным объемом входных данных. Качество получившегося кода, однако, примерно соответствовало уровню начинающего программиста.
В недавнем номере журнала Science исследователи DeepMind отметили, что их система оказалась способна самостоятельно писать программный код, не обладая структурной информацией об алгоритмах или программном языке, что несколько удивило разработчиков. В то же время, система справилась с поставленной задачей отнюдь не наилучшим образом.
Программисты-люди предлагали более оптимизированные решения, и в соревновании с ними ИИ-программист по общему зачету финишировал, как пишет Ars Technica, «примерно посередине». Проблемы у него начались, когда возникла задачи по масштабированию. ИИ хуже справлялся с задачами, решение которых требовало большой объем кода.
Стереть влево
Изначальная задача, поставленная перед ИИ и программистами-людьми, заключалась в следующем. Даны две строки символов, одна длиннее, другая короче; необходимо определить, можно ли превратить более длинную строку в более короткую, если просто заменить часть нажатий клавиш, с помощью которых создана более длинная строка, на нажатия одной и той же клавиши Backspace («Стереть влево»).
Далее предложенные программы проверяются на предмет того, дают ли они общее решение и продолжают ли работать с другими предложенными комбинациями строчек.
Если предложить ИИ большое количество примеров программ, решающих одну конкретную проблему, ИИ сможет распознать структуру алгоритма, который также позволит решить такую задачу. Но о каком-либо генерализованном решении речи идти не будет: ИИ, обученный решать конкретную проблему, не справится с другой, не связанной с ней задачей.
Поэтому исследователи подошли к вопросу с другой стороны. В определенном смысле описание задачи (на обычном языке) — это выражение того, что должен делать алгоритм. Программный код также является таким выражением, но на другом языке (программном). ИИ DeepMind был запрограммирован таким образом, чтобы осуществлять два процесса — обрабатывать описание на обычном языке и преобразовывать его в понятный для себя вид (внутреннее представление), а затем на основе этого внутреннего представления производить функциональный программный код.
Обучение системы также было двухэтапным процессом: на первой стадии ИИ предложили обработать 700 гигабайт программного кода, собранного из репозиториев GitHub. Этот код, естественно, содержал комментарии на естественном языке, описывающие, какую задачу тот или иной фрагмент кода должен выполнять.
Фильтрация
После прохождения этой стадии началась донастройка системы. Подразделение DeepMind организовало собственные состязания по программированию, и ИИ предъявлялись их результаты: описание проблемы, рабочий код, некорректный код и сценарии проверки эффективности написанных программ.
Подобные подходы реализовались и в прошлом, однако в DeepMind отметили, что речь шла лишь о том, чтобы максимизировать ресурсы, необходимые для обучения ИИ. «Ключевым фактором результативности AlphaCode явилось увеличение количества предлагаемых моделей. По сравнению с предыдущими экспериментами — на несколько порядков», — говорится в исследовании.
Система могла быть использована для предложения сразу множества программных решений, но масштабирование обработки этих возможных решений сказалось довольно значительно. Сам по себе полученный код не обязательно был оптимален. Более 40% предложенных решений грозили израсходовать всю память системы, на которой их тестировали, либо просто не могли справиться с задачей за разумное время.
При первичной фильтрации кода, сгенерированного AlphaCode, базовую проверку прошел только 1% того, чтобы предложил ИИ.
На втором этапе фильтрации разработчики исходили из того, что рабочие решения, обладающие эффективным программным кодом будут выглядеть сходным образом, а следовательно в общем массиве кода будут сгруппированы в кластер по признакам сходства.
В то же время неправильные ответы (нерабочие решения) будут выглядеть по-разному и распределены в общем массиве случайным образом.
Система выявила 10 крупнейших кластеров сходного кода, дававшего примерно одни и те же результаты в ответ на заданные запросы, и выбрала по одному примеру из каждого кластера.
В результате примерно лишь в трети случаев получались успешно работающие программы.
Люди, впрочем, тоже не всегда способны выдать рабочий код, решающий поставленные задачи, так что в итоге AlphaCode оказался в числе «первых 54%» среди участников состязаний. В конечном счете, более половины программистов-людей справлялись с написанием кода лучше машины.
Как написали исследователи, результативность ИИ можно сравнить с работой программиста-новичка, который учился писать код в течение нескольких месяцев, но не более года.
Огромные затраты
Обучение ИИ программированию, однако, оказалось очень ресурсоемкой задачей: затраченная производительность составила 2000 петафлопс, количество потребленной электроэнергии в 16 раз превысило тот объем, который среднее домохозяйство в США тратит за год. Чтобы достичь вышеуказанной результативности, системе потребовалось проанализировать 100 тыс. отдельных решений, предложенных ИИ. Десятикратное масштабирование привело к линейному увеличению энергозатрат и объема производимых вычислений: AlphaCode может давать более эффективные результаты, но затраты энергии и вычислительных мощностей очень быстро становятся непрактично высокими.
С другой стороны, очевидно, что система работает должным образом, производя внутреннее преобразование заданной проблемы в решение, а не просто выдавая рандомные фрагменты кода, которые то ли сработают, то ли нет.
При этом разные решения AlphaCode содержали примерно такое же количество общего кода, как и однотипные разработки от разных программистов. Как только задача усложнялась, результативность машины резко падала.
В общем и целом, на данный момент программистам незачем беспокоиться, что их заменит ИИ: для того, чтобы создать «идеального робота-программиста», нужны недоступные и неоправданные вычислительные мощности.
«На данный момент ИИ действительно не в состоянии составить реальную конкуренцию программистам-людям, когда речь идет о каких-то сложных задачах, — указывает Дмитрий Гвоздев, генеральный директор компании “Информационные технологии будущего”. — В ближайшее время на ИИ будут в лучшем случае сбрасывать простые и рутинные задачи, в то время как более креативные проблемы все равно предстоит решать людям. Но с появлением реально работающих квантовых компьютеров коммерческого уровня ситуация может поменяться радикально: тогда можно будет уже говорить о вполне реальном искусственном интеллекте, а не просто о машинном обучении».
Самым важным исследователи считают именно то, что AlphaCode вообще не обучали тому, что собой представляет алгоритм, и не предоставляли никаких его примеров. Осталось также неизвестным, содержалось ли во внутренней интерпретации искусственным интеллектом поставленной ему задачи что-либо, что можно считать алгоритмом. Тем не менее, машина смогла произвести функциональный код — через структуры, очень похожие на те, которые ИИ использует для языкового перевода.
Исследователи отмечают, что было бы интересно сравнить это с тем, что мы знаем об обработке задач по программированию человеческим мозгом.