Доводы в пользу Rho-исчисления в ИИ

Доводы в пользу Rho-исчисления в ИИ

4 февраля 2023 г.

Сознание как колонизация мозга

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

<цитата>

Джоша Бах, один из самых оригинальных мыслителей своего поколения, сделал поразительное утверждение, что мобильный параллелизм противоречит общий искусственный интеллект

Мой ответ на это предположение заключается в том, что оно предполагает, что разум не размещен в логической модели вычислений, которая работает на аппаратном обеспечении мозга. В конце концов, виртуальная машина Java (JVM) — это совсем другая модель вычислений, чем аппаратное обеспечение, на котором она работает. Модель вычислений Haskell представляет собой еще более впечатляющую вариацию идеи вычислений, чем та, которая воплощена в аппаратном обеспечении славного Компилятор Haskell (GHC) обычно размещается на . Почему разум не может быть организован таким образом? Используя графическую метафору Джоши, почему разум не возник бы как колонизирующая вычислительная модель, которая размещается на аппаратном обеспечении мозга? Если это так, то rholang, реализация ро-исчисления, для начала размещена на чипах Intel и AMD, и их вычислительные модели сильно отличаются от той, что захвачена ро-исчислением.

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

Код, данные и вычисления

Чтобы обосновать этот аргумент, я хочу провести некоторые различия, которые делает не каждый ученый-компьютерщик, не говоря уже о каждом разработчике. Я различаю код, данные и вычисления. Произвольный код можно рассматривать как некоторые данные, являющиеся экземпляром структуры данных некоторого типа, в которой выражается или размещается модель вычислений. Например, вы можете разместить полную по Тьюрингу вычислительную модель, например Haskell, на языке терминов, выраженном через контекстно-свободную грамматику, например, грамматику для правильно построенных программ на Haskell. Тем не менее, мы знаем, что контекстно-свободные грамматики не полны по Тьюрингу. Как это может быть? Как что-то менее выразительное, чем полные по Тьюрингу модели, может представлять полные по Тьюрингу вычисления?

Photo by Walkator on Unsplash

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

<цитата>

Как что-то менее выразительное, чем полные по Тьюрингу модели, может представлять полные по Тьюрингу вычисления? Он раскрывает суть различия между синтаксисом и семантикой. Грамматика термина «язык» выражает синтаксис программ, а не динамику вычислений, т. е. семантику кода.

Чтобы не усложнять, скажу, что такое же различие происходит в Java и JVM. Динамика вычислений в JVM осуществляется с помощью правил, которые работают с комбинацией регистров в виртуальной машине вместе с представлением кода. Программист Java, глядя на кусок кода Java, не смотрит на вычисление. Отнюдь не. Синтаксис Java-программы — это окно в целый ряд возможных различных вычислений, которые происходят в зависимости от состояния регистров JVM во время выполнения кода. Разница между этими двумя формами оценки, бета-редукция в лямбда-исчислении по сравнению с переходами JVM, очень важна, и мы к ней еще вернемся.

На данный момент, однако, один из способов представить это различие между кодом и вычислениями — провести аналогию с физикой. Традиционно законы физики выражаются тремя вещами: представлением физических состояний (подумайте об этом как о синтаксисе программ), законах движения, которые говорят, как состояния меняются с течением времени (подумайте об этом как о правилах, которые оперируют синтаксисом). ; и начальные условия (подумайте об этом как о конкретном фрагменте кода, который вы хотите запустить). В этом свете физика рассматривается как язык программирования специального назначения, выполнение которого определенным образом соответствует тому, как развивается физический мир на основе наших наблюдений за ним. Физика поддается проверке, потому что она позволяет нам запустить программу и посмотреть, соответствует ли эволюция некоторого начального состояния к состоянию, которого оно достигает с помощью законов движения, нашим наблюдениям. В частности, когда мы видим физический мир в конфигурации, которая соответствует нашему начальному состоянию, проходит ли он процесс эволюции, соответствующий тому, что гласят наши законы движения, и попадает ли он в состояние, которое гласят наши законы движения? должно? Тот факт, что физика имеет такую ​​форму, позволяет нам эффективно представить ее в коде.

Физическая аналогия ставит модели вычислений, такие как лямбда-исчисление, π-исчисление или ро-исчисление, в резкое противопоставление таким моделям, как переходы JVM. Когда вы смотрите на фрагмент кода Java, у вас нет всей информации, необходимой для понимания того, как он будет себя вести. В зависимости от состояния JVM один и тот же фрагмент кода Java может вести себя совершенно по-разному. Напротив, вычислительные исчисления, упомянутые выше, сочетают форму с функцией. Что вы видите в выражении, то и получаете. С точки зрения физики, как ученому, единственное, что вам нужно перепроектировать, — это законы движения, то есть правила вычислений. Вам не нужно гадать о множестве скрытых состояний.

Как только мы видим различие между кодом и вычислением, различие между кодом и данными становится относительно интуитивным, хотя и несколько тонким. Данные в компьютерной программе также являются просто синтаксисом. В этом смысле он ничем не отличается от кода, который также является просто синтаксисом. Каждый программист на Лиспе понимает идею о том, что каким-то образом код — это данные, а данные — это код. Даже Java поддерживает своего рода метапрограммирование, в котором кодом Java можно манипулировать как объектами Java. Вопрос в том, существует ли реальная граница между кодом и данными?

