Алгоритмика-2024

В принципе, всё уже сказано было в “9. Алгоритмика” курса “Интеллект-стек”, (Aisystant). Этот раздел я писал ровно год назад, вот пост от 15 июня 2023, “Моё стратегирование в июне 2023: интеллект-стек (алгоритмика), приоритеты ШСМ, AI-стратегия”, Моё стратегирование в июне 2023: интеллект-стек (алгоритмика), приоритеты ШСМ, AI-стратегия: ailev — LiveJournal. Но вот ещё несколько заметок – результат последних обсуждений по курсам “Методология” и готовящемуся “Методология систем AI”. Все эти новые соображения надо бы как-то учесть при последующей переписке курса “Интеллект-стек”, но ещё и учесть как-то в курсе “Методология”, который переписывается вот прямо сейчас.

Синонимичность теории (логики), объяснений (контрфактуальной логики) и алгоритма.
Больше про синонимичность теории/объяснений/дисциплины и алгоритма, соответствие Curry-Howard, Curry–Howard correspondence - Wikipedia. Конструктивная математика (выражаемая какой-то формой логики и доказательствами) и алгоритмика (выражаемая описанием вычислений в какой-то парадигме программирования) связаны, “почти одно и то же” – но алгоритмика оказывается про эффективность, а не вообще “вычислимые в принципе функции” как математика, и тем самым про физичность вычислителя и скорость операций на специфичном по его физике (используемых видах физических явлений – физика тут как “раздел физики”) вычислителе. По Дойчу computer science --экспериментальная наука, ибо между поведением физического объекта (вычислителя) и поведением математического объекта, который он моделирует, всегда может быть принципиальная невязка и надо экспериментально показывать, что абстрактные объекты и физика вычислителя ведут себя одинаково.

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

Это ещё раз ставит вопрос про то, включаем ли мы операционный менеджмент в методологию – “методы работы” включают ли разборку только методов без оценки их эффективности при ведении работ, или методология разбирается с методами и эффективностью их в работе и тем самым вынуждена рассматривать каким образом делается сборка методов из их разложения в условиях ресурсных ограничений. А этот способ сборки методов в ходе работы определяется операционным менеджментом. И если методология включает операционный менеджмент (в том числе тогда кроме стратегирования и реализации стратегии обсуждаем планирование и выполнение плана), то как тогда называем ту часть, которая именно про методы/функции?

В частности, важен формат представления теории/объяснений/дисциплины, и тут важна нотационная парадигма вычислений (парадигма языка программирования) против исполнительской парадигмы (парадигма языка машины), ибо алгоритмика по принципу сейчас императивна в силу императивности машинного языка классического компьютера: в конечном итоге всё становится машинным кодом, и только он имеет значение, а разные нотации будут “оптимизированы”.

Описания методов обычно декларативны, хотя эта “декларативность против императивности” сейчас полностью ушла в “мультипарадигмальность” (ибо императивность более-менее одна, а вот “декларативностей” оказалось много и совершенно разных, и вообще там оказалась шкала императивности-декларативности, а не дихотомия). Раньше противопоставление декларативности и императивности отражало два способа внешнего выражения (описания, нотации) для алгоритма: предложение алгоритма-плана пошагового выполнения (алгоритмичность) в текущей аппаратуре, в том числе пошаговое выполнение в аппаратуре, в которой и шагов-то нет (всякие оптические компьютеры на дифракциии и интерференции и даже LLM как “чёрные ящики”): аналоги “квантовых программ, вызываемых из классических”, “LLM programs как вызов LLM из какого-нибудь LangChain” и т.д…

Для меня разница в “декларативных” языках (включая функциональные и отчасти даже объект-ориентированные) и “процедурных” в том, что возможно два варианта, как в случае с уравнениями: “мы даём чёткий алгоритм, и показываем, что и когда делать – как в ОDE-моделях” и “мы составляем системы уравнений, а компьютер умный, сам найдёт в каком порядке и как решать систему – как в DAE-моделях”. Это, конечно, предъявляет жёсткие требования к компилятору даже в случае языков для ODE (типа Simulink) против языков с DAE (типа Modelica), как показано в Цифровые двойники: физика ведёт математику, математика ведёт компьютерную науку: ailev — LiveJournal. Ну, а в языках программирования – это Си, Go или Ассемблер по сравнению с каким-нибудь Haskell или даже Prolog. В декларативных языках обычно содержится код, в котором последовательность вычислений явно не задаётся, но каким-то чудом превращается в строгую последовательность операций машинного процедурного кода. То есть речь идёт не о принципиальной разнице, а о разнице в стиле представления знаний. Скажем, вот тут объясняется как функционально писать на совсем нефункциональном Go – Functional programming in Go - LogRocket Blog.

