Выбрать главу

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

На рис. 16 приведен пример “зрительной микросхемы”. Цифровые микросхемы — важная разновидность вычислительных устройств, которая используется в калькуляторах, компьютерах, телефонах, практически во всей современной электронике. Они представляют собой совокупность так называемых логических вентилей, или гейтов, выполняющих простые логические операции: например, И-вентиль дает на выходе 1, только если каждый из входных сигналов представляет собой 1. Любой участок микросхемы — в том числе выход — всегда находится в одном из двух состояний: 0 или 1. В отличие от электронных микросхем, где используются металлы или полупроводники для кодировки состояний 1 и 0, зрительные микросхемы вроде той, что показана на рис. 16, опираются на неоднозначные зрительные стимулы (такие, которые, как и составляющие их компоненты, могут быть интерпретированы двояко). Любой участок контура на рис. 16 (за исключением точек ввода) может быть воспринят двумя разными способами: как наклоненный к вам или от вас. Этим вашим восприятием наклона и определяется состояние микросхемы, 1 или 0, в данной точке. Результат на выходе определяется тем, как вы воспринимаете наклон контура в специально обозначенной точке — в данном случае она расположена снизу. Точки ввода данных в зрительных микросхемах представлены однозначными стимулами, наклоненными либо определенно к вам (1), либо от вас (0). Один из двух таких входов на рис. 16 находится в состоянии 1, а другой — в состоянии о. Также в данной микросхеме содержится три типа логических вентилей: НЕ (переключающие состояние схемы с 1 на 0 или наоборот), И (которые выдают значение 1, только если оба входа находятся в состоянии 1) и еще вентиль ИЛИ (выводит 1, если хотя бы один из двух входов находится в состоянии 1). Вентили И, ИЛИ функционируют благодаря частичной прозрачности нарисованных элементов, делающей одну из двух возможных интерпретаций состояния микросхемы более вероятной. Например, вентиль внизу рис. 16 — это ИЛИ-вентиль (при беглом взгляде он кажется наклоненным к вам). Такое восприятие обеспечивают два частично просвечивающих отрезка в его левой части. Вся представленная схема является схемой типа “исключающее ИЛИ” — иными словами, она выводит 1 лишь в том случае, если один из входов находится в состоянии 1. Поскольку входы в данном случае имеют значения 1 и 0, на выходе получается 1. То есть в связи с тем, что один из входов изображен наклоненным к зрителю, а другой — от зрителя, люди, если подойдут к делу ответственно, будут воспринимать нижнюю часть схемы скорее как наклоненную к ним.

Рис. 16.

Пример того, что я называю "зрительной микросхемой”. Данный контур использует нашу зрительную систему для вычисления функции “исключающего ИЛИ” (XOR), то есть такой функции, которая дает на выходе 1 в том случае, если только один из входных сигналов является 1. Построена эта "микросхема” из неоднозначных зрительных стимулов, которые могут быть восприняты двумя четко различимыми способами: как повернутые к вам или от вас. В любой точке схемы значение сигнала, 0 или 1, зависит от вашего восприятия. Если вам кажется, что какая-то часть контура повернута “от вас”, значит, здесь значение сигнала о; если же она повернута "к вам”, значение сигнала 1. Вывод данных производится в нижней части: результат действия всей схемы в целом определяется вашим восприятием рисунка в данной точке. Моя “микросхема" состоит из “проволоки” (прямоугольный орнамент), инверторов (НЕ-шлюзов, в которых происходит переключение состояния контура из положения “к вам" в положение “от вас" или наоборот), И-шлюзов, где выход в нижней части воспринимается как положение “к вам" только в том случае, если оба верхних входа воспринимаются повернутыми “к вам”, ИЛИ-шлюза, выход из которого обычно воспринимается как положение “к вам", если хотя бы один из верхних входов воспринимается повернутым “к вам”. В приведенном примере входами данной “микросхемы” являются непрозрачные параллелепипеды в верхней части рисунка: их положение недвусмысленно, они всегда либо 1 — повернуты “к вам", либо о — “от вас”. Изображенный контур чаще дает на выходе 1 (“к вам"), чего и следует ожидать от микросхемы с такими входными данными. Для того чтобы зрительная система на самом деле могла производить подобные вычисления, вы должны следовать взглядом по микросхеме от входов до выхода, не смущаясь тем, что в некоторых точках контур будет “переключаться”, меняя конфигурацию, как в эшеровских фантазиях, из-за чего на выходе в принципе может получиться о. (На идею представленной здесь разновидности НЕ-шлюзов меня вдохновил Брам ван Хувельн.)

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

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

Выше я упоминал, что после первой неудачной попытки обмануть зрительную систему и заставить ее производить вычислительные операции по моему желанию, я сдался. “Придется ждать, когда кто-нибудь другой покорит компьютерный потенциал нашего зрения”, — думал я. И лишь спустя год, в 2004 году, изучая эволюцию зрительной системы, я начал осознавать, что на самом-то деле вычислительные способности зрительных отделов нашего мозга давно уже укрощены! Такая технология, как письменность, не только наделила нас способностью к спиритизму и сделала превосходными слушателями. Она позволила нам стать программируемыми — причем не в смысле промывания мозгов, как в фильме “Степфордские жены”. До возникновения письменности мы были, как и калькуляторы, способны производить лишь относительно небольшое количество наиболее важных вычислений. Лида Космидес и Джон Туби уже лет двадцать твердят нам, что мы созданы эволюцией для выполнения лишь тех задач, которые имели к нам непосредственное отношение (например, чтобы замечать, что соплеменник взял себе больше мяса, чем ему причиталось). Мы вовсе не стремились стать универсальными вычислительными машинами, вроде наших компьютеров, и еще менее стремились к тому, чтобы любой встреченный программист мог поставить нам новый “софт”.

Но несмотря на то, что эволюция не делала из нас персональные компьютеры, могло ли выйти, что мы все-таки стали универсальными вычислительными машинами, на которые можно установить любое программное обеспечение? Во-первых, давайте разберемся, что это вообще означает — запускать программы на самих себе. Это означает всего-навсего следовать сложному набору правил, операций, алгоритмов или рецептов. Строго говоря, любой рецепт — это тоже программа. Готовя яичницу, вы следуете простому набору правил, хранящемуся в памяти. Вы производите расчеты, результаты которых на каждом этапе говорят вам, что делать дальше с яйцом, сковородой и лопаткой. Но как рецепт может быть программой, да и вообще иметь отношение к вычислениям, если в нем нет цифр? Программисты действительно предпочитают говорить о вычислениях исключительно на языке цифр, но лишь потому, что цифрами можно обозначить все, что угодно. Например, число 3708 может быть цифровым кодом, расшифровывающимся как “яйцо”. Рецепт останется программой даже в том случае, если в выкладки добавятся овощи.