Алгоритмы ручных расчетов механизировались постепенно. В Европе XVII века естествоиспытатели Паскаль и Лейбниц разработали ручные калькуляторы для автоматизации четырех базовых действий с десятичной системой счисления. Эти устройства вовсе не были кабинетными диковинками и сигнализировали о глубоких эпистемологических изменениях. Нововременная мысль тогда уже развивалась в тесной связи с машинами – тесной до такой степени, что, как свидетельствуют документы, механическое мышление влияло на философское. Знаменитый «метод» Декарта, например, выглядит весьма «механическим» в стремлении разложить задачу на простые элементы. По словам польского экономиста Генрика Гроссмана, Декарт не случайно придумал рациональный метод, занимаясь проектированием собственных механизмов. Но Гроссман отмечает также и более глубокую связь между математикой и машинами: «Каждое математическое правило носит механический характер, избавляющий от интеллектуальной работы и больших расчетов». И как показывают исследования, этот экономический принцип – экономия времени, труда и ресурсов – и сегодня остается ключевым аспектом алгоритмического мышления и связанных с ним практик[109].
Как мы увидим в следующей главе, в контексте индустриальной экономики начала XIX века первым механизированным вычислительным алгоритмом стал разностный метод Гаспара де Прони, предназначенный для расчета больших логарифмических таблиц, и именно его Чарльз Бэббидж использовал в Разностной машине. Разностная машина спроектирована как воплощение этого алгоритма, но Бэббидж также задумал программируемую Аналитическую машину, которая могла бы работать с различными видами уравнений, но так и не была создана. Первым компьютерным алгоритмом, или «программой», считается «диаграмма Ады Лавлейс для вычисления чисел Бернулли», написанная для Аналитической машины. Вычислительные машины Бэббиджа представляют собой точку схождения счетных алгоритмов и промышленной автоматизации; в числе самых серьезных проблем, с которыми эти машины столкнулись, можно назвать представление десятичной системы в механических шестернях[110].
В ХХ веке счетные алгоритмы успешно автоматизировались благодаря гибкости двоичной системы[111]. Реализовать двоичную запись в электрическом устройстве гораздо проще, чем десятичную в механизме, поскольку наличие или отсутствие электрического тока (включено/выключено) может непосредственно представлять цифры 0 и 1. В этом случае сложение и вычитание максимально упрощаются. Технически двоичная запись стала применяться и кодироваться в электрических машинах после публикации в 1938 году магистерской диссертации американского математика Клода Шеннона «Символический анализ релейных и переключательных схем»[112]. Шеннон впервые предложил использовать двоичные свойства электрических переключателей для представления не только двоичных чисел и операций с ними, но и логики высказываний – в частности, булевых логических операторов И, ИЛИ и НЕ.
После Второй мировой войны двоичный код, архитектура фон Неймана и инженерная реализация эффективных логических затворов на микрочипах позволили создать быстрые ЭВМ и формализовать вычислительные алгоритмы большего размера и большей сложности. Впервые в истории последовательности числовых знаков стали представлять не только величины, но и инструкции[113]. Так называемая вычислительная революция заключалась не только в использовании двоичных числовых знаков (двоичные цифры или биты) для кодирования человеческого языка и аналогового контента (оцифровка), но и в ускорении механических вычислений посредством двоичной логики (или булевой логики). Вопреки распространенному мнению о строгом разделении аппаратного и программного обеспечения, цифровые вычисления представляют собой сплетение в одном и том же носителе информации и инструкций, где двоичные числовые знаки и булева логика выступают взаимодополняющими формами. Другими словами, в цифровых вычислениях алгоритм счисления (двоичные числовые знаки) и алгоритм расчета (двоичная логика) практически стали одним целым.
В цифровую эпоху алгоритм возвысился до роли абстрактной машины (известной под разными именами – программа, программное обеспечение, код и т. д.), которая управляет электронно-вычислительными машинами. Как упоминалось в начале главы, самое известное сейчас определение алгоритма принадлежит компьютерной науке: «Конечная процедура пошаговых инструкций для преобразования ввода в вывод вне зависимости от данных и с наилучшим использованием имеющихся ресурсов»[114]. Абстрагирование логики от содержания – один из ключевых аспектов технического и когнитивного развития. Как и другие техники абстракции, алгоритм должен работать независимо от ограничений окружающей среды и источника данных. Однако в этой главе я ставлю под сомнение толкование абстракции как отделения от мира и его исторического развития. Фактически появление машинного обучения перевернуло статичное определение алгоритма с ног на голову: алгоритмы машинного обучения стали адаптивными, и на смену жестким наборам правил пришло «обучение» правилам из данных.
Каноническое определение описывает алгоритм как применение к некоторым входным данным строгих правил по принципу «сверху вниз». В этом случае данные не влияют на поведение алгоритма: они представляют собой пассивную информацию для обработки по правилам. Напротив, алгоритмы машинного обучения меняют свои внутренние правила (т. н. параметры) в соответствии с входными данными. Таким образом, данные перестают быть, скажем так, пассивными и становятся активной информацией, которая влияет на параметры пошаговой процедуры, уже не строго предзаданной алгоритмом. Прорыв машинного обучения заключается именно в этом сдвиге: алгоритмы анализа данных становятся динамичными и меняют жесткую структуру вывода для приспособления к свойствам поступающих данных, которые обычно касаются логических и пространственных отношений. Канонический пример – искусственная нейронная сеть для распознавания образов, которая изменяет параметры своих узлов в соответствии с отношениями между элементами визуальной матрицы. В этом смысле новейшие алгоритмы ИИ не слишком отличаются и не так уж далеко ушли от древних математических практик, возникших в результате непрерывного подражания конфигурациям пространства, времени, труда и социальных отношений.
Как заметил историк науки Юрген Ренн, после работ Дамерова алгоритмы машинного обучения уже не предстают чем-то «сверхчеловеческим» и оказываются частью цикла интернализации и экстернализации когнитивных функций, присущего всем культурным технологиям:
В конечном счете алгоритмы машинного обучения… – лишь новая форма экстернализации человеческого мышления, пусть даже и очень разумная [intelligent]. Как и предшествующие внешние представления, например счетные машины, они частично берут на себя – в иной модальности – функции человеческого мозга. Смогут ли они в конечном итоге заменить и даже вытеснить человеческое мышление? Решающим моментом в ответе на этот вопрос становится не то, что их совокупный интеллект все еще сильно отстает от человеческого и даже животного интеллекта, а то, что они способны полностью раскрыть свой потенциал только в рамках цикла интернализации и экстернализации, который… и есть отличительная черта и движущая сила культурной эволюции[115].
Эта вводная глава служит для того, чтобы показать концепцию алгоритма в перспективе – в историческом контексте, внутри долгой эволюции систем знаний. Говоря кратко, торговое ускорение позднего Средневековья и подъем информационного общества способствовали формализации алгоритма в том виде, в каком он известен сегодня. По лингвистическому совпадению средневековый термин algorismus ознаменовал переход от аддитивной к позиционной системе счисления, а недавно устоявшийся термин «алгоритм» – переход от десятичной к двоичной системе числовых знаков. Речь не о просто формальных и технических, но и экономических сдвигах; в конечном счете индо-арабские числа и алгоритмы ручного счета получили распространение за счет упрощения бухгалтерского учета и торговых операций, а двоичные числа – за счет возможности их реализации в электрических схемах и логических затворах, нужных для ускорения промышленной автоматизации и государственного управления. Первый переход соотносится с ранним меркантилизмом, а второй – с промышленным капитализмом и в особенности с его потребностью ускорять коммуникационные технологии и автоматизировать умственный труд[116].