Многообразие якобы универсальных алгоритмов: бесплатных обедов не бывает, универсальности нет
Когда-то я сильно задумывался о мотиве, который заставил делать огромный труд с JuMP как библиотекой оптимизации (https://jump.dev/): откуда вообще берётся задача собрать огромное количество методов оптимизации? Их только в Julia больше двухсот – JuliaHub. Фишка собирания всех этих методов в библиотеке ровно в том, что есть огромное число частных случаев, для которых есть эффективные алгоритмы. Ибо работает теорема отсутствия бесплатного обеда: не бывает универсально эффективного алгоритма, так что будет процветать зоопарк алгоритмов, которые как-то будут покрывать известные частные случаи.
На прошлой неделе возник вопрос: почему именно на Julia надо писать DSL через макросы? Этот диалог случился в чате Julia с Telegram: Contact @JuliaLanguage. Краткий ответ такой: обсуждалось, что поддержка DSL появилась с 2017 года, версии 0.6, Creating domain-specific languages in Julia using macros. Были доработки компилятора Julia, ибо без этого не работали цифровые двойники – 1D моделирование, которое требовало акаузальности, то есть использования DAE (differential algebraic equations) против компиляторов для ODE (odinary differential equations in state space form) Цифровые двойники: физика ведёт математику, математика ведёт компьютерную науку: ailev — LiveJournal (тут ссылки на теоретические работы с описанием проблем, типа [2008.05166] The Mathematical Foundations of Physical Systems Modeling Languages). Решение в компиляторе – это тренд с использованием “языка” mDAE вместо ODE для физического моделирования похож на создание разных языков программирования для решения expression problem в самой computer science (Expression problem - Wikipedia, The Expression Problem and its solutions - Eli Bendersky's website, объяснение “на пальцах” The unreasonable effectiveness of the Julia programming language | Ars Technica). Суть этой expression problem ровно в том же: разработка библиотек универсальных вычислительных элементов требует от языков программирования и реализующих их компиляторов возможности добавлять новые объекты для старых операций и новые операции для старых объектов, чтобы не нужно было переписывать весь код программы. В mDAE против ODE так же, только мы протягиваем обсуждение программных объектов и операций до моделируемых физических сущностей: или ты делаешь язык, на котором разные функциональные объекты описываются разными наборами уравнений, и просто добавляешь эти модели друг ко другу, или в языке у тебя такой возможности нет. Если не решил эту “model expression problem”, то тебе нельзя сделать стандартные библиотеки, оформляющие стандартные поведения функциональных объектов. Знания моделей становятся плохо переносимыми между моделями, модели плохо модифицируемыми – каждый раз при внесении изменений нужно переписывать и перекомпилировать всю модель. Потом это было ещё и докручено в JuliaSim до Neural Surrogates с DigitalEcho (Modelica Conference 2023 - ConfTool Pro - BrowseSessions) по JuliaSim’s (JuliaSim - JuliaHub) DigitalEcho (Overview · JuliaSimSurrogates). JuliaSim – коммерческий продукт, но базируется на библиотеке ModelingToolkit – GitHub - SciML/ModelingToolkit.jl: An acausal modeling framework for automatically parallelized scientific machine learning (SciML) in Julia. A computer algebra system for integrated symbolics for physics-informed machine learning and automated transformations of differential equations. ModelingToolkit.jl is a modeling framework for high-performance symbolic-numeric computation in scientific computing and scientific machine learning. It allows for users to give a high-level description of a model for symbolic preprocessing to analyze and enhance the model. ModelingToolkit can automatically generate fast functions for model components like Jacobians and Hessians, along with automatically sparsifying and parallelizing the computations. Automatic transformations, such as index reduction, can be applied to the model to make it easier for numerical solvers to handle.
Что вообще нам известно о многообразии алгоритмов? Вот только некоторые темы:
– теорема несуществования бесплатного обеда/no free lunch theorem, No free lunch in search and optimization - Wikipedia, про неё хорошо рассказано у Педро Домингоса в The Master Algorithm. По идее, если и есть “универсальный алгоритм” (интеллект), то он будет решать все задачи, но теорема бесплатного обеда говорит, что универсального одного алгоритма не будет, ибо какие-то новые виды задач всё одно придётся решать другими алгоритмами. Надо понимать, что “другими, включая аппаратуру”, ибо “аппаратура” – квантовая, оптическая, классическая – это просто алгоритмы с их разной эффективностью для разных типов задач.
– проект CYC с его идеей “ускорителей” и полным отказом от “главного ускорителя” (вот доклад Douglas Lenat, 2022, Машинный интеллект на начало февраля 2022: до сих пор непонятно, как оценивать прогресс: ailev — LiveJournal). Для меня это проявление того же самого.
– bitter lesson от Sutton (The Bitter Lesson) по факту про “универсальный аппроксиматор”, который будет хоть как-то эмулировать самые разные функции, в этом его универсальность – и дальше необходимость роста вычислительной мощности для такой “универсальности”, только для того, чтобы закрывать всё большие и большие классы задач, но потом всё одно упираться в стену эффективности. Нейросеть – это как раз один из подобных ускорителей. Почему нейросеть успешна? Потому что она хоть как-то аппроксимирует всё, включая классический компьютинг, квантовый компьютинг и всё остальное. Мозг (нейросеть) работает и быстро с S1, и медленно переходит на виртуальную “наложенную” сеть.
Современные нейросетевые архитектуры могут решить только часть задач, которые могут решить люди
Есть ещё одна интересная линия: оптимизация порождает множество одинаковых примерно решений, это объясняется “неустроенностью” (frustration, не психологическая, а geometric) в пространствах решений для многоуровневой (системной!) оптимизации. Это хорошо объясняется в работе “Physical foundations of biological complexity”, https://www.pnas.org/doi/10.1073/pnas.1807890115. Переход от “неустроенности” одного уровня оптимизации к следующему бывает редко, это будет результат довольно долгой эволюции, а на новом уровне опять случится “неустроенность”, множество самых разных решений с примерно одинаковой эффективностью.
Это всё хорошо наблюдать на примере того самого The Master Algorithm, то есть нахождении “универсальной нейросети или чего-то такого, которое бьёт все тесты”. В этом и фишка, что реляции о победе нынешнего поколения нейросетей (хоть трансформерных, хоть мамбовых) не совсем верны: нынешние расхожие бенчмарки закрывают только некоторую часть задач, с которыми справляется а хоть и тот же человеческий интеллект. Вот пример нескольких бенчмарков, с которыми нынешние алгоритмы AI не справляются, и это направление эволюции. Надо, чтобы алгоритмы закрывали эти задачи “хоть как-то”, про быстрое решение пока и не говорим:
– GPQA: A Graduate-Level Google-Proof Q&A Benchmark, [2311.12022] GPQA: A Graduate-Level Google-Proof Q&A Benchmark. We present GPQA, a challenging dataset of 448 multiple-choice questions written by domain experts in biology, physics, and chemistry. Experts who have or are pursuing PhDs in the corresponding domains reach 65% accuracy (74% when discounting clear mistakes the experts identified in retrospect), while highly skilled non-expert validators only reach 34% accuracy, despite spending on average over 30 minutes with unrestricted access to the web (i.e., the questions are “Google-proof”). GPT-4 based baseline achieving 39% accuracy.
– GAIA: a benchmark for General AI Assistants, [2311.12983] GAIA: a benchmark for General AI Assistants. We introduce GAIA, a benchmark for General AI Assistants. GAIA proposes real-world questions that require a set of fundamental abilities such as reasoning, multi-modality handling, web browsing, and generally tool-use proficiency. GAIA questions are conceptually simple for humans yet challenging for most advanced AIs: we show that human respondents obtain 92% vs. 15% for GPT-4 equipped with plugins.
– и я продолжаю повторять, что остаётся в силе и бенчмарк Chollet, соревнование и данные ARCathon 2023 – Lab42, базовая статья аж 2019 года — [1911.01547] On the Measure of Intelligence. Although humans typically achieve an 80% success rate in solving ARC tasks, existing algorithms have only managed to reach 30.5%, which stands as the current world record achieved through the combination of various algorithms specifically designed for ARC. Вот Chollet недавно добавил литературы про принципиальные недостатки текущей архитектуры LLM: https://twitter.com/fchollet/status/1736079054313574578
Какие архитектуры AI-агентов сейчас на слуху?
И вот тут можно ожидать нескольких вариантов развития событий, и там будет “неустроенность” примерно равных по силе вариантов:
– подход многоходовых вариаций через LLM/LLM programs, Telegram: Contact @gonzo_ML (по ссылке обзор статьи “PathFinder: Guided Search over Multi-Step Reasoning Paths”, и в начале обзора огромное количество ссылок). Это путь, который был чётко сформулирован John Sowa: LLM галлюцинирует, поэтому не может быть главной, так что будет какой-то алгоритм на традиционном языке (фреймворк) программирования, и вот этот алгоритм будет держать в узде LLM, вызывая её по потребности. То есть LLM тут – библиотека, когда надо, тогда к ней обращаются. А логика? Ну, в каких-то ходах LLM будет и “логикой”, крайне неэффективной. Ровно как на классическом вычислителе можно запустить виртуальную машину (иногда быструю, а иногда крайне медленную), так и в рамках нейронной сети можно запустить “виртуальную машину” по факту произвольной архитектуры — в том числе и с архитектурой, преодолевающей недостатки архитектуры самой нейросети, какую-нибудь “логику”. Крайне неэффективно (эмуляция прувера на нейросети), время от времени с ошибками, но будет работать – вот ровно как люди. Человеческий мозг неэффективно, и с помощью внешней памяти (ручка-бумажка), но может перемножать десятизначные числа, что его нейросетевая архитектура может делать только путём такого “наложенного на нейросеть виртуального вычислителя”. Даниэль Канеман называл это системами S1 для быстрого прямого нейровычисления и S2 для наложенного логического формального вычисления.
– победит подход как в CYC (множество “ускорителей”, ни один из них не главный). То есть LLM как один из участников веселья. Но и какой-нибудь knowledge graph prover один из участников веселья, никто не главный.
– победит подход Toolformer ([2302.04761] Toolformer: Language Models Can Teach Themselves to Use Tools, который, конечно, будет использован “многоходово”), он же LLM как Operation system (это замечание Karpathy, https://twitter.com/karpathy/status/1707437820045062561, Sep 28, 2023, 2M Views). Тут LLM является фреймворком, обеспечивающим интерфейс с человеком и другими агентами – и этот интерфейс естественноязыковой. Далее варианты, но в главном варианте сетка познаёт множество API разных tools и научается правильно выбирать эти tools и обращаться к ним за ответами на шаги вопроса. Karpathy пишет: looking at LLMs as chatbots is the same as looking at early computers as calculators. We’re seeing an emergence of a whole new computing paradigm, and it is very early.
В любом случае, это разнообразие ходов для меня – отражение техноэволюции, причём мы уже знаем из работ Ванчурина, что сложность решений в ходе эволюции растёт, в том числе и за счёт появления “организмов” из более элементарных структур. А ещё, конечно, все эти разные варианты умных нейросеток (LLM++) будут обращаться друг ко другу, так что итоговая сложность сети таких “нейросетей++” (ибо tools там будут очень разные, не все “нейросети”, пруверов и каких-нибудь математических процессоров и 1D моделеров, а то и 3D моделеров там будет предостаточно) будет весьма высока. Это как нельзя говорить ничего о личности человека, если не рассматривать его в контексте человечества и образования. Вот и тут ничего нельзя сказать про отдельного AI-агента с его уникальной собственной архитектурой, если не рассматривать его в сети стремительно эволюционирующего “агентечества” из мокрых и сухих самой разной природы нейросеток и не очень нейросеток (tools отнюдь не все нейросетевые! Солверам самой разной природы, для самых разных частных случаев самых разных задач – им необязательно быть нейросетевыми!).
Эволюционная стратегия/алгоритм как продолжение практики/культуры/стиля/метода работы.
И тем самым мы выходим на эволюцию и её стратегии/алгоритмы. Тут, конечно, Why Greatness Cannot Be Planned от Stanley и Lehman, как главная полупопсовая книжка против преследования целей (Против целей (against objectives).: ailev — LiveJournal, Против целей (against objectives)). В этой книжке, конечно, некоторый ликбез: два основных вида алгоритмов (поиск и оптимизация – но это всё-таки алгоритмы, со всеми их ограничениями от no free lunch theorem), дальше ход на novelty search и open-endedness как бесконечное развитие, бесконечную эволюцию (Открытость (open-endedness): понятие шире, чем эволюция: ailev — LiveJournal). Декларируется, что новизна/novelty сама по себе имеет значение – ибо без неё ты навеки застреваешь в локальных минимумах поиска решения.
Это всё ES, Evolution Strategy – по факту алгоритм в части эволюции именуют стратегией. Собственно, “стратегия” и даже “embodied алгоритм с учётом выхода в материальный мир” смело могут продолжать ряд “практика/культура/стиль/метод работы”. Главное, не путать “работу” с “методом работы” (вычисление алгоритма с алгоритмом, выполнение стратегии со стратегией), и всё будет ОК.
Борьба со “связанные одной целью, скованные одной цепью” (objective-based) идёт по нескольким классам эволюционных стратегий/алгоритмов, отходящих от преследования какой-то одной цели (то есть не objective-based, не целеориентированные):
– качественное разнообразие/quality diversity – это когда качественное решение (агент, алгоритм, значение функции, что угодно) ищется не одно, а много разных. Они все разные (diversity), но качественные для своих частных случаев. Предложено в 2011 в “Abandoning Objectives: Evolution through the Search for Novelty Alone”, https://www.cs.swarthmore.edu/~meeden/DevelopmentalRobotics/lehman_ecj11.pdf. Имеет огромное число самых разных алгоритмов, например, см. библиотеку GitHub - adaptive-intelligent-robotics/QDax: Accelerated Quality-Diversity (и там статья [2202.01258] Accelerated Quality-Diversity through Massive Parallelism как это всё поставили на GPU для ускорения работы, главный алгоритм там MAP-Elites с вариантами).
– Типичный пример развития качественного разнообразия, это ход на команды, то есть разделение труда. Эволюционировать надо не к одиночным “разноспособным” агентам/решениям, а сразу к команде, “Mix-ME: Quality-Diversity for Multi-Agent Learning”, [2311.01829] Mix-ME: Quality-Diversity for Multi-Agent Learning
– качественная эволюционность/quality evolvability – отличается от quality diversity тем, что ищет таки “универсальное одно решение” (а не набор разных неуниверсальных), но с одной существенной разницей: потомки отбираются не столько по новизне, сколько по возможности потомков сгенерировать самых разные поведения. Так сказать, “перспективные с эволюционной точки зрения”. “Quality Evolvability ES: Evolving Individuals With a Distribution of Well Performing and Diverse Offspring”, [2103.10790] Quality Evolvability ES: Evolving Individuals With a Distribution of Well Performing and Diverse Offspring
В то время как Quality Diversity нацелен на поиск архива разнообразных и хорошо работающих, но потенциально генетически далеких особей, Quality Evolvability нацелен на поиск одной особи с разнообразным и хорошо работающим распределением потомков. Так же, как и качественное разнообразие, качественная эволюционность как стратегия оказывается эффективней (познание/обучение/learn быстрее), чем в целеориентированных (objective-based) стратегиях, плюс они лучше избегают обманок/deception.
Где мы видим другими словами что-то похожее на quality evolvability? Конечно, это evolvable architecture – каждый архитектор должен учитывать, чтобы его архитектура позволяла эволюционировать дальше, это одна из главных задач архитектора! Принцип чётко продекларирован в “Building Evolutionary Architectures” (второе издание в ноябре 2022 года, Building Evolutionary Architectures, 2nd Edition [Book]).
Итого:
– универсальность вроде как бывает, но не слишком на неё полагайтесь. Прорывы вроде нейросетей в алгоритмике или колеса как движителя крайне редки. Скачки в нахождении очередного уровня оптимизации, которые позволяют достичь существенного прогресса в многоуровневой оптимизации (системных уровней много, конфликтов в них много) бывают редкими, а до этих скачков универсальные решения примерно на одном и том же уровне (“неустроенность”). Если есть запас по вычислительной мощности, скорости, энергии (если речь идёт не о вычислениях), то выиграет универсальный алгоритм, универсальный инструмент. Что-то типа “интеллекта” в алгоритмике есть везде, one-size-fit-all бывает, хотя и работает похуже специализированных решений. Но когда нет специализированных решений, будем использовать неэффективные универсальные.
– новизна имеет значение, ищите новинки, которые хорошо приспособлены к разным нишам. Если надо закрыть большую нишу (ага, рыночную), имейте разные решения для разных частей ниши, специализируйте эти части на своих нишах. Библиотека разных методов, поддерживайте много частных случаев!
– внутри ниши выбирайте те новинки, которые способны как-то круто меняться, не слишком специализированы (это ловушка!), хотя и хорошо работают.
Это всё можно прямо прописывать в куски текста в моих курсах по стратегированию. В жизни есть множество примеров для подобных эволюционных стратегий/алгоритмов (“методов выживания”, ага), надо просто дать способ думать об этом разнообразии. Эволюцию (в том числе техноэволюцию, где мемом оторван от каждого организма) не обыграешь, но можно хотя бы примерно понимать происходящее. То, что происходит с алгоритмами AI-агентов – это просто пример. Общие идеи тут много шире, они про то, как устроена бесконечность развития/open-endedness. Вернее, про то, как она “неустроенна” – множество разных решений с похожими характеристиками, редкие оптимизационные скачки на очередной квазиоптимум. И это верно, даже если рассматривать само устройство эволюционных стратегий: множество разных практик/стратегий/алгоритмов с похожими характеристиками, редкие оптимизационные скачки на очередной квазиоптимум.
