ИИ Deepmind изучает искусство кодирования
Грегори Барбер
В области информатики, пожалуй, нет более фундаментальной задачи, чем сортировка. Пузырь, куча, слияние — выбирайте сами. Методы изменения порядка данных внутри компьютера были тщательно выработаны в теории, служили практическими упражнениями для миллионов новичков и десятилетиями оптимизировались опытными разработчиками. Введите функцию sort() на любом языке программирования, и вы сможете положиться на ее код. Не трогай это. Это уже отлично работает.
Но в прошлом году система искусственного интеллекта, разработанная инженерами Google Deepmind, значительно улучшилась настолько, что стала иметь значение. Перед системой, которую Deepmind называет AlphaDev, была поставлена задача разработать новый способ сортировки коротких последовательностей чисел на C++, популярном языке программирования. Это означало, что нужно заглянуть под капот и заставить ИИ создавать новые алгоритмы в ассемблерном коде — инструкции, которые устраняют разрыв между такими языками программирования, как C++, и компьютерным оборудованием. Когда разработчик C++ приказывает компьютеру «сортировать», эти команды преобразуются в машиночитаемый код, который точно сообщает памяти и процессору компьютера, что делать: куда переместить данные и как их изменить. Это место, где биты встречаются с металлом.
Эксперимент удался. С апреля прошлого года C++ работает немного быстрее благодаря новому набору алгоритмов сортировки, придуманных ИИ. Но по словам инженеров AlphaDev, которые описали сегодняшнюю работу в журнале Nature, это только первый шаг. «Мы хотим оптимизировать весь стек вычислений», — говорит Дэниел Манковиц, научный сотрудник Deepmind, который руководил проектом сортировки. Манковиц говорит, что AlphaDev уже улучшила алгоритмы не только для сортировки, но и для других базовых задач, таких как хеширование.
«Я думаю, что эта работа невероятно интересна», — говорит Армандо Солар-Лезама, эксперт по синтезу программ в Массачусетском технологическом институте, который не участвовал в исследовании. Полезно, чтобы ИИ придумал новый алгоритм сортировки; Гораздо сложнее создать ИИ, который сможет научиться писать современный код для решения самых разных задач, говорит он. Это означает, что AlphaDev начала изучать что-то более фундаментальное в искусстве кодирования.
Конечно, это сопряжено со значительными ограничениями. «Это крошечные, крохотные программы», — добавляет он, — всего они содержат не более нескольких десятков инструкций в ассемблерном коде. Но эти крошечные программы часто представляют собой серьезные узкие места для производительности компьютера, поскольку они оптимизированы настолько, насколько это возможно. В целом, новые алгоритмы сортировки C++ от AlphaDev на 1,7 процента эффективнее предыдущих методов при сортировке длинных последовательностей чисел и до 70 процентов быстрее для последовательностей из пяти элементов. По словам Манковица, в масштабе эти улучшения суммируются. Поскольку код, написанный ИИ, был отправлен в Libc++, крупную библиотеку с открытым исходным кодом для C++, по его оценкам, алгоритмы использовались триллионы раз в день.
Эти улучшения стали возможными благодаря методике, называемой обучением с подкреплением. Это тот же подход, который помогает ИИ Deepmind освоить такие игры, как шахматы и го. Этот тип ИИ учится на практике. Он работает, рассматривая данную задачу — например, написание ассемблерной программы — как игру, в которой ИИ получает вознаграждение за умные действия, повышающие эффективность программы. Со временем система работает над максимизацией этой награды, что приводит к выигрышной стратегии Го или более быстрой программе сборки. Это отличается от искусственного интеллекта, используемого в больших языковых моделях, таких как GPT-4, которые полагаются на огромные объемы данных, чтобы научиться писать слова или код. Это отлично подходит для написания текстов, отражающих тон Интернета, или для создания общих сегментов кода. Но он не так хорош в создании новых, современных решений проблем кодирования, с которыми ИИ никогда раньше не сталкивался.
Джереми Уайт
Эмили Маллин
ПРОВОДНОЙ персонал
Уилл Найт
Подобно игре в шахматы или го, написание ассемблерного кода — сложная, открытая задача со множеством потенциальных ходов и множеством способов облажаться. Современные языки программирования, такие как C++ или Python, маскируют мельчайшие детали перемещения данных с помощью коротких команд, которые отражают человеческий язык. В 1950-х годах, когда появились такие языки «высокого уровня», некоторые считали, что проблема программирования в основном решена. До этого программирование, по сути, сводилось к ассемблеру — настолько, что Фортран, один из первых языков высокого уровня, изначально позиционировался как «система автоматического кодирования Фортрана», поскольку его команды всегда транслировались в работающий ассемблерный код. «Фортран собирался писать код лучше, чем люди, и без ошибок», — говорит Солар-Лезама. «Сегодня это звучит смешно. Но это была правда».