[DeepMind] AlphaEvolve: A coding agent for scientific and algorithmic discovery
Alexander Novikov, Ngân Vu, Marvin Eisenberger, Emilien Dupont, Po-Sen Huang, Adam Zsolt Wagner, Sergey Shirobokov, Borislav Kozlovskii, Francisco J. R. Ruiz, Abbas Mehrabian, M. Pawan Kumar, Abigail See, Swarat Chaudhuri, George Holland, Alex Davies, Sebastian Nowozin, Pushmeet Kohli and Matej Balog
Статья
Пост
AlphaEvolve -- это coding agent агент, оркестрирующий пайплайн с вызовами LLM и выдающий алгоритм, решающий заданную пользователем задачу. Внутри процедуры оркестрации работает эволюционный алгоритм, постепенно создающий программы, улучшающие скор на автоматических метриках для заданной задачи.
Пользователь должен предоставить механизм автоматической оценки генерируемых решений -- это Python функция evaluate()
, мапящая решение в набор скалярных метрик для оценки, которые надо максимизировать. Она может быть как простой и лёгкой, отрабатывающей за доли секунды, так и очень тяжёлой, включающей, например, распределённое обучение сети. Соответственно, задачи требующие ручного экспериментирования, остаются здесь за бортом, текущая версия работает для того, что может быть автоматически оценено.
AlphaEvolve предоставляет API, куда можно отправить код, где часть требующая улучшения помечена комментариями # EVOLVE-BLOCK-START
и # EVOLVE-BLOCK-END
. Где-то там же в коде находится и функция evaluate()
, как и всё остальное, необходимое для связывания всех частей программы воедино.
Эволюционируемая программа не обязана быть финальным результатом, она может быть средством его достижения. Например, найденное решение может быть просто строкой (как часто бывает в эволюционных алгоритмах); функцией определённого вида, определяющей как должно быть создано решение; уникальным поисковым алгоритмом, могущим найти решение при заданном ограниченном бюджете; или ещё чем-то более сложным. Специфика задачи может влиять на выбор подхода, например, для проблем с очень симметричными решениями авторы советуют выводить функции-конструкторы, они получаются более краткими.
Внутри AlphaEvolve и его эволюционного цикла работают несколько компонентов.
Prompt sampler отвечает за шаблоны промптов, включая системные инструкции, а также вставляет в промпт предыдущие найденные решения, засэмпленные из базы программ. Здесь можно многое произвольно расширять: добавлять явные инструкции от пользователя, стохастическое форматирование с заданными извне распределениями, рендеринг результатов оценки, эволюционировать мета-промпт.
Ансамбль LLM, в статье комбинация Gemini 2.0 Flash и Gemini 2.0 Pro, используется для креативной генерации. Такой микс даёт возможность быстрой генерации множества гипотез через Flash и более качественные рекомендации от более медленной Pro. В целом система model-agnostic, можно использовать разное. LLM просят генерить изменения в коде в виде серии диффов, какой блок кода заменять на какой. Но можно и просить заменять код целиком, если так удобнее.
Evaluation содержит в себе набор оценщиков. В простом случае надо вызывать переданную пользователем функцию evaluate()
. В реальности есть также различные опциональные добавки: каскады от более простых примеров к более сложным; фибдек от LLM, когда проще описать желаемые свойства решения, нежели оценивать; параллелизация оценки. Может считаться сразу множество метрик (функция evaluate()
может возвращать несколько) и авторы утверждают, что даже если важна только единственная метрика, оптимизация по множеству метрик даёт лучше результат. Что мне немного удивительно, потому что в многокритриальной оптимизации вроде как не всё так просто, и редко когда получается увеличивать сразе все метрики, или хотя бы не ухудшать остальные при увеличении одной.
База программ или evolutionary database, хранящая найденные решения и оценки их качества. Здесь важно балансировать exploration и exploitation, так что база реализует алгоритм вдохновлённый комбинацией MAP elites и island-based population models.
>>Click here to continue<<