Тут ещё надо понимать, что с самой “машинностью” и протиповоставлением “нотации для непосредственного манипулирования” с отъезжающими от этой нотации в “синтаксически и семантически засахаренные описания манипуляций, с которыми разбирается компилятор-оптимизатор” начиная с хода от машинного языка к языку Ассемблера, а затем всяким языкам виртуальных машин (типа виртуальной машины Java) и затем к тем самым “мультипарадигмальным языкам программирования” – с мышлением про это ещё не разобрались, поэтому языковые обсуждения сводятся к обсуждению символов веры.

Скажем, вот интересная линия рассуждений про нотации, на примере математической нотации: работа по нотациям как позволяющим мышление для less gifted of us (выражение Jourdain в его книжке по математике 1912 года), выбор хорошей presentation (например, позиционная запись арабских чисел) для хорошей representation (например, включение нуля в набор цифр) делает последующее рассуждение “алгоритмизированным”, то есть описанной последовательностью операций вместо “изобретаемой каждый раз последовательностью операций”, что драматически упрощает мышление. Можно не “творить”, а просто “посчитать по предлагаемой инструкции счёта”. Не делать догадки и опровергать их, а просто “взять входные значения и без содержательного разбирательства с ними механически посчитать выходные значения”. Вот работа, которая пытается пояснить, как это “хорошая нотация делает рассуждение доступным даже менее одарённым из нас, чем придумавшие нотацию” – тут. Нотации тут как иероглифические системы, они не соответствуют текстам на естественном языке – японец и испанец прочтут 2+2=4 абсолютно по-разному. Но фишка не в “иероглифичности” – ибо иероглифы могут быть использованы или как знаки для описания чего-то другого, или они сами могут быть объектами, с которыми ведутся манипуляции по известному уже алгоритму, без шага стратегирования и планирования. В тексте приводится множество примеров. И в алгоритмике всё то же самое, но вместо less gifted of us людей можно думать о более общих компьютерах, производящих рассуждения – получается, что какие-то объекты становятся “мат.объектами, в терминах которых ведутся простые пошаговые операции вместо сложных”. Дальше можно много разного думать, например обсуждение понятия “простой” из лекции Miles Cranmer Заметки по лекции Miles Cranmer "Следующая большая научная теория прячется внутри нейронной сети": ailev — LiveJournal, а также вспоминать разные предыдущие ходы на нотации, а также ходы на формализацию и даже ходы на нейро-символические вычисления (нотации, похоже, это ровно туда ход).

