Однако в сложной системе информация не просто скрыта. У каждого слоя своя специфика. Чтобы перейти из одного слоя в другой, надо виртуализировать необходимую информацию, то есть вывести некие отвлеченные сведения на определенный уровень. В примере с «Боингом» разработчик кресел знает только то, что ему требуется – стандартные параметры, позволяющие предусмотреть подвижность кресла, но ограничивающие процесс проектирования так, чтобы все кресла аккуратно умещались в салоне. Ничего, что касается аэродинамики, топлива, даже количества пассажирских мест, инженер не знает. По своему опыту могу сказать, что конструкторы самолетных кресел явно не подозревают о существовании людей ростом выше 180 см.
В нашем примере кресла – взаимозаменяемые модули. Функционирование кресел не влияет на способность самолета летать. Поэтому конструктор кресел знает о самолете больше, чем вы, но меньше, чем специалист, отвечающий за корпус авиалайнера. Вместе с тем инженерам по турбинам не нужна информация о конструкции кресла, а нужно многое другое.
Природе это известно с незапамятных времен, и в процессе эволюции организмов она задействует ту же стратегию. Различные системы в вашем мозге эволюционировали с расчетом на независимую работу. Например, функции слуховой системы не зависят от обоняния. Слуховая система не получает информации о запахах, да и для обработки слуховой информации она не нужна. Вы можете потерять обоняние и прекрасно слышать жужжание пчелы.
В многослойной структуре каждый слой системы работает автономно, потому что в каждом слое приняты свои специфические протоколы – комплекс правил и условий, которые накладывают ограничения на допустимые пограничные слои, или взаимодействия, как внутри данного слоя, так и между слоями. Вернемся к самолетному креслу. Инженер может сколько угодно играть с дизайном кресла, оставаясь в рамках нормативных параметров – протокола для уровня кресла. Протокол для слоя накладывает свои ограничения, но в их пределах оставляет достаточно гибкости.
Каждый слой в «этажерке» обрабатывает сигнал, полученный с предыдущей «полки», по своему протоколу, а результат передает на полку выше и/или возвращает на полку ниже. В следующем слое процесс повторяется уже по его собственному протоколу, который может быть таким же, как в нижнем слое, или совершенно иным, и новый результат поступает дальше, в более высокие слои. Ни одному слою неизвестно, какую информацию получил предыдущий слой и как она была обработана. В этом нет нужды, поэтому информация остается скрытой (абстрагированной). Протоколы позволяют каждому слою обрабатывать только ту информацию, что получена с соседних слоев. Информация, сформированная в результате обработки, может быть передана вверх и вниз. Тут кроется ловушка – в многослойной структуре информация не может перескочить через ступеньки. То есть шестой слой не может заниматься интерпретацией сигнала, выпущенного с четвертого слоя, поскольку в нем нет протокола для расшифровки такого сигнала; следовательно, нужен промежуточный пятый слой. Задача каждого слоя – обслужить те, что расположены выше, не раскрывая процессов, происходящих ниже[14].
Вот вам простой пример слоев с протоколами. Представьте себе, что вы оказались на вечеринке среди множества гостей из разных стран. Вы хотите поболтать с китаянкой – по-видимому, знакомой вашей сестры. Вы владеете только английским, а ваш партнер – английским и французским. Дама из Китая говорит только по-китайски, зато ее муж – по-китайски и по-французски. Каждый из вас играет роль слоя в переводческой «этажерке», причем в каждом слое используется собственный протокол преобразования входящей информации в исходящую. У вас есть протокол английской речи и передачи ее вашему партнеру. Ваш партнер принимает информацию от вас и, согласно протоколу обработки английской и французской речи, передает в следующий слой – мужу китаянки – французскую речь. Тот тоже владеет французским протоколом, но у него есть еще и протокол для китайского языка, и он передает жене китайскую речь. Гостья из Китая точно так же могла бы послать обратную информацию вам, однако ни вы, ни она не можете перепрыгнуть через промежуточные франкоязычные слои. Информация переходит по слоям вверх и вниз, но ее необходимо обработать в слоях с подходящими протоколами и передать в следующий слой. Самостоятельно вы ничего не сможете передать от английского стола китайскому за один этап.
Но при желании можно создать протокол передачи информации с английского на китайский. Многие так и делают. Это называется выучить язык, причем учиться можете не только вы, но и машины. Собственно, программисты применяют многослойную архитектуру уже давно – особенно в области искусственного интеллекта. Родни Брукс, гениальный профессор информатики из Массачусетского технологического института, выдвинул идею «категориальной архитектуры», которая много лет доминировала в робототехнике.
Звучит не очень понятно, хотя сама идея достаточно простая. В любой системе, будь то человек, компьютер, робот или библиотека, хранятся какие-то сведения. Общий их запас все время пополняется новой информацией. В идеале эта информация должна быть отнесена к той или иной категории, иначе говоря, усвоена существующей системой без осложнений. Роботу нужна именно такая архитектура.
Брукс отлично знал, что роботы не прошли проверку на категоризацию новых данных, потому что двадцать лет назад, когда он выдвинул эту идею, роботов бы заклинило, если бы на их пути оказался, скажем, зефир или вообще что-либо, чего нет в запрограммированном перечне объектов, которых следует остерегаться. Они не сумели бы перестроиться соответственно изменившимся условиям. А вот категориальная архитектура, будь она заложена в конструкции робота, позволила бы ему вносить изменения – раз за разом добавлять к существующим слоям новые. Каждый слой оказывал бы влияние на нижележащие и таким образом внедрялся бы в архитектуру более крупного масштаба. Как подытожил в «Энциклопедии психики» Хэрольд Пашлер, «ключевая идея состоит в том, что система не создает единого, цельного представления о мире – напротив, сенсорные сигналы обрабатываются по-разному на каждом уровне, так что между сенсорными данными и двигательными сигналами, необходимыми для управления исполнительными механизмами робота, устанавливаются более или менее прямые, специфические для поведения соответствия»[15]. То есть справляться с текущими трудностями роботу каждый раз помогают узкоспециализированные системы – быстродействующие, эффективные и полезные. Централизованной системы, которая меняла бы картину отклика, когда робот встречается с очередным незнакомым препятствием, не существует. Вместо нее добавляется отдельная инструкция для конкретной ситуации, так что разработчики все время добавляли новые и новые инструкции по преодолению все новых и новых трудностей, которые возникают в окружающей среде. Никто не пытается решить все и сразу с помощью одного главного органа. Новые слои добавляются в систему по мере поступления проблем. Это все очень напоминает модули, образующие многослойную архитектуру. Собственно, модуль и сам по себе может служить слоем – или же слой может складываться из нескольких модулей. Консолидированные (интегративные) модули, о которых шла речь в конце 4 главы, – это модули обработки информации, составляющие один из верхних слоев. Он получает информацию с предыдущей ступеньки и обрабатывает ее согласно своему протоколу так, чтобы выдать более сложный продукт – может статься, даже модель психического (модель психического мира другого) или самоосознание!
Слои обеспечивают гибкость. Внести обновления в многослойную систему легко и просто, благо менять приходится только один слой, сохраняя все остальные. Если же что-то пойдет не так, легко найти причину ошибки. Нет нужды отправлять в утиль или ремонтировать всю систему – достаточно исправить неполадки на одном или нескольких неработающих слоях. В многослойной системе вашего костюма вы можете сменить порванную рубашку, а вот новые брюки вам не понадобятся. Что касается мозга, возможно, вам будет труднее заменить его части, однако, если где-то возникнет сбой, вы не лишитесь всей системы.
Прелесть многослойной архитектуры в том, что она выполняет задачу для пользователя сложных систем, не посвящая его в подробности процесса. Высший слой смартфона – это слой приложений, и при такой схеме нам не надо знать или понимать, как работают остальные слои системы. Вряд ли вы хотите в обязательном порядке разбираться в протоколах распределения памяти каждый раз, когда вам надо отправить рассылку или щелкнуть фото. Точно так же мы должны поблагодарить судьбу за возможность пользоваться своим мозгом и не знать, как он работает. Нам неведом механизм превращения нашего обеда в энергию – мы просто съедаем его, и все. То же самое относится и к нашей психике. Мы понятия не имеем, как мы что-то делаем. Укажите на свой нос. Вы знаете, что, собственно, произошло? Вы не в силах ни понять, ни осознать, как это описывается с точки зрения формирования и передачи сигнала от нейронов к вашим мышцам. Мы используем свой разум – слои приложения в мозге, – чтобы произвести некие действия, которые составляют наше поведение, точно так же, как пилот авиалайнера использует программу, чтобы вести самолет. Но правда ли, что в живом мозге реализуется многослойная архитектура? Или это теоретическая модель, и на самом деле ей нет места в живой биологической системе?
Как это часто бывает, открытие нового подхода в науке или создание новой теории влечет за собой другое открытие – оказывается, те же идеи выдвигали и другие ученые, возможно, много лет назад. Сколько раз должны мы получить этот урок – что человеческая мысль является именно что мыслями человечества, которые на протяжении всей истории много кому приходили в голову? В данном случае нас интересуют Тони Прескотт, Питер Редгрейв и Кевин Герни из Шеффилдского университета. Все трое в нейробиологии, робототехнике и информатике, что называется, собаку съели и чрезвычайно умно распоряжаются полученными знаниями и опытом. В своей новаторской работе о многослойной структуре