TG Telegram Group Link
Channel: gonzo-обзоры ML статей
Back to Bottom
Пока я путешествую и обзоры писать некогда, давайте немного не про ML, а про историю криптографии.

Долгое время я считал, что немецкую шифровальную машину Энигма взломал Тьюринг, и "Бомбу" тоже построил он.

Впервые я узнал о том, что до Тьюринга были польские математики Генрик Зыгальский, Мариан Реевский и Ежи Ружицкий, из книги Turing's Vision от MIT Press. Потом уже и в Википедии обнаружил.

Они первые начали взламывать шифры Энигмы, Реевский первым создал свою Бомбу, а Тьюринг делал уже последующую для усложнённого шифра Энигмы.

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

Вот вам немного фото из этого прекрасного музея, включая Бомбу Реевского.
Sakana опять делает что-то интересное!

Our approach has two core innovations: (1) neuron-level temporal processing, where each neuron uses unique parameters to process a history of incoming signals for fine-grained temporal dynamics, and (2) neural synchronization, used as a direct latent representation to modulate data and produce outputs, encoding information directly in the timing of neural activity.

https://sakana.ai/ctm
[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.
Всё целиком оформлено как асинхронный пайплайн (спасибо питонячьему asyncio), где множество задач работают параллельно и дожидаются результата от предыдущих шагов, когда требуется. В пайплайне есть контроллер, LLM сэмплеры и узлы оценки. Всё оптимизировано под throughput, а не время выполнения одного конкретного вычисления. Максимизируют количество проверяемых идей за фиксированный вычислительный бюджет.

Это в целом всё, система не выглядит суперсложной. По сравнению с прерыдущими AlphaTensor, AlphaDev, FunSearch и т.п. всё больше “интеллекта” выносится на сторону LLM.

С FunSearch есть отдельное сравнение в таблице, если кратко, то три ключевых момента. FunSearch работал на уровне одной питоновской функции, здесь работа на уровне всей кодовой базы, сколько имеется, и не обязательно на питоне. У FunSearch была одна objective function, здесь же многокритериальная оптимизация. Наконец, внутри FunSearch были довольно маленькие LLM, обученные на коде, а здесь одна из лучших фронтирных моделей.

Итак, применили AlphaEvolve к различным задачам.

Например, поиск декомпозиции тензора для нахождения способа перемножения матриц, та же самая задача, которую решал узкоспециализированный AlphaTensor, подробнее про саму задачу рекомендую прочитать в оригинальном посте. Стартовали со стандартного градиентного алгоритма, включающего инициализатор, лосс функцию для реконструкции тензора, и оптимизатор Adam. С этой стартовой точки AlphaEvolve вывел новый алгоритм и улучшил SoTA результаты для матричных умножений 14 разных размеров ⟨𝑚, 𝑛, 𝑝⟩. Интересно, что в таблице заявлено улучшение для размера ⟨4, 4, 4⟩, где получили 48 скалярных умножений вместо 49. AlphaTensor правда получал 47, но там была модульная арифметика, а здесь это число для комплексной.

Другое направление включало 50 математических задач из анализа, комбинаторики, теории чисел и геометрии, где надо было находить объекты или делать построения с определёнными свойствами, оптимальными или около-оптимальными по некоторой мере. В 75% случаев AlphaEvolve переоткрыл известное лучшее решение, в 20% улучшил его. Во всех случаях стартовали со случайного или простого решения. По сравнению с классическими подходами AlphaEvolve более универсален и не требует какого-то особого затачивания на конкретную задачу, он сам способен обнаружить эффективные паттерны для поиска решения, что открывает дорогу к широкомасштабному исследованию разных задач. Здесь мы имеем сильно улучшенный FunSearch.

Главная методологическая инновация здесь -- это способность выводить (в смысле эволюционировать) эвристические алгоритмы поиска, вместо того чтобы сразу выводить сами построения. В частности использовалась стратегия итеративного улучшения, когда на каждом шаге алгоритму давали лучшее решение предыдущего шага и фиксированный бюджет (1000 секунд), и модель должна была найти более хорошее построение. Так отбирались эвристики, способные улучшать уже найденные хорошие решения, и финальное построение являлось результатом цепочки различных специализированных эвристик -- ранние специализировались на улучшении простых или случайных начальных состояний, поздние на файнтюнинге околооптимальных решений.

Найденные математические результаты и результаты тензорных декомпозиций собраны в колабе.

Применили AlphaEvolve и к инфраструктурным задачам Гугла -- шедулингу задач на кластере, управляемом Borg. Там надо было раскидывать задачи по машинам с учётом доступности и требований по CPU/memory. Функция должна была выдавать priority score для каждой машины под текущую задачу. AlphaEvolve нашёл эвристику, улучшившую текущую эвристику Гугла в продакшне, что привело к экономии 0.7% ресурсов. В отличие от результатов DRL это ещё и проще и понятнее.
В другой задаче применили AlphaEvolve в нахождении эвристики для тайлинга при матричном умножении, используемом в кернелах для Gemini. Здесь надо эффективно работать на входных матрицах разных размеров. Получили ускорение в 23% относительно ручного кернела и сократили время обучения Gemini на 1%. В масштабах Гугла неплохо. Кроме того, вместо месяцев ручной оптимизации потратили дни автоматической. Пример, когда хороший AI позволяет делать ещё более хороший AI быстрее, ускоряем экспоненту.

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

Ещё применили к имплементации FlashAttention на Pallas+JAX. Работали напрямую с низким уровнем, результатом компиляции XLA -- intermediate representations (IR). Результат оптимизации проверили на корректность, по скорости добились улучшения в 32% на ядре и дополнительных 15% на пре/пост-процессинге. В целом отсюда дорога ко включению в конечном счёте AlphaEvolve в компиляторы.

На матричных умножениях и одной математической задаче сделали абляции. Каждый из компонентов: эволюционный подход, добавление большого контекста, мета-промптинг, эволюция полного файла вместо отдельных строк, использование больших LLM в дополнение к малым (видимо, Pro в дополнение ко Flash) -- всё улучшает результат.

В общем всё прикольно. Ранние эксперименты с использованием LLM для управления поиском и подобное (типа FunSearch) меня не так впечатляли, но теперь результат прям хорош. У нас сейчас в очередной раз происходит какой-то level-up в универсальности. За последние лет десять революции deep learning мы активно двигались от очень специальных однозадачных решений ко всё более общим. Например, картиночные классификаторы сначала было хорошо обучать на конкретную задачу, и мы учили все эти vgg и resnet’ы на закрытом наборе классов. Через некоторое время оказалось, что есть модели, на которых можно уже делать классификацию по открытому набору классов и вообще собирать классификаторы без обучения на уже предобученных моделях (хоть на CLIP). Потом оказалось, что и картиночные модели можно уже не иметь, теперь VLM умеют очень многое, а создание нового решения ещё больше упрощается -- пиши себе промпты и объясняй что нужно нормальным английским языком. Вот здесь с математикой и оптимизациями так же. Были очень специальные модели (AlphaTensor), появились чуть более общие с LLM (FunSearch), а в нынешней итерации они ещё более общие.

Экспертные знания и умения по оптимизации тоже продолжают вытесняться умными алгоритмами, как оно и было весь путь от прихода нейросетей в computer vision. Непонятно, через 3-5 лет кому-нибудь ещё нужно будет вручную заниматься оптимизацией кернелов? Сколько сейчас на земле людей, способных это сделать? И сколько будет? И явно это не предел, будут и ещё более умные блоки, которым просто объясняй что нужно, а то и не объясняй, сами догадаются. Интересно, как бы результаты AlphaEvolve изменились от включения туда Gemini 2.5 вмеcто 2.0. Любопытный был бы не ablation, а такой substitution.

Можно также это всё рассматривать как вариант test-time compute. Какая по большому счёту разница, запускаем мы там ризонинг поверх LLM, какой-то развесистый Tree-of-Thought, или эволюцию? Эволюция явно круче сэмплинга. Что если сделать дистилляцию AlphaEvolve-аугментированной LLM в обычную LLM? А заодно попросить оптимизировать все процессы обучения и инференса этой модели (как собственно уже было сделано в текущей работе для Gemini и шедулинга задач)? Богатые богатеют, экспоненциальные экспоненциируют.

А ещё ведь наверняка можно и более специализированных агентов добавить в такую систему, и с более качественной критикой, и с большими доменными знаниями. Уух, следующая версия AlphaEvolve может быть вообще бомбой. Возможно, это будет своеобразное слияние с AI co-scientist, там не было эволюции кода, был сплошной язык (и риск галлюцинаций), но зато была мультиагентность.
HTML Embed Code:
2025/07/05 03:57:20
Back to Top