Ответ однозначный да. Данные — это код с очень специфическими свойствами; например, код всегда доказуемо завершается. Не весь код делает это. Фактически, известное решение Тьюринга Entscheidungsproblem показывает нам, что мы не можем, вообще говоря, знать, когда программа остановится на какое-то время. язык, обладающий определенным качеством выразительности, то есть полнотой по Тьюрингу. Но есть менее выразительные языки, и в полных по Тьюрингу языках есть подходящие подъязыки или фрагменты, которые менее выразительны, чем весь язык. Данные находятся в синтаксисе, который позволяет доказать, что вычисления, связанные с фрагментом синтаксиса, будут остановлены. Точно так же данные находятся в синтаксисе, который позволяет доказать, что вычисление будет иметь только конечное ветвление.

Программисты не думают о таких данных, они просто узнают данные, когда видят их. Но в моделях вычислений, таких как лямбда-исчисление, которые не оснащены встроенными типами данных, все, даже такие вещи, как счетные числа или логические значения, истина и ложь, представлены в виде кода. Чтобы определить, какой код представляет собой данные, а какой представляет собой программу общего назначения, необходимо определить, когда код обладает свойствами, которые мы обсуждали выше. В общем, есть типы систем, которые могут обнаруживать подобные свойства. Опять же, это тонкий вопрос, но, к счастью, нам не нужно разбираться во всех тонкостях, и нам не нужно точно понимать, где проходит разделительная линия между данными и кодом, просто она есть.

Подводя итог, можно сказать, что и код, и данные — это просто синтаксис, представляющий состояние, в котором будет действовать правило или несколько правил. Данные выражаются в менее выразительном фрагменте синтаксиса, чем код, что придает им определенный или конечный характер, который не всегда нравится коду. Вычисление — это процесс эволюции, возникающий, когда некоторые правила взаимодействуют с представлением состояния. Какое отношение все это имеет к ИИ, или разуму, или даже ро-исчислению?

Рефлексия как определяющая характеристика интеллекта

Ро-исчисление имеет синтаксическое представление различия между вычислением и кодом. У него есть операция, которая выражает вычисление в виде фрагмента кода, чтобы с ним можно было работать, преобразуя его в новый код. Он также имеет операцию для превращения фрагмента кода обратно в вычисление. Ого, вы могли бы сказать, что это дерьмо следующего уровня. Но, как мы уже упоминали, программисты на Lisp и Java уже давно занимаются подобным метапрограммированием. Они должны. Причина связана с масштабом. Команды людей не могут управлять кодовыми базами, содержащими миллионы и миллионы строк кода, без автоматизированной поддержки. Они используют компьютерные программы для написания компьютерных программ. Они используют компьютерные программы для создания развертываний компьютерных программ. Метапрограммирование необходимо в современном мире.

<цитата>

Аргумент Смита состоит в том, что самоанализ, способность ума смотреть на собственный процесс ума, является ключевой особенностью интеллекта. Для некоторых это даже определяющая черта интеллекта.

Но еще в 80-х, еще на заре ИИ, исследователь по имени Брайан Кантуэлл Смит сделал наблюдение, которое нашло отклик у меня и многих других людей, занимающихся ИИ и смежными с ним областями. Аргумент Смита состоит в том, что самоанализ, способность ума смотреть на собственный процесс ума, является ключевой чертой интеллекта. Для некоторых это даже определяющая черта интеллекта. Чтобы сделать эту идею самоанализа, которую он назвал вычислительной рефлексией, конкретной, Смит разработал язык под названием 3-Lisp, который имеет те же операторы, что и ро-исчисление. В частности, в 3-Lisp есть синтаксис для представления преобразования вычислений в код и синтаксис для отражения кода обратно в текущие вычисления.

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

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

На самом деле идеи Смита о вычислительном отражении и его роли в интеллекте и разработке языков программирования послужили источником вдохновения для разработки ро-исчисления, в котором материализация и отражение рассматриваются как примитивные вычислительные операторы. Однако там, где 3-Lisp и ро-исчисление составляют компанию, 3-Lisp явно последователен. У него нет возможности разумно представить общество автономных вычислительных процессов, работающих независимо, при этом взаимодействуя и координируясь. Но в контексте теории разума именно это и нужно делать рассуждающему. Им нужна явная модель их социального контекста, состоящая из автономных агентов, действующих независимо, а также общающихся и координирующих свои действия.

Rho-Calculus: от 3-Lisp к обществу разума

Примерно в то же время, когда Смит разрабатывал свои идеи вычислительного отражения, Марвин Мински работал над своей знаменитой диссертацией об обществе разума. Моя точка зрения на предложение Мински заключается в том, что разум — это что-то вроде Конгресса США или любого другого совещательного органа. Он состоит из группы независимых агентов, которые борются за различные ресурсы (например, финансирование из налоговой базы). То, что мы считаем сознательным решением, больше похоже на результат длительного процесса обсуждения среди группы независимых, автономных агентов, который часто происходит далеко за пределами сознательного опыта. Но совещательный процесс приводит к обязательному голосованию, и это обязательное голосование воспринимается как сознательное решение.

Photo by Simon Kadula on Unsplash

Как можно примирить эту точку зрения, которая ставит большую часть вычислений за пределы сознательного рассуждения, с точкой зрения на разум как на рефлективный по своей сути, даже по определению? Ро-исчисление было разработано с учетом ответа на этот вопрос.

Ро-исчисление говорит, что вычислительные агенты бывают всего шести форм:

* 0 - остановленный или нулевой агент, который ничего не делает; * for( y <- x )P - агент, прослушивающий канал x и ожидающий данных, которые он свяжет с переменной y, прежде чем стать агентом P; * x!( Q ) - агент, отправляющий часть кода/данных по каналу x; * P|Q — агент, который на самом деле представляет собой параллельную композицию двух агентов, P и Q, работающих параллельно, автономно; * *x - агент, который отражает код, на который ссылается x, обратно в выполняющееся вычисление

Обратите внимание, как три из этих конструкций используют символ x. Два из них используют x, как если бы это был канал связи между агентами, а один из них использует x, как если бы это была ссылка на фрагмент кода. Единственная волшебная уловка, которую припасло для себя ро-исчисление, состоит в том, что каналы являются ссылками на часть кода. К этому нужно немного привыкнуть, но это приходит со временем.

<цитата>

Как сторонние наблюдатели социального контекста Алисы, мы можем записать ее поведение как параллельную композицию поведения каждого человека. В символах это P1 | П2 | … | Pn, где Pi — модель i-го индивидуума в социальном контексте Алисы. Теперь модель поведения Алисы нуждается в представлении этой параллельной композиции, чтобы ее собственное поведение могло представлять рассуждения об этом. В символах это @( P1 | P2 | … | Pn ).

Вооружившись именно такой информацией о ро-исчислении, мы можем вернуться к нашему повествованию об Алисе и найти скупое представление обо всех проблемах, с которыми сталкивается ее развитие социального и интроспективного интеллекта. Как сторонние наблюдатели социального контекста Алисы, мы можем записать ее поведение как параллельную композицию поведения каждого индивидуума. В символах это P1 | П2 | … | Pn, где Pi — модель i-го индивидуума в социальном контексте Алисы. Теперь модель поведения Алисы нуждается в представлении этой параллельной композиции, чтобы ее собственное поведение могло представлять рассуждения об этом. В символах это @( P1 | P2 | … | Pn ). Чтобы Алиса располагала эти данные там, где у нее есть к ним доступ, она помещает модель на канал x!( P1 | P2 | … | Pn ), и когда ей нужно их получить, она выполняет

for( y <- x )Алиса думает о своих коллегах( y ) | х!( P1 | P2 | … | Pn )

Основное правило вычислений в ро-исчислении, которое по духу очень похоже на бета-редукции лямбда-исчисления, заключается в том, что выражение, подобное этому, превращается в

Алиса думает о своих коллегах( @( P1 | P2 | … | Pn ))

Итак, теперь мысли Алисы о своих коллегах имеют явное представление об их поведении, доступное Алисе. С его помощью она может имитировать поведение своих коллег, моделируя поведение P1 | П2 | ... | Pn через операции над @( P1 | P2 | ... | Pn ). Мы можем смоделировать Алису, наблюдающую за реальным поведением своего коллеги, с помощью выражения вида Алиса | П1 | П2 | ... | Пн. Алиса может сравнить свою симуляцию со своими наблюдениями. На самом деле все, что мы можем смоделировать, также доступно Алисе как для запуска, так и для овеществления данных и сравнения кода и ее симуляций с тем, что она наблюдает в реальном поведении своего социального контекста. Это включает в себя собственное поведение Алисы.

Возможно, это прошло немного быстро, но подумайте об этом. Это наименьший набор операций, необходимых Алисе для одновременного моделирования своего социального контекста и себя в нем. В частности, потоки «сознательно доступны» Алисе только тогда, когда ее собственное поведение превращает эти потоки в данные, и ее обработка взаимодействует с этими данными. Этот аргумент является частью того, что было использовано при обсуждении дизайна ро-исчисления. Это наименьшая модель вычислений, которая примиряет аргументы Смита в пользу вычислительной рефлексии с аргументами Мински в пользу Общества разума, что согласуется с описанием организмов эволюционной биологией и теорией разума. Все, что меньше, упускает ключевой компонент ситуации.

Мы встретили врага, и это мы.

Этот аргумент объясняет, почему такая модель вычислений, как ро-исчисление, вполне может найти применение аппаратному обеспечению в мозгу Алисы. Ей нужны все элементы этой модели, чтобы конкурировать с другими представителями ее вида, которые также стремятся моделировать поведение в своем социальном контексте. Вот почему, вопреки позиции Джоши, я бы сказал, что мобильный параллелизм лежит в основе общего искусственного интеллекта.

Большое спасибо Ральфу Бенко за его безошибочно проницательные редакционные комментарии!


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE