Механизация алгоритма
Алгоритмы ручных расчетов механизировались постепенно. В Европе XVII века естествоиспытатели Паскаль и Лейбниц разработали ручные калькуляторы для автоматизации четырех базовых действий с десятичной системой счисления. Эти устройства вовсе не были кабинетными диковинками и сигнализировали о глубоких эпистемологических изменениях. Нововременная мысль тогда уже развивалась в тесной связи с машинами – тесной до такой степени, что, как свидетельствуют документы, механическое мышление влияло на философское. Знаменитый «метод» Декарта, например, выглядит весьма «механическим» в стремлении разложить задачу на простые элементы. По словам польского экономиста Генрика Гроссмана, Декарт не случайно придумал рациональный метод, занимаясь проектированием собственных механизмов. Но Гроссман отмечает также и более глубокую связь между математикой и машинами: «Каждое математическое правило носит механический характер, избавляющий от интеллектуальной работы и больших расчетов». И как показывают исследования, этот экономический принцип – экономия времени, труда и ресурсов – и сегодня остается ключевым аспектом алгоритмического мышления и связанных с ним практик[109].
Как мы увидим в следующей главе, в контексте индустриальной экономики начала XIX века первым механизированным вычислительным алгоритмом стал разностный метод Гаспара де Прони, предназначенный для расчета больших логарифмических таблиц, и именно его Чарльз Бэббидж использовал в Разностной машине. Разностная машина спроектирована как воплощение этого алгоритма, но Бэббидж также задумал программируемую Аналитическую машину, которая могла бы работать с различными видами уравнений, но так и не была создана. Первым компьютерным алгоритмом, или «программой», считается «диаграмма Ады Лавлейс для вычисления чисел Бернулли», написанная для Аналитической машины. Вычислительные машины Бэббиджа представляют собой точку схождения счетных алгоритмов и промышленной автоматизации; в числе самых серьезных проблем, с которыми эти машины столкнулись, можно назвать представление десятичной системы в механических шестернях[110].
В ХХ веке счетные алгоритмы успешно автоматизировались благодаря гибкости двоичной системы[111]. Реализовать двоичную запись в электрическом устройстве гораздо проще, чем десятичную в механизме, поскольку наличие или отсутствие электрического тока (включено/выключено) может непосредственно представлять цифры 0 и 1. В этом случае сложение и вычитание максимально упрощаются. Технически двоичная запись стала применяться и кодироваться в электрических машинах после публикации в 1938 году магистерской диссертации американского математика Клода Шеннона «Символический анализ релейных и переключательных схем»[112]. Шеннон впервые предложил использовать двоичные свойства электрических переключателей для представления не только двоичных чисел и операций с ними, но и логики высказываний – в частности, булевых логических операторов И, ИЛИ и НЕ.
После Второй мировой войны двоичный код, архитектура фон Неймана и инженерная реализация эффективных логических затворов на микрочипах позволили создать быстрые ЭВМ и формализовать вычислительные алгоритмы большего размера и большей сложности. Впервые в истории последовательности числовых знаков стали представлять не только величины, но и инструкции[113]. Так называемая вычислительная революция заключалась не только в использовании двоичных числовых знаков (двоичные цифры или биты) для кодирования человеческого языка и аналогового контента (оцифровка), но и в ускорении механических вычислений посредством двоичной логики (или булевой логики). Вопреки распространенному мнению о строгом разделении аппаратного и программного обеспечения, цифровые вычисления представляют собой сплетение в одном и том же носителе информации и инструкций, где двоичные числовые знаки и булева логика выступают взаимодополняющими формами. Другими словами, в цифровых вычислениях алгоритм счисления (двоичные числовые знаки) и алгоритм расчета (двоичная логика) практически стали одним целым.
В цифровую эпоху алгоритм возвысился до роли абстрактной машины (известной под разными именами – программа, программное обеспечение, код и т. д.), которая управляет электронно-вычислительными машинами. Как упоминалось в начале главы, самое известное сейчас определение алгоритма принадлежит компьютерной науке: «Конечная процедура пошаговых инструкций для преобразования ввода в вывод вне зависимости от данных и с наилучшим использованием имеющихся ресурсов»[114]. Абстрагирование логики от содержания – один из ключевых аспектов технического и когнитивного развития. Как и другие техники абстракции, алгоритм должен работать независимо от ограничений окружающей среды и источника данных. Однако в этой главе я ставлю под сомнение толкование абстракции как отделения от мира и его исторического развития. Фактически появление машинного обучения перевернуло статичное определение алгоритма с ног на голову: алгоритмы машинного обучения стали адаптивными, и на смену жестким наборам правил пришло «обучение» правилам из данных.
Каноническое определение описывает алгоритм как применение к некоторым входным данным строгих правил по принципу «сверху вниз». В этом случае данные не влияют на поведение алгоритма: они представляют собой пассивную информацию для обработки по правилам. Напротив, алгоритмы машинного обучения меняют свои внутренние правила (т. н. параметры) в соответствии с входными данными. Таким образом, данные перестают быть, скажем так, пассивными и становятся активной информацией, которая влияет на параметры пошаговой процедуры, уже не строго предзаданной алгоритмом. Прорыв машинного обучения заключается именно в этом сдвиге: алгоритмы анализа данных становятся динамичными и меняют жесткую структуру вывода для приспособления к свойствам поступающих данных, которые обычно касаются логических и пространственных отношений. Канонический пример – искусственная нейронная сеть для распознавания образов, которая изменяет параметры своих узлов в соответствии с отношениями между элементами визуальной матрицы. В этом смысле новейшие алгоритмы ИИ не слишком отличаются и не так уж далеко ушли от древних математических практик, возникших в результате непрерывного подражания конфигурациям пространства, времени, труда и социальных отношений.
Как заметил историк науки Юрген Ренн, после работ Дамерова алгоритмы машинного обучения уже не предстают чем-то «сверхчеловеческим» и оказываются частью цикла интернализации и экстернализации когнитивных функций, присущего всем культурным технологиям:
Эта вводная глава служит для того, чтобы показать концепцию алгоритма в перспективе – в историческом контексте, внутри долгой эволюции систем знаний. Говоря кратко, торговое ускорение позднего Средневековья и подъем информационного общества способствовали формализации алгоритма в том виде, в каком он известен сегодня. По лингвистическому совпадению средневековый термин algorismus ознаменовал переход от аддитивной к позиционной системе счисления, а недавно устоявшийся термин «алгоритм» – переход от десятичной к двоичной системе числовых знаков. Речь не о просто формальных и технических, но и экономических сдвигах; в конечном счете индо-арабские числа и алгоритмы ручного счета получили распространение за счет упрощения бухгалтерского учета и торговых операций, а двоичные числа – за счет возможности их реализации в электрических схемах и логических затворах, нужных для ускорения промышленной автоматизации и государственного управления. Первый переход соотносится с ранним меркантилизмом, а второй – с промышленным капитализмом и в особенности с его потребностью ускорять коммуникационные технологии и автоматизировать умственный труд[116].
Часть 1
Индустриальная эпоха
2. Бэббидж и механизация умственного труда
Вычисление как разделение труда
В Англии начала XIX века компьютерами, то есть вычислителями, называли не машины, а людей – офисных служащих, зачастую женщин, которым приходилось вручную вести утомительные расчеты для правительства, Астрономического общества и британского флота. Время от времени «компьютеры» работали из дома, получая по почте бесконечные списки чисел и отправляя обратно результаты расчетов. С исторической точки зрения именно так выглядела первая вычислительная сеть — как домашний труд с вероятным привлечением членов семьи. Размышляя о рационализации трудоемкого и чреватого ошибками процесса, полимат Чарльз Бэббидж задумал заменить «компьютеры» с их однообразной работой автоматизированной паровой машиной. Впоследствии Генри Колбрук, вручая Бэббиджу в 1823 году золотую медаль Лондонского астрономического общества за изобретение Разностной машины, заявил:
Разностная машина Бэббиджа, знаменитая предшественница современных компьютеров, появилась на свет благодаря деловым амбициям – желанию автоматизировать вычисления логарифмов и продавать сверхточные логарифмические таблицы, которые играли важную роль в астрономии и требовались для сохранения британской гегемонии в морской торговле. Таким образом, необходимость решить задачу определения долготы в открытом море дала дополнительный импульс развитию механизированных вычислений. Тогда уже существовали небольшие механические калькуляторы, но они не были автоматизированы и позволяли выполнять только основные математические операции. У Бэббиджа возникла идея соединить сложный логарифмический калькулятор и производимое паровым двигателем непрерывное движение, чтобы получить не просто счетное устройство, а счетную машину, которая превратит расчеты в бизнес промышленного масштаба. Новое слово «машина» [engine] подхлестывало фантазии о неограниченной производительности и бесконечном экономическом росте. Идея автоматического компьютера-вычислителя (в современном смысле этого слова) возникла из проекта механизации умственного труда клерков, а не из старой алхимической мечты о создании мыслящих автоматов, хотя подобный нарратив звучал в XIX веке не реже, чем в эпоху корпоративного ИИ, причем с той же целью – придать бизнесу респектабельность[119].
Какой именно «интеллектуальный процесс» (умственный труд) хотел механизировать Бэббидж? Это ключевой вопрос, который нужно прояснить, если мы хотим понять ограничения и возможности вычислений, иначе уже одно только определение ИИ усилит недоразумения. Первым механизированным видом умственного труда стал ручной счет — особый навык, который воспроизводился вплоть до одной из моделей машины Тьюринга, задуманной как буквальное воплощение телеграфной машинистки («вычислительницы»), считывающей и записывающей цифры на ленте. Как мы увидим в главе 9, иная генеалогия вычислений и ИИ не имеет ничего общего с этим образом, который никак не связан с искусственными нейронными сетями для распознавания паттернов.
Разностная машина Бэббиджа – необычный артефакт. Она не была компьютером в современном понимании, поскольку в ней программное и аппаратное обеспечение представляли собой одно целое, а различия между инструкцией и информацией не существовало (см. рис. 2.1). Одновременно будучи и программой, и оборудованием, Разностная машина эстетически интригует современного наблюдателя. Латунные шестерни и вращающиеся цилиндры в физическом смысле воплощают алгоритм – метод разностей французского математика Гаспара де Прони для упрощения расчета квадратов целых чисел и логарифмов. Разностная машина также не была компьютером в современном смысле потому, что ее нельзя было программировать: звание промышленной машины с независимым вводом информации принадлежит куда более скромному Жаккардову ткацкому станку[120]. Прототип Разностной машины так и не был завершен, а Жаккардовы станки, ставшие двигателем индустриальной эпохи, выпускали тысячами. Именно этот станок установил в качестве стандарта хранения информации перфокарты, которые IBM использовала в неизменном виде вплоть до конца XX века[121]. Более того, первая «цифровая картинка», то есть изображение, описанное числовой последовательностью, – тоже ткацкий артефакт. В 1839 году портрет самого Жаккарда была выткан с помощью 24000 карт[122]. Бэббидж хранил копию портрета Жаккарда в кабинете и даже принял решение использовать перфокарты для ввода информации в другом нереализованном прототипе – Аналитической машине. В отличие от предшественницы, по задумке она могла решать различные типы уравнений, поскольку информация уже на теоретическом уровне отделялась от инструкций.
Рис. 2.1. Разностная машина Бэббиджа (Babbage Ch. Passages from the Life of a Philosopher. London: Longman, Roberts & Green, 1864, первая обложка)
Разностную машину не изобрел одинокий созерцательный ум Бэббиджа сам по себе. Как показывает Саймон Шаффер, «центры разумности» [places of intelligence], разбросанные по всей Англии, помогали Бэббиджу экспериментировать с механическими вычислениями и в конечном итоге послужили первоисточником его «машинного разума»[123]. Шаффер замечает, что Бэббидж поддерживал с промышленными мастерскими как локусами знаний более тесные отношения, чем с университетами, которые в то время не могли ничего предложить, кроме консервативных теоретических учебных программ. Хотя агиографы по-прежнему изображают Бэббиджа одиноким гением, в реальности он был глубоко вовлечен в круги промышленников и участвовал в дебатах о зарождающейся дисциплине политической экономии. Ему принадлежит одно из самых влиятельных руководств эпохи по управлению производством – сочинение «Об экономике машин и мануфактур» (1832).
Его первые же строки подтверждают, что автоматизированные вычисления «изобрела» не абстрактная математика, а прикладное разделение труда: «Настоящий труд может считаться одним из результатов работы Счетной машины, конструированием которой я так долго руководил»[124]. Это историческое свидетельство того, что вычисления как выражение разделения труда были частью промышленного капитализма с его самой зари, а вовсе не стали продуктом его последних достижений. Прислушавшись, как Бэббидж пытается убедить читателя, что первое руководство по управлению промышленным производством вдохновлено проектом автоматизированных вычислений, историк-материалист, несомненно, воспримет эту автомифографию критически. Разве не проблемы организации труда и нарушения субординации привели к изобретению новых дисциплинарных техник, побуждая Бэббиджа всматриваться в топки индустриальной Европы?
Учесть часы
Особый импульс к механизации умственного труда и изобретению автоматизированных вычислений в Англии дала нужда в сверхточных логарифмических таблицах, которые в эпоху агрессивной колониальной экспансии имели решающее значение для ориентации в море. Таблицы, применявшиеся для расчета долготы на открытой воде, были крайне ненадежны – человеческие просчеты приводили к кораблекрушениям и крупным коммерческим убыткам. Согласно агиографическому анекдоту, Бэббидж, размышляя над многочисленными ошибками в логарифмических книгах, воскликнул: «Хотел бы я, чтобы эти расчеты делал пар!»[125] Однако первый проект по ускорению расчета логарифмических таблиц состоялся не в Англии, а во Франции – в 1791 году. Революционное правительство взялось за внедрение метрической системы измерений, вкладываясь в то, что Лоррейн Дастон назвала «большими расчетами» (ср. с «большими данными»)[126]. Преследуя амбициозную цель сделать десятичную систему стандартом угловых измерений, правительство попросило Гаспара де Прони разработать деление квадратного угла на 100, а не на 90 градусов, для чего требовалось логарифмически перевести старые радиальные деления в новые. И хотя план угловой реформы потерпел неудачу и существовавшее с шумерских времен деление до сих пор остается глобальным стандартом, опыты де Прони приблизили рождение автоматизированных вычислений.
В «Исследовании о природе и причинах богатства народов» шотландский экономист Адам Смит представил знаменитое объяснение разделения труда на примере производства булавок. Вдохновленный этим, де Прони разработал своего рода коллективный алгоритм для расчета логарифмов. По его задумке рабочий процесс следовало организовать как социальную пирамиду. На вершине помещается класс математиков, которые формулируют задачу и передают ее второму классу, «алгебраистам». Те составляют простые операции и готовят данные для третьего класса, людей-компьютеров, которые выполняют все фактические расчеты на бумажных листах, а затем возвращают их начальству (см. рис. 2.2). Студенты, часто женщины и иногда «множество безработных парикмахеров» «записывали на страницах числа, складывая их и вычитая»[127]. Алгоритм де Прони использовал упомянутый метод разностей, основанный на том, что разность между квадратами последовательных чисел постоянна, и поэтому можно интерполировать значение следующих квадратов, заменив сложное умножение простым сложением и вычитанием[128].
Бэббидж хотел заменить третью часть вычислительной пирамиды (рабочих) машиной, поскольку они занимались утомительным расчетом простой разности с помощью сложения и вычитания. Метод разностей дал машине Бэббиджа и алгоритм, и имя – Разностная машина. Как уже упоминалось, в то время существовали работавшие от ручного приложения сил механические калькуляторы для основных математических операций. У Бэббиджа возникла идея воплотить конкретный алгоритм в механическом устройстве, использовав в качестве источника движения паровой двигатель, чтобы превратить расчет логарифмических таблиц в масштабный промышленный бизнес. Единожды запущенная, Разностная машина должна была без остановок вычислить целую логарифмическую таблицу. По удивительной задумке Бэббиджа, зубчатые колеса из латуни и дерева наделялись неограниченной вычислительной мощностью. Сегодня использование пара в качестве источника энергии для расчетов сохранилось только в научно-фантастическом жанре стимпанк, но мир Бэббиджа совсем не похож на наш. Это был мир, где автоматизированные вычисления выполнялись без электричества.
Рис. 2.2. Схема применения метода разностей (алгоритма) де Прони к разделению труда (Babbage Ch. On the Economy of Machinery and Manufactures. London: Charles Knight, 1832. P. 161)
Первый прототип Разностной машины Бэббиджа был скромен и все еще приводился в движение вручную. Любопытно, что первым устройством, которое перевело в материальную форму алгоритм де Прони для ручного счета, всем знакомо: это часы (см. рис. 2.3). В книге 1832 года Бэббидж изложил общую концепцию Разностной машины в главе, о которой часто забывают. Именно в главе под названием «О разделении умственного труда» (On the Division of Mental Labour) он предположил: «Возможно, некоторым нашим читателям это покажется парадоксальным, но разделение труда можно с равным успехом применить к умственным операциям, тем самым обеспечив сопоставимую экономию времени»[129]. Следуя разностному методу де Прони, Бэббидж разделил вычисление логарифмических таблиц на взаимозаменяемые шаги и собрал их в новый механический алгоритм. Три столбца таблицы разностного метода были представлены в виде часов, которые Бэббидж впоследствии реализовал в виде вращающихся цилиндров. В первом рабочем прототипе разностной машины (ок. 1833) пошаговое вращение цилиндрических «часов» заменило движения руки, добавлявшей цифры на бумаге. Часовой артефакт выступал образцовым эвристическим посредником между системой счисления и алгоритмом расчета. Если цель автоматизации заключается в экономии времени, то ее реализация в форме часов сама по себе символична. Не менее красноречиво и то, что стрелка часов, которой измеряют производительность ручного труда на фабрике, автоматизировала ручной расчет[130].
Рис. 2.3. Проект реализации метода разностей (алгоритма) де Прони в форме механизма (Babbage Ch. On the Economy of Machinery and Manufactures. London: Charles Knight, 1832. P. 161)
Цилиндрические часы получали число в виде постепенного вращения, прибавляли его к уже имеющемуся числу поворотов и выполняли общий вывод в виде дальнейшего движения. Все происходило внутри механизма, способного лишь необратимо выполнять только одну большую непрерывную операцию. Изобретение Бэббиджа не проводило различий между программой и оборудованием, и точно также для часовых цилиндров не существовало различий между числами и процессами, памятью и операциями. Две функции планировалось разделить в Аналитической машине (в современных компьютерах это разделение приняло формы памяти и центрального процессора). Другим ограничением механического алгоритма Бэббиджа была десятичная система и, в частности, проблема автоматизации переноса десятков, которая преследовала механические расчеты со времен Паскаля[131]. Нужно помнить, что в итоге двоичная система (благодаря Лейбницу, Булю, Тьюрингу, Шеннону, фон Нейману и другим) возобладала потому, что технически упрощает сложение и вычитание. Электрический переключатель может включаться и выключаться, причем два состояния представляют все необходимые единицы счисления (см. главу 6). Колеса Разностной машины мучительно старались вместить все десять числовых знаков, а проблему остатков Бэббидж пытался решить с помощью хитроумной, но неуклюжей операции возврата каретки.
[109] Grossmann H. Descartes and the Social Origins of the Mechanistic Concept of the World // The Social and Economic Roots of the Scientific Revolution: Texts by Boris Hessen and Henryk Grossmann. Berlin: Springer, 2009. P. 181.
[110] См. главу 2.
[111] В западной традиции Лейбниц, вдохновленный китайской «Книгой Перемен» (И цзин), предложил двоичную запись уже в 1689 году в работе «Объяснение двоичной системы исчисления» (Explication de l’Arithmétique Binaire).
[112] Шеннон К. Символический анализ релейных и переключательных схем // Работы по теории информации и кибернетике. М.: Изд-во иностранной литературы, 1963. C. 9–45.
[113] Гёдель предложил использовать номера для представления математических функций (нумерация Гёделя) в знаменитой теореме о неполноте (1931 год). Гёдель К. О формально неразрешимых предложениях Principia Mathematica и родственных систем // Николай Гритчин. Занимательная философия. Луганск: Резников В. С., 2014.
[114] Шабер упоминает другое, данное Робертом Макнотоном определение алгоритма, которое можно привести в качестве примера технического окаменевания описанных социальных процессов. 1. Алгоритм должен быть записан на определенном языке. 2. Поставленный вопрос определяется некоторыми входными данными, называемыми вводом. 3. Алгоритм представляет собой процедуру, которая выполняется шаг за шагом. 4. Действия на каждом шаге строго определяются алгоритмом. 5. Вывод или ответ (называемый выходом) четко определен. Chabert. A History of Algorithms. P. 455
[116] См. также: Pasquinelli M. From Algorism to Algorithm: A Brief History of Calculation from the Middle Ages to the Present Day // Electra 15 (Winter 2021–22): 93–102.
[119] Об анимистической генеалогии мыслящих автоматов в современную эпоху см.: Kang M. Sublime Dreams of Living Machines: The Automaton in the European Imagination. Cambridge, MA: Harvard University Press, 2011. Теологическую генеалогию проектирования машин см.: Stöcklein A. Leitbilder der Technik; Biblische Tradition und technischer Fortschritt. Munich: Moos, 1969.
[120] По Фредерику Поллоку, под механизацией понимается автономизация источника энергии, а под автоматизацией – независимая роль информации в производственном процессе. Жаккардовый ткацкий станок служил примером автоматизации. См.: Pollock F. Automation: A Study of Its Economic and Social Consequences. New York: Praeger, 1957. Автономизация информационной составляющей происходила уже в древних музыкальных автоматах. См.: Zielinski S. and Fürlus E. (eds). Variantology 4: On Deep Time Relations of Arts, Sciences, and Technologies in the Arabic-Islamic World and Beyond. Cologne: Walther König, 2008.
[121] Перфокарты IBM также использовались при переписи евреев в нацистской Германии. См.: Black E. IBM and the Holocaust: The Strategic Alliance between Nazi Germany and America’s Most Powerful Corporation. Washington: Dialog Press, 2001
[122] Lovelace A. ‘Notes’ to Luigi Menabrea. Sketch of the Analytical Engine Invented by Charles Babbage // Scientific Memoirs, vol. 3, London: Richard and John E. Taylor, 1843.
[123] Schaffer. Babbage’s Intelligence. P. 204.
[124] Babbage. On the Economy of Machinery. P. 1.
[125] В ноябре 1839 года Бэббидж вспоминал события 1821‑го; цит. по: Buxton H. W. Memoir of the Life and Labours of the Late Charles Babbage. Anthony Hyman (ed.). Cambridge, MA: MIT Press, 1987.
[126] Daston L. Calculation and the Division of Labor, 1750–1950 // Bulletin of the German Historical Institute 62 (Spring 2018).
[127] Grattan-Guinness I. Charles Babbage as an Algorithmic Thinker // IEEE Annals of the History of Computing 3 (1992): 40.
[128] Логарифмические и тригонометрические функции не всегда дают постоянную разность. Другими словами, метод разностей представляет собой эвристическое приближение, которое справедливо только для определенных числовых диапазонов.
[129] Babbage. On the Economy of Machinery. P. 153.
[130] Красноречивость объясняется тем, что стрелка часов по-английски – clock hand (буквально «рука часов»). – Прим. пер.
[131] Историю проблемы см.: Jones M. L. Reckoning with Matter: Calculating Machines, Innovation, and Thinking about Thinking from Pascal to Babbage. Chicago: University of Chicago Press, 2017.