Гораздо больше можно сказать о философском значении работ Тьюринга, Черча и Геделя, однако в рамках данного предисловия достаточно отметить следующее. Тьюринг показал, что в основе всех машинных вычислений лежит очень простой механизм. Поскольку машина Тьюринга (и, следовательно, любая вычислительная машина) способна определять дальнейший образ действий, исходя из результатов предыдущих операций, она способна принимать решения и моделировать произвольно сложные иерархии данных.
К декабрю 1943 года Тьюринг спроектировал и построил «Колосс», который часто называют первым компьютером в истории электронных вычислительных машин. «Колосс» предназначался для выполнения одной-единственной задачи – декодирования радиосообщений, зашифрованных нацистской машиной Enigma – и не мог быть перепрограммирован для выполнения другой задачи. Зато с дешифровкой он справлялся блестяще: считается, что именно благодаря ему союзники смогли взять верх над немецкими «люфтваффе» и выиграть решающую битву за Британию.
Все вышеизложенное послужило своеобразным фундаментом, на котором Джон фон Нейман создал архитектуру современного компьютера – машину фон Неймана, составляющую основу практически каждого автомата, изобретенного за последние шестьдесят шесть лет: от микроконтроллера стиральных машин до самых больших суперкомпьютеров. Это третья ключевая идея информационной эры. В статье «Первый проект отчета о EDVAC»,[1] датированной 30 июня 1945 года, фон Нейман изложил революционные принципы в области машинных вычислений. Модель фон Неймана состоит из центрального процессора, в котором выполняются арифметические и логические операции, блока памяти, в котором хранятся программа и данные, устройства массовой памяти, счетчика команд и каналов ввода-вывода. Данная концепция описана в первой части этой книги. Хотя статья фон Неймана, по сути, представляла собой внутренний проектный документ, она не только стала библией для конструкторов вычислительных машин 1940-х и 1950-х годов, но и значимо повлияла на архитектуру всех компьютеров, построенных с тех пор.
Машина Тьюринга не была рассчитана на практическое применение. Теоремы Тьюринга не имели никакого отношения к эффективности решения задач; они лишь позволяли определить круг тех задач, которые могли быть решены посредством машинных вычислений. Фон Нейман, наоборот, ставил своей целью формулирование практических принципов вычислительной машины. Так, в машине фон Неймана однобитовые вычисления Тьюринга заменены многобитовыми словами (как правило, количество битов кратно восьми). Если машина Тьюринга тратит огромное количество времени на перемещение ленты вперед и назад, чтобы сохранять и извлекать промежуточные результаты, то машина фон Неймана, напротив, снабжена памятью с произвольным доступом, поэтому любой элемент данных может быть извлечен немедленно.
Одним из важнейших принципов, предложенных фон Нейманом, является принцип хранимой программы, который он сформулировал десятью годами ранее: программа хранится в той же памяти, что и данные. Это позволяет перепрограммировать вычислительную машину для выполнения различного рода задач, а также использовать самомодифицирующийся код, допускающий применение некоторых форм рекурсии. До того времени практически все вычислительные машины, включая «Колосс» Тьюринга, могли решать только те задачи, для решения которых были предназначены изначально. Хранимая программа придала вычислительной машине поистине универсальный характер. Так, идея Тьюринга об универсальной машине получила реальное воплощение.
Другой ключевой принцип фон Неймана заключается в том, что каждая инструкция должна содержать код арифметической или логической операции, которую необходимо выполнить, а также адрес операнда в памяти. Данная формула впервые была предложена фон Нейманом в рамках его публикации, посвященной совместному с Дж. Преспером Эккертом и Джоном Мокли проекту EDVAC. Сам EDVAC был запущен только в 1951 году; к тому времени уже существовали другие вычислительные машины с хранимыми программами, в частности Манчестерская малая экспериментальная машина, ENIAC,[2] EDVAC[3] и BINAC.[4] Все они были созданы под влиянием работ фон Неймана теми же конструкторами: Эккертом и Мокли. Фон Нейман принял непосредственное участие в проектировании ряда этих машин, включая более позднюю версию ENIAC, которая поддерживала хранимую программу.
Можно назвать несколько предшественников архитектуры фон Неймана, однако ни один из них не являлся истинной машиной фон Неймана, за одним неожиданным исключением. «Марк I» Говарда Эйкена, построенный в 1944 году, имел элемент программируемости, но не использовал хранимую программу. Эта вычислительная машина считывала инструкции с перфорированной бумажной ленты, а затем выполняла каждую команду отдельно. Поскольку ветвления в программе отсутствовали, ее нельзя рассматривать как пример архитектуры фон Неймана.
Еще до «Марка I», в 1941 году, Конрадом Цузе была создана вычислительная машина Z3. Она тоже считывала программу с ленты (точнее, с перфорированной кинопленки) и не могла совершать условные переходы. Интересно, что Цузе получил поддержку от немецкого Научно-исследовательского института авиации, который использовал Z3 для своих расчетов, однако его просьба о государственном финансировании замены реле на электронные трубки была отклонена. Нацисты считали, что машинные вычисления «не помогут выиграть войну».
Единственный истинный предшественник концепции фон Неймана появился на целых 100 лет раньше. В аналитической машине Чарльза Бэббиджа, описанной им впервые в 1837 году, идея хранимой программы реализована с помощью перфорированных карт, заимствованных из ткацкого станка Жаккара. Память с произвольным доступом была рассчитана на одну тысячу слов по 50 десятичных цифр каждое (около 21 килобайта). Инструкции не только содержали код операции и номер операнда, как и все современные языки программирования, но и включали ветвление и циклы. Это значит, что описанное Бэббиджем представляло собой настоящую машину фон Неймана. Впрочем, он явно не мог вообразить себе всех технических и организационных сложностей, связанных с проектированием такого рода автоматов, а потому его аналитическая машина так и осталась недостроенной. Неясно, знали ли пионеры информатики ХХ века, в том числе фон Нейман, о наработках Бэббиджа.
Хотя машина Бэббиджа так и не была опробована на практике, она тем не менее привела к возникновению такой области, как разработка программного обеспечения. Ада Байрон, графиня Лавлейс и единственный законнорожденный ребенок поэта лорда Байрона, написала программы для аналитической машины Бэббиджа (которые, между прочим, ей приходилось отлаживать в уме), а также перевела статью итальянского математика Луиджи Менабреа, снабдив ее собственными пространными комментариями. Она писала, что «аналитическая машина плетет алгебраические узоры, как жаккардовый ткацкий станок – цветы и листья». Вероятно, Ада Байрон первой предположила возможность создания искусственного интеллекта, но пришла к выводу, что аналитическая машина «не может породить нечто новое».
Концепция Бэббиджа поистине удивительна, учитывая эпоху, в которой он жил и трудился. Однако к середине XX века его работа затерялась в тумане десятилетий. Именно фон Нейман сформулировал ключевые принципы компьютера, каким мы знаем его сегодня, а его машина была и остается основной моделью машинных вычислений.
Впрочем, мы не должны забывать, что элементы машины фон Неймана постоянно обмениваются данными; если бы не теоремы Шеннона и методы, которые он разработал для передачи и хранения цифровой информации, ее бы не существовало.
Это подводит нас к четвертой важной идее – поискам способов наделить компьютеры интеллектом и опровергнуть заключение Ады Байрон о неспособности машины мыслить творчески. Алан Тьюринг первым сформулировал такую цель в своей статье 1950 года «Вычислительные машины и разум», которая включает ныне знаменитый тест Тьюринга. Последний сводится к следующему вопросу: достиг ли искусственный интеллект уровня человеческого интеллекта? В настоящей книге, после обсуждения предлагаемой им архитектуры, фон Нейман рассматривает человеческий мозг. В конце концов, этот орган – наилучший пример интеллектуальной системы, которым располагает человечество. Если мы сможем изучить его методы, мы сможем использовать биологические парадигмы для создания более умных машин. Эта книга представляет собой самое первое серьезное исследование человеческого мозга с точки зрения математика и пионера информационной эры. До фон Неймана информатика и нейронаука были подобны двум островам без моста между ними.
По иронии судьбы, последней работой одного из самых блестящих математиков XX века и одного из пионеров компьютерной эры стало исследование человеческого интеллекта в рамках серии лекций для Йельского университета. К сожалению, из-за болезни фон Нейман так и не прочел эти лекции и даже не закончил рукопись. Тем не менее они остаются блестящим и пророческим предвестием самого, на мой взгляд, дерзкого и важного проекта человечества.
Фон Нейман начинает с описания сходств и различий между вычислительной машиной и человеческим мозгом. Учитывая, что писал он в 1955 и 1956 годах, рукопись удивительно точна, особенно в тех аспектах, которые предлагаются для сравнения. Фон Нейман отмечает, что выход нейронов носит цифровой характер: аксон либо порождает нервный импульс, либо нет. В то время это было далеко не очевидно: выходной сигнал вполне мог оказаться аналоговым. Так, дендриты, например, работают по аналоговому принципу. Фон Нейман описывает вычисления, которые производит нейрон, как взвешенную сумму входных сигналов с неким порогом. Данная модель работы нервной клетки легла в основу такого направления, как коннекционизм – построение искусственных систем (как с точки зрения технического, так и программного обеспечения) по принципу организации и функционирования живого нейрона. Первая такая коннекционистская система была создана в 1957 году Фрэнком Розенблаттом и представляла собой программное обеспечение для IBM-704 Авиационной лаборатории Корнелла.
Сегодня мы гораздо больше знаем о том, как именно нейроны сочетают входные сигналы, хотя основополагающая идея об аналоговом принципе работы дендритов сохраняется. С нашей стороны было бы неразумно ожидать, что фон Нейману, писавшему в 1957 году, будут известны точные механизмы обработки информации в нервной системе, однако ключевые моменты, на которых он строит свои выводы, остаются в силе.
На основании представления об универсальности вычислений фон Нейман приходит к заключению, что, несмотря на разницу в архитектуре и строительных блоках мозга и вычислительной машины, его машина тем не менее может имитировать работу мозга. Обратное, впрочем, неверно, поскольку мозг не является машиной фон Неймана и не имеет хранимой программы как таковой. Его алгоритм заложен в самой его структуре.
Фон Нейман справедливо утверждает, что нейроны способны выявлять закономерности во входных данных, которые, как мы теперь знаем, закодированы в соответствующих концентрациях нейротрансмиттеров. Во времена фон Неймана другие способы – создание и разрушение связей между нервными клетками – еще не были известны.
Фон Нейман отмечает, что скорость обработки информации нейроном чрезвычайно низкая, порядка 100 вычислений в секунду, однако мозг компенсирует это массовым параллелизмом. Все его 1010 нейронов обрабатывают информацию одновременно (это число является достаточно точным; современные оценки колеблются между 1010 и 1011). На самом деле правильнее говорить даже не об отдельных нервных клетках, а об их связях, количество которых в среднем составляет около 103 на 1 нейрон.
Описания механизмов функционирования нейронов, предложенные фон Нейманом, на удивление точны, учитывая «первобытное» состояние нейронауки в то время. Единственное, с чем я не могу согласиться, – это оценка емкости памяти мозга. Фон Нейман полагает, что мозг хранит поступающую в него информацию на протяжении всей жизни человека. Шестьдесят лет – это примерно 2 × 109 секунд. Если допустить, что каждый нейрон из 1010 принимает 14 единиц информации в секунду (на самом деле эта цифра в три раза меньше), то емкость памяти мозга будет составлять около 1020 бит. Однако реальность такова, что мы помним лишь очень небольшую часть наших мыслей и опыта. Кроме того, эти воспоминания сохраняются не в виде конфигураций битов низшего уровня (такого, как видеоизображение), а скорее как последовательности более высокоуровневых шаблонов. Кора головного мозга представляет собой иерархию распознавателей шаблонов. Некоторые из них распознают определенные топологические формы, например перекладину в заглавной букве «А». На следующем уровне распознаются конкретные буквы, например буква «A». На еще более высоком уровне распознаются слова, например «арбуз». В другой части коры может происходить распознавание предметов (арбуз); в третьей части – услышанного слова («арбуз»). На гораздо более высоком концептуальном уровне распознаватель может заключить: «Это было забавно». Наши воспоминания о событиях и мыслях кодируются в рамках этих высокоуровневых распознаваний. Допустим, мы хотим вспомнить некий опыт. Происходящее в нашей голове не будет иметь ни малейшего сходства с воспроизведением видеосигналов. Скорее, мы вспоминаем последовательность высокоуровневых шаблонов. Фактически мы вынуждены заново, шаг за шагом, воссоздавать прошлый опыт, ибо наша память не сохраняет подробности в явной форме.