January 10th, 2021

2019

Уровни Марра и первые принципы: это всё системное мышление

Sutton напомнил в дебатах по AI 2020 (пока наиболее подробное изложение в https://www.zdnet.com/article/ai-debate4-2-night-of-a-thousand-ai-scholars/, выступление Sutton в https://www.youtube.com/watch?v=hcJNFdZit-Q) про необходимость вести обсуждение чего бы то ни было в рамках концептуальных подходов (https://en.wikipedia.org/wiki/Conceptual_framework, иногда ссылаются на просто подход/framework, в том числе системный подход именно таков -- набор концептов для рассмотрения сложных ситуаций), а не как попало. Подходы обращают внимание на важное, позволяют структурировать обсуждение.

Для обсуждения искусственного интеллекта Sutton предложил использовать "уровни анализа" Марра для вычислительной системы (первая версия Marr and Poggio 1976 с четырьмя уровнями, https://www.researchgate.net/publication/37596647_From_Understanding_Computation_to_Understanding_Neural_Circuitry, вторая с тремя уже классическими -- 1982 год, https://web.stanford.edu/class/psych209a/ReadingsByDate/01_07/Marr82Philosophy.pdf, в Сети анализов этой работы более чем достаточно). Даю по работе Levels of Analysis for Machine Learning от коллег Sutton в DeepMind, https://arxiv.org/abs/2004.05107):
-- Computational level.What is the goal of a system, what are its inputs and outputs, and what mathematical language can be used to express that goal?
-- Algorithmic or representational level. What representations and algorithms are used to achieve the computational-level goal?
-- Implementation level. How is the system implemented, either physically or in software?

А вот как это изложил Sutton в своём слайде в дебатах:

Эти "уровни анализа вычислительных систем" всем показались очень удачными, и им пошли давать разные толкования, и продолжают давать толкования до сих пор. Но раньше этих попыток было ещё больше, см., например, https://www.albany.edu/~ron/papers/marrlevl.html, 1991, где сразу указывается: In recent work in the theoretical foundations of cognitive science, it has become commonplace to separate three distinct levels of analysis of information-processing systems. David Marr (1982) has dubbed the three levels the computational, the algorithmic, and the implementational; Zenon Pylyshyn (1984) calls them the semantic, the syntactic, and the physical; and textbooks in cognitive psychology sometimes call them the levels of content, form, and medium (e.g. Glass, Holyoak, and Santa 1979).

Важно тут указать, что предполагается рекурсивное применение этого фреймворка, то есть не только для вычислительной системы, но и для её подсистем (это, например, явно обсуждается с примером в https://arxiv.org/abs/2004.05107).

Я предлагаю считать, что удачность выделения этих уровней -- это просто использование системного подхода в вычислительном мышлении, и не более того (системный подход в вычислительном мышлении я обсуждал в https://ailev.livejournal.com/1544639.html):
-- вычислительный уровень -- это предложение обсудить функциональность вычислителя, формализм обсуждения потребностей и требований (и это требует разговора на языке надсистемы)
-- алгоритмический или репрезентационный уровень -- это уровень обсуждения функциональности вычислителя (в смысле из "Программирования для математиков" Кушниренко и Лебедева, первые два раздела первой главы -- https://yadi.sk/i/virGAvARqqtMhQ, хотя для случая неимперативного программирования и тем более вычислений в распределённых представлениях нельзя применить тамошние идеи "в лоб", но если речь идёт о полнотьюринговых вычислениях, а все они таковы, что обсуждается у того же Дэвида Дойча, то различение "исполнитель-выполнитель" может оказаться очень полезным. Аналогичные различения пытался ввести Алан Кей как chain of meanings. А для самого Марра обсуждают, что он вводит computational pipelines).
-- уровень реализации -- это уровень обсуждения конструкции вычислителя, что там в физике будет эффективно реализовывать вычисление (в терминах Кушниренко-Лебедева это обсуждение выполнителя для данного исполнителя).

То есть речь идёт о том, чтобы обсудить надсистему (какое вычисление требуется для надсистемы), затем архитектуру вычислителя/вычислительной системы. А при обсуждении архитектуры вычислителя речь пойдёт о его частях, и всё обсуждение нужно будет повторить.

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

Осталось понять, что же говорил Sutton, зачем ему был нужны эти уровни анализа? Sutton обратил внимание на отсутствие высокоуровневых обсуждений (универсальных алгоритмов уровня когнитивных фреймворков, вычислительная надсистема над традиционно понимаемом "компьютере простых алгоритмов") и отсутствии формализации разговора об этих вычислениях. Его волнует отсутствие обсуждения обучения с подкреплением (именно reinforcement learning он считает хорошим кандидатом на универсальный алгоритм "computational level" для AI, другие для него менее хороши -- predictive coding, bayesian inference), формализации постановки задачи на эту универсальность. А то, что там где-то внутри для обучения с подкреплением используются алгоритмы градиентного спуска и распределённые представления в нейросетях -- это уровнем ниже, хотя на эту тему очень много выдающихся работ. Я бы переформулировал, что Sutton говорит: "если ты не знаешь, какой вычислитель ты делаешь -- никакая алгоритмика внутри этого вычислителя тебе не поможет". Да, если целевая система не выявлена, мы не можем предложить её архитектуру. Это стандартное рассуждение системного мышления.

И такого много: самые разные удачные "приёмы мышления" оказываются просто частями системного мышления. Прошлый раз этот феномен мы видели на примере "первых принципов" (цитирую свой сентябрьский текст 2020, https://ailev.livejournal.com/1536680.html):
Разборка с "мышлением из первых принципов" показала, что ничего там особо интересного, увы, нет. Это всё придумал Аристотель, выразившись крайне невнятно про разбиение на части в духе ранних версий системного подхода (неважно какие части, главное до дна, где вы полностью уверены в утверждениях -- это и будут первые принципы). Дальше, как и в системном подходе, всё зависит от того, что вы считаете частями. Версия Элона Маска оказывается одной из самых продуктивных -- но в переводе с аристотелевских иносказаний на современный означает выход в физический мир (он прямо указывает на физику как основание для мышления) и попытка альтернативного модульного синтеза при сохранении функции в надсистеме. Попытки использования типовых архитектур он называет мышлением по аналогии, а предложение новой конструкции на низких системных уровнях для реализации высокоуровневых функций -- это и есть мышление из первых принципов. Тот же ТРИЗ занимается тем же самым, только называет это по-другому. Системные архитекторы всего мира (которые разрабатывают новые архитектуры, а не переиспользуют старые -- то есть мыслят не по аналогии, как об этом говорит Элон Маск) тоже занимаются этим. Вот парочка ссылок, там всё понятно: https://fs.blog/2018/04/first-principles/, https://jamesclear.com/first-principles. Линия с выходом на принятие формул всерьёз (это я продолжаю упоминать Дэвида Дойча) и впрямь связана с теми самыми широко понимаемыми первыми принципами как опору на утверждения, которые нам известны и в которые мы верим, но нам вполне хватит понятий системного мышления, чтобы поддерживать этот разговор о "делении на части, о которых уже хорошо известно". Мы хотя бы знаем, как делить на части: функционально, конструктивно, по местам, разными другими хитрыми способами, а также на много уровней вниз и ещё и со сборкой вверх всеми этими способами. Аминь, тема с инженерией из первых принципов оказалась закрыта -- это просто термин для обозначения предложения first in a kind архитектур, новых способов организации/структурирования вещества для выполнения какой-то функции. Это как раз про получение той самой архитектурной идеи, которая переведёт мечту в проект, или предложит такой проект, который не стыдно назвать мечтой.
Человеческое знание не просто может быть, а прямо таки должно быть компактифицировано. Вместо сотен и сотен "удачных идей" мы получим небольшой набор трансдисциплин, который заменит их все. Системное мышление как раз такая компактифицирующая дисциплина. Овладейте системным мышлением, и вам не нужно будет специально изучать "мышление из первых принципов" и "марровские уровни анализа вычислительных систем". А заодно поймёте разницу между потребностями и требованиями (а кто не обратил внимание, обратите: на вычислительном уровне подхода Марра я говорю о потребностях и требованиях, а не просто о требованиях. Почему? Ответ в курсе системного мышления -- https://system-school.ru/systems-thinking, чат поддержки книги/курса https://t.me/systemsthinking_course.