Тут могут быть самые разные и другие ходы “гирлянды кодов” (хотя Рома Михайлов говорил про гирлянды языков, см. мои реплики в треде Вчера у нас сложилась беседа с одним физиком, но она как началась… - САП — LiveJournal), например, на суперкомпиляцию (Суперкомпиляция — Википедия ) и частичные вычисления (Частичные вычисления — Википедия ): берём вообще левую программу, которая оптимально вычисляет тот же результат, но получается не путём трансформации исходного кода, а как-то иначе. Это как-то отвечает на вопросы о “частных случаях”, для которых писался и пакет оптимизации JuMP (https://jump.dev/) и пакет решения дифуров DifferentialEquations · Julia Packages, ибо при самой общей постановке задачи возникают “частные случаи” и “еще более частные случаи”, в которых есть более эффективные алгоритмы (и тоже приходится подхакивать компилятор).

Неформальное творчество и формальная критика: неформальные и формальные алгоритмы
Ещё одно соображение про алгоритмику – это появление алгоритмики на неформальных представлениях. По факту, мы должны ввести в алгоритмах шкалу формальности. В том числе как-то описать выдерживание соответствия теории (декларативных представлений) и алгоритмов (императивных пошаговых процедурных представлений) на формальностях уровня общих метафор (вплоть до визуальных с парой слов, уровень “интернет-мема” с его смешными картинками и попыткой выразить идею), попыток описания текстами на естественном языке, описания псевдокодами и канцеляритами как попытками точного описания, а также кодами на формальных языках программирования, которые возможно выполнить на компьютере (в том числе на компьютере робота, волнуют и изменения физического мира – это “нотация, которая даёт выполнение кода менее одарённым из нас”).

Алгоритмику надо излагать на основе объединённой семантики локальных/семиотических и распределённых/“нейро” представлений, поскольку речь идёт о рассуждениях сразу в смеси всех диапазонов шкалы формальности.

В классическом случае “критика важней всего, человек от кошки отличается критикой, у нас тут строгая логика, неформальность подчиняем строгой логике” это фреймворки типа LangChain – всякие LLM вызываются из ставящей их под контроль логической программы. Ну, или “нейросуррогаты”, даже не LLM, а простые ANN, дающие ускорение на три порядка в вычислениях, мечта алгоритмистов прошлого поколения:
NeuralSurrogate · Surrogates.jl это в Julia, и дальше моделирование-на-суррогатах, Overview · JuliaSimSurrogates
– модель термоядерного реактора на нейросурогатах TORAX (Tokamak transport simulation in JAX) от DeepMind (JAX и Python), GitHub - google-deepmind/torax: TORAX: Tokamak transport simulation in JAX как пример не-Julia.

Это всё общий ход на Software 2.0 как обучаемые алгоритмы, в которых выучиваются какие-то другие алгоритмы, и тут заход на “дифференцируемое всё”. Это, вроде, было отражено уже в текущей версии алгоритмики в курсе “Интеллект-стека”, но прошёл уже год, появилось много нового. В нейросетях общая структура алгоритма традиционно называется “архитектурой”, так что можно говорить о дифференцируемой архитектуре нейросетей, continuous relaxation of the architecture representation, “связанное с непрерывностью смягчение представления архитектуры”, что даёт возможность использовать для оптимизации алгоритма. После этого “смягчения представления” (перехода от дискретного локального представления кода к распределённому) можно применять, например, градиентный спуск для поиска оптимума – и это будет “оптимальный код”. Начиналось с древних DARTS: differentiable architecture search – [1806.09055] DARTS: Differentiable Architecture Search, FBnet: Hardware-Aware Efficient ConvNet Design via Differentiable Neural Architecture Search – [1812.03443] FBNet: Hardware-Aware Efficient ConvNet Design via Differentiable Neural Architecture Search, и множество подобных. Вот обзор годичной давности — [2304.05405] Efficient Automation of Neural Network Design: A Survey on Differentiable Neural Architecture Search (Efficient Automation of Neural Network Design: A Survey on Differentiable Neural Architecture Search), но процесс потихоньку продолжается, вот Multi-objective Differentiable Neural Architecture Search уже в этом году, [2402.18213] Multi-objective Differentiable Neural Architecture Search.

Антиклассический по заходу на кодирование случай – “воображение и опыт-кругозор важнее, но мы всегда позовём калькулятор на помощь, если надо что-то посчитать формально”, toolformers и аналогичные, где вызов императивной классики с кодом идёт из нейросетки, например LLM programs. Сами нейросетки при этом программируются “нейролингвистически”, пропмтами – как в старинном “нейролингвистическом программировании” мокрых нейронных сеток, “оригинальном NLP” Джона Гриндера и Ричарда Бэндлера.

Например, алгоритмика “внутри нейросетей”, то есть появление “наложенных алгоритмов” примерно так же, как в многослойном софте, где тексты на одних языках программирования порождают как данные тексты на других языках программирования, по которым компиляторы порождают опять данные, которые и исполняются в машинном коде (и там дальше это продолжается где-то в микропрограммах). Это всё надо смотреть “одновременно” – ибо прикладной программист считает, что исполняются его указания на естественном языке (например, указание для copilot что-то написать), но дальше текст порождается например, на функциональном языке, затем это оказывается машинным языком – и даже после этого могут быть неожиданности, типа пересылки части вычисления в какой-нибудь GPU через подхват какой-то библиотеки. Надо давать какое-то общее представление о подобном. Это всё очень похоже на разложение метода из Разложения, спектры, стеки, слоёные пироги, программы и мастерства методов: ailev — LiveJournal – и там в том числе и всякие метавычисления (и частичные вычисления), “отличия макроподстановки от вычисления” и т.д. ANN тут притом, что обсуждается всяческая “эмерджентность больших языковых моделей” Как думать об эмерджентности больших языковых моделей: ailev — LiveJournal – и там возникают сложные программно-аппаратные архитектуры с появляющимися на субстрате нейросети “наложенными сетями”, реализующими с разной степенью эффективности какие-то вычислительные алгоритмы. Эти алгоритмы можно как-то изучать: что там появилось в нейросети, как оно устроено, почему и как вычисляет – explainable AI ладно, но explainable алгоритм и interpretability результатов как объяснение способа его получения – это как раз тут.

Andrew Ng выдал сегодня (25 мая 2021 года! когда алгоритмы-на-сетях уже вполне работали) “свежую идею” распространить дейкстровское определение программы на базе алгоритмов Кнута на программы на базе алгоритмов AI (https://www.facebook.com/andrew.ng.96/posts/3982283021827575): “Would love your feedback on this idea: AI Systems = Code (model/algorithm) + Data. Most academic benchmarks/competitions hold the Data fixed, and let teams work on the Code. Thinking of organizing something where we hold the Code fixed, and ask teams to work on the Data. Hoping this will more closely reflect ML application practice, and also spur innovative research on data-centric AI development. What do you think?”. Всё это сильно напоминает развитие алгоритмики времён Кнута: простые алгоритмы на простых данных (aka классическая “алгоритмика”, она же “информатика”), потом программирование стало программированием простых алгоритмов на кучерявых данных (над базами данных по факту) и появились проблемы programming-in-the-large. И вот история повторяется! Для меня это лишнее подтверждение, что нужно учить одним и тем же принципам на разных уровнях вычислительного стека, на разных принципах вычислений (для квантовых вычислений тоже ждём поначалу расцвета алгоритмики на простых данных, а потом кто-то задаст вопрос о данных – и мы сейчас уже знаем, что так и будет).

“Третий путь” – это полная мешанина из формальных (классическая алгоритмика и логика, S2) и неформальных (рассуждения по аналогии на естественном языке в нейросети, S1) вычислений.

Например, “программирование на промптах”, software 3.0, где естественный язык используется как язык программирования в том числе алгоритмов разной степени формальности, при этом критика алгоритмов тоже идёт естественноязыковая, а не с задействованием формальных методов, и на вот этой “полуформальности” работает эволюционный процесс “проб и ошибок”. Например, Can LLMs invent better ways to train LLMs? и статья [2405.03547] Position: Leverage Foundational Models for Black-Box Optimization, we frame the field of black-box optimization around sequence-based foundation models and organize their relationship with previous literature. We discuss the most promising ways foundational language models can revolutionize optimization, which include harnessing the vast wealth of information encapsulated in free-form text to enrich task comprehension, utilizing highly flexible sequence models such as Transformers to engineer superior optimization strategies, and enhancing performance prediction over previously unseen search spaces. Сюда же работы по “разделению труда” между вызовами LLM в разных ролях, что имитирует работу разных агентов в мультиагентных системах – в трудных задачах машинного перевода, [2405.11804] (Perhaps) Beyond Human Translation: Harnessing Multi-Agent Collaboration for Translating Ultra-Long Literary Texts, русскоязычный обзор Telegram: Contact @gonzo_ML, “мозговые штурмы в мультиагентных сетях”, [2305.17066] Mindstorms in Natural Language-Based Societies of Mind и множества других подобных.

Ещё тут же про интересность как метрику наличия кода в какой-то предметной области или каких-то описаниях вот тут целая теория интереса Юргена Шмитхубера, WHAT'S INTERESTING? ACTIVE EXPLORATION - CURIOSITY-DRIVEN REINFORCEMENT LEARNING - ARTIFICIAL CURIOSITY - INTRINSIC REWARD - INTRINSIC MOTIVATION - ARTIFICIAL CREATIVITY - LIFELONG DATA COMPRESSION - FORMAL THEORY OF SURPRISE - FORMAL THEORY OF NOVELTY - FORMAL THEORY OF INTERESTINGNESS - FORMAL THEORY OF CURIOSITY - FORMAL THEORY OF CREATIVITY.

Возможны всяческие деления информатики. Например, деление на “алгоритмику” как часть информатики, посвящённую эффективности кодов (вот тут этот заход у меня более подробно – Информатика: ailev — LiveJournal) и само кодирование как представление знаний о мире в структурах данных. Можно ещё и дальше делить алгоритмику на “людскую” (всякие варианты literacy programming) и “для нежити” (лишь бы работало). Различение “для людей” и “для нежити” можно провести и альтернативно на уровне наличия кинестетического интерфейса к S1 в методах мышления (так, мы учим “онтологическому дребезгу” на курсе “Моделирование и собранность” – ощущение чего-то неправильного в тексте, проявляемое в теле), чего у машин пока не наблюдается – там вся работа идёт в явном виде. Так, fun criterium от Дойча тоже сочетание формальной критики и неформального согласия, но для живых людей – эпистемологический критерий для решения о том, что делать: https://www.youtube.com/watch?v=idvGlr0aT3c и https://www.youtube.com/watch?v=uQ2GHzFYxaI, это пересекается с работами Шмитхубера по любопытству и интересу и Стенли и Лемана о новизне. В том числе там про терминологию: идеи против теорий, пересечение с идеями Дугласа Лената о “кодировании здравого смысла” (см. ленатовскую презентацию https://www.youtube.com/watch?v=54CZf6kbpVg, часть мыслей про множество “ускорителей”, работающих со множеством репрезентаций в этой презентации – Машинный интеллект на начало февраля 2022: до сих пор непонятно, как оценивать прогресс: ailev — LiveJournal), проблемы/противоречия будут во всех трёх (условно) видах теорий/идей – explicit, inexplicit/tacit, unconcsiousness theories/ideas, поэтому тактика критиковать эти идеи реально недостаточна, ибо критиковать-то что?! Мы ж не осознаём, что критиковать, оно ж в чужой голове, да и в своей не очень представлено явно кодом, то есть формально!

Если возвращаться к идеям Ромы Михайлова, то он в других словах прописывает примерно то же самое: прорывные работы возникают, когда пытаешься прописать код, часто неосознанно – и используешь при этом кинестетику, примерно так же мы задействуем внутреннего неформального критика с выходом на кинестетику при обнаружении “онтологического дребезга”, модифицировав focusing и TAE. Вот (Вчера у нас сложилась беседа с одним физиком, но она как началась… - САП — LiveJournal): “Склейка узора, текста. При неправильном соединении возникает тошнота. Если внутри себя склеиваешь то, что не склеивается, тошнота усиливается. Можно сидеть и заниматься внутренними склейками, и тем самым корректировать свое состояние. Склеенное становится продуктом расхода, навсегда уплывает из сознания.” – тут Рома прямо говорит о “критике через кинестетику”, при этом “дребезг” у него очень ярок, ощущается им как “тошнота” и может касаться формализации каких-то внутренних паттернов в виде, пригодном к “склейкам”.

В принципе, вот эта работа по догадкам на основе неформального мышления с выходом за пределы привычного кода и потом попытками предложить формализацию, которая проходит критику. Это типично для всевозможных “эволюций”, тут можно говорить о разработке алгоритмов, в том числе генетическом программировании и всяком таком. Работа со smart mutations (введены в “Evolution through Large Models”, [2206.08896] Evolution through Large Models) даёт возможность резкого ускорения создания новых алгоритмов. Скажем, для универсального алгоритма (алгоритм, который способен решить все проблемы – по книжке The Master Algorithm от Pedro Domingos) на примере нейросетей можно смотреть на поиск “архитектуры нейросети”, то есть компьютерный поиск оптимизированной нейросети, удовлетворяющей условиям точности в выдаче ответов на вопросы и одновременно высокой эффективности вычислений – это вопрос методов работы нейросетей, заниматься таким могла бы “Методология систем AI” (Мышление письмом по поводу курса "Методология систем AI": ailev — LiveJournal). И дальше мы должны посмотреть: как появляются новые методы, то есть как работают люди-алгоритмисты нейронных сетей, предлагающие новые их архитектуры (в старом понимании архитектуры как “основной структуры”), то есть новые алгоритмы.

Можно и по-другому, не выходя из дискретного представления структуры LLM, брать понятие “блока” и дальше строить “архитектуру LLM” из этих “блоков”. Потом подкручивать понятие “блока” и составленной из них общей структуры ANN (то есть проводить мутации, в случае генерирования этих изменений/мутаций LLM – smart mutations) и смотреть, что будет при таком подходе – выбирая затем лучшие результаты. Это эволюционные алгоритмы, они медленней, чем оптимизационные, но принципиально способны на “открытия”, если правильно подбирать алфавит, на котором делаются smart mutations (в данном случае те самые “блоки”). И вот тут возможно работать с самыми разными уровнями формальности. Например, вот тут активно используется “программирование на промптах”, Software 3.0 – Evolving New Foundation Models: Unleashing the Power of Automating Model Development (папир — [2403.13187] Evolutionary Optimization of Model Merging Recipes). Тут обсуждается “конструктивная алгоритмика” над “алгоритмами в нейронных сетях”, то есть model merging. Вот картинка оттуда с основной идеей:

modelmerge

Текущий подход к методологии систем AI — это “биология”, дарвиновская эволюция, тыкание по большому счёту наугад. А затем приходит “эволюция в виртуальном мире”, и биологам-людям там становится делать нечего. Примерно как игрокам в Го и шахматы с их “дебютами”: пришла АльфаГо, и дальше все игроки изучают не партии великих мастеров, а партии АльфаГо, а уж если надо не “изучать”, а “играть” — то надёжней вместо людей брать АльфаГо.

Поэтому как должно быть устроено изучение алгоритмики – как метаалгоритмика (алгоритмы получения других алгоритмов, теории получения других теорий, объяснение как получать другие объяснения – и тем самым это становится курсом эпистемологии, а именно эволюционной эпистемологии на множестве агентов), или таки алгоритмика должна изучаться в заходе “как человеку научиться создавать свои алгоритмы по потребности, вытаскивая их из литературы и придумывая самостоятельно” – это обсуждаемый вопрос.

И тут же про размытую границу софта и харда: реализацию алгоритмов аппаратурой и реализацию аппаратуры софтом. Это место (всяческое микропрограммирование как пример, FPGA как пример и т.д.) даётся в разных учебных курсах очень мутно – тезис проговаривается, но дальше “сто примеров, и вы всё поняли”.

Тут же расширение до алгоритмики компьютеров с разной архитектурой (hardware aware алгоритмы, очень популярны в ANN, типа той же мамбы – вот и добавить hardware aware в качестве важного концепта) и даже с разной физикой (хотя бы текущий спор между квантовыми компьютерами и классическими, где квантовым уже несколько лет никак не удаётся показать что-то достаточно убедительно, и тут ещё оптика вылезает в неклассических архитектурах – и это то же hardware aware, но “на максималках”).

И совместный синтез харда и софта гибридными (нейросимволическими) эволюционными алгоритмами.

UPDATE: обсуждение с Telegram: Contact @comp_thinking, с Telegram: Contact @ailev_blog_discussion

3 лайка

Во всем тексте, вы явно проговариваете только три универсальных свойства алгоритмов/программ: точность, скорость (задержка) и (энерго)эффективность. Хотя Скорость много где опускается. Универсальных - то есть таких, которые могут быть применены к любым алгоритмам, от самого низкого уровня в многослойном пироге вычислений, (супер)компиляций, и т.д., от высокоуровневого промпта до микрокода в железе.

Мне кажется что таких свойств побольше:

  • Информационная эффективность (в терминах Филдса - это размер границы/экрана quantum reference frame в битах)
  • Робастность/устойчивость/надежность/безопасность - не обязательно то же самое, что простая вероятность выдать неточный ответ – играет роль также степень (катастрофичности) неточности, пытаются ли систему вычисляющую алгоритм/работающую по методу активно сломать/хакнуть или нет.
  • Модулярность/композиционность/интероперабельность/интегрируемость (не в смысле интеграл из матана, а в смысле синтезируемость с другими алгоритмами в алгоритм более высокого уровня)/“склеиваемость”
  • Интерпретируемость/отлаживаемость/debuggability
  • Поддерживаемость/maintainability/(эволюционная) развиваемость
  • Конфигурируемость/контролируемость/steerability/убеждаемость/persuadability
  • Параллезуемость/распределяемость/скалируемость - это свойство про “алгоритмику как операционный менеджмент”

Кажется любопытным, что все эти свойства, хотя и означают что-то разное на разных уровнях вычислений / для разных типах алгоритмов, данных, и представлений (локальные и распределенные), таки применимы очень широко, для алгоритмов, которые казалось бы не должны иметь ничего общего. Например, мы буквально говорим про интерпретируемость программ как метод исполнения (в противовес компиляции), и про интерпретируемость алгоритмов LLM. Или, прослеживается общая линия от конфигурируемости микрокода CPU/GPU до configurator module в архитектуре ЛеКуна и persuadability даже выше:

Так что, в мета-алгоритмике, наверное, еще можно пообсуждать взаимодействие этих свойств, их эмерджентность (почему именно на каком-то уровне мы начинаем говорить про persuadability? Или по Левину/Филдсу - все строго градуально, как психизм/сознание/goal-directedness/agency и т.д.)

Градуально, конечно. Алгоритм сразу представляется программой (как физ.объект), физ.объект – это создатель, и дальше все разные характеристики в гости к нам, только их бы хорошо чуть растаскивать всё-таки по этим разным объектам (алгоритм, программа, создатель/робот со всем его инструментарием).