9. Алгоритмика
Вычислительное/алгоритмическое мышление
Вычислительное мышление/computational thinking/алгоритмическое мышление/информатика — это мышление с использованием набора понятий computer science (вычисление, алгоритм, …), примерно так же как «физическое мышление» связано с физикой-наукой (физическое тело, поле, …) или химическое мышление связано с химией-наукой и её набором понятий (химическая связь, валентность, …), или даже системное мышление связано с набором понятий системного подхода (система, эмерджентность, …).
Термин информатика/computational thinking появился в середине 80х, когда computer science потребовалось внести в школьные программы (в США и СССР это было одновременно — в США назвали computational thinking, в СССР — информатика), для обсуждения с организаторами образования нужно было делать акцент не на содержании предмета, а на навыках мышления, которые даёт знание нового школьного предмета. Тогда вычислительное мышление/информатика понималось прежде всего как навыки планирования каких-то действий, возможно с условиями. То есть идеи active/embodied inference (неразрывность действий в мире и вычислений, физической природы последовательности операций) были в идее вычислительного мышления с самого начала. В то время для школ предлагалось изучать только императивную алгоритмику (классическое структурное программирование, а не пакетное программирование как в Modula и Ada, объект-ориентированное программирование, функциональное программирование, логическое программирование), и это не изменилось за последние почти 40 лет с момента введения обязательного обучения информатике в школах России в 1985 году (за рубежом обязательное обучение информатике в школах вводили примерно в тот же период времени).
-
С годами акцент сдвигался с императивной алгоритмики на другие виды вычислений/исполнений/execution, логического вывода/рассуждений/inference/обновлений, функциональной оценки/evaluation и далее вплоть до собственно мышления/cognition как проводимого алгоритмом-интеллектом. Сегодня вычислительное мышление стало по факту общим мышлением об операциях с моделями — вычисляемом/алгоритмическом преобразовании одних моделей в другие, выводе/рассуждениях на базе моделей, моделировании в части разбиения на уровни абстракции в моделировании и т.д. Этот классический подход мы назовём Software 1.0.
-
Следующий сдвиг объявил Andrei Karpathy как Software 2.0 (программы будут не кодироваться, а «выучиваться» на данных с использованием различных методов оптимизации для нахождения оптимального алгоритма, например каких-нибудь методов оптимизации на основе стохастического градиентного спуска): «Gradient descent can write code better than you. I’m sorry»1, это 2017 год. Ещё этот подход называется дифференцируемым программированием/differentiable programming и далее от «программирования» можно переходить к самым разным дифференцируемым моделям, получая дифференцируемое моделирование/differentiable modeling2 — это рассматривается как мощная новая парадигма программирования и моделирования (вплоть до архитектурного моделирования, когда на архитектуре, представленной непрерывной/недискретной функцией в многомерном пространстве, находится оптимум). Похоже, что в ближайшем будущем писать программы будут уже не люди, а компьютеры.
-
В 2023 году он уточнил, как будут программировать люди: на естественном языке, «The hottest new programming language is English»3, и чуть дальше в этом треде: «It's still early days but this new programming paradigm has the potential to expand the number of programmers to ~1.5B people»4, что далее было обобщено как Software 3.0, основанное на больших языковых моделях.
Тем самым проблема вычислительного мышления далеко выходит за пределы «программистского мышления, нужного для написания алгоритмов на языке программирования», речь идёт о массовом мышлении людей, описывающих алгоритмы как паттерны вычислений, язык и уровень формализации при этом неважен: программный код или код модели (с прилагающейся к этой модели интерпретатором, «имитационное моделирование», при этом считаем программирование как software engineering, моделирование как simulations, онтологизирование — одним и тем же), псевдокод, который «не программный код в том смысле, что компьютер его не поймёт, но люди воспринимают его как запись алгоритма», естественный язык, описывающий постановку задачи по созданию и выполнению алгоритма и идеи по решению этой задачи.
У каждой модели (как имитационной модели на каком-то языке программирования, так и каких-нибудь диаграмм) есть её физический интерпретатор: это или мозг человека, или компьютер, или даже группа мозгов и компьютеров, в том числе туда могут входить и какие-то другие инструменты, меняющие как-то мир, они могут включать в вычисление огромный кусок физического мира. Как думать про этот интерпретатор модели, описывать его работу, задавать его вычисление, готовить модели для вычисления на нём — это и есть вычислительное мышление, предмет информатики/алгоритмики. Сегодняшнее мышление, особенно коллективное мышление, редко обходится без участия компьютера. Сегодняшние модели всё чаще и чаще формальны, они не являются интуитивными художественными описаниями в виде коротких историй, понятных быстрому мышлению S1, удобному для нейронной сети человеческого мозга. Они объёмны и требуют для работы с ними компьютерной поддержки со стороны классических электронных компьютеров, работающих в парадигме императивного программирования.
Демифологизация вычислений (включая понимание, что «языки программирования» для вычислений не главное), понимание того, как они устроены — это становится важным для миллиардов людей. Не все станут программистами, но миллиарды людей. Не все будут профессионалами в настройке машинного интеллекта, как не все будут профессионалами в настройке человеческого интеллекта (не все учат других людей, не все учат искусственные нейронные сетки, но все по факту уже общаются с ними, а часть таки учит, использует характеристику вменяемости естественного и искусственного интеллекта: иногда задействует объяснения, а иногда и просто вырабатывает условный рефлекс, как с кошечками).
Но понимать, как устроена компьютерная часть цивилизации (включая вычисления, проходящие в живых системах: иммунной системе, мозге, а то и просто в живой клетке), нужно. Булки не на деревьях растут, вычисления не на калькуляторах проводятся, в сегодняшних колл-центрах не люди отвечают, и даже не записанные на автоответчик люди. Демифологизация всего этого (подготовка хороших и понятных объяснений), компактификация мышления по поводу вычислений живых и неживых вычислителей/computers (думать о них нужно одинаково!) быстро меняют современную алгоритмику.
Вычислительное мышление/алгоритмику мы будем отличать от «компьютерной грамотности»: умению включать-выключать компьютер или смартфон, умению составить запрос к поисковой системе, умению вызвать приложение для заказа продуктов в онлайн-универмаге. И будем отличать от риторики как части лидерства: как уговорить какого-то человека выполнить какой-то деятельностный алгоритм (паттерн операций над какими-то объектами мышления и действия). Интересует дисциплина как набор понятий и отношений между ними (или в конструктивной онтологии набор понятий и операций над ними), а не конкретные особенности инженерной реализации поддержки трансдисциплины в мире.
Вычислительное мышление как алгоритмика тем самым находится в ряду других мыслительных/фундаментальных трансдисциплин: до сих пор в интеллект-стеке мы рассматривали дисциплины, которые дают нам модели окружающего мира, а теперь будем рассматривать операции с этими моделями. При этом помним, что сама алгоритмика (учение об алгоритмах) может путаться с computer science и информатикой, понимаемой более широко как включающей в себя семантику и теорию понятий: выполнение каких-то паттернов/шаблонов операций (то есть выполнение вычислений согласно алгоритмам) связано с операндами, которые представляют собой типизированные данные. И когда мы обсуждаем значение этих данных, то неминуемо всплывает в полном объёме вся семантика и теория понятий, а поскольку в интеллект-стеке мы отдельно уже разбирались с семантикой и теорией понятий, то мы тут в разделе алгоритмики интеллект-стека больше касаться будем не столько всей «компьютерной науки»/информатики в целом, как включающей и часть про алгоритмы, и часть про данные (Niclaus Wirth говорил ещё в 1976 году, «Algorithms + Data Structures = Programs» и даже написал про это книгу5), сколько только её части про алгоритмы.
Информатика-в-большом против информатики-в-малом
Также нужно различать
-
информатику-в-малом, когда речь идёт об автономном небольшом алгоритме, который делал один человек, и который работает в одном устройстве-вычислителе/компьютере,
-
информатику-в-большом, когда речь идёт об одновременно работающих на разных вычислителях алгоритмах, совместно разрабатываемых многими людьми в разное время.
Моделирование, нейролингвистическое программирование как задание вычислений для нейросетевых агентов (как людей, так и AI), программирование (классических, квантовых, оптических и т.д. вычислителей/computers, включая вычисления выходящих в восприятие окружающего мира и изменения окружающего мира роботов), создание онтологий/knowledge graphs/графов знаний (речь идёт о формальной записи онтологий, «граф знаний» тут просто ребрендинг более старого термина «онтология», который использовали как сокращение для «онтологического описания») и много что ещё — это одна и та же деятельность/практика/труд, и это информатика-в-большом, то есть распределённая коллективная деятельность машин и людей по созданию/составлению алгоритмов и выполнению вычислений по этим алгоритмам6.
Это программирование/моделирование/онтологизирование-в-большом на производстве, конечно, сопровождается аналогичными рассуждениями про производство-в-большом, как исполнении производственных алгоритмов (робот, движущийся в физическом мире, тоже ведь исполняет программу! Завод — это тоже робот, он исполняет производственную программу)7.
Интересное отличие от программирования/моделирования-в-малом и производства-в-малом от них же в-большом — это необходимость в-большом договариваться. В принципе, даже когда у вас тесный коллектив единомышленников под единым управлением, и то приходится договариваться. Даже внутри себя приходится договариваться, ибо вас могут терзать сомнения: множество выполняемых вами ролей будут настаивать на принятии разных решений! Иногда информатику-в-малом рассматривают как работу одного программиста, иногда как работу одной бригады/команды/team программистов. Но если это две разные бригады из двух разных подразделений одной компании, то договариваться уже много сложнее. Когда объединяются совсем уж независимые субъекты рыночных отношений, эта проблема договорённостей, согласованности мышлений/вычислений становится главной, на передний план выходит проблематика построения таких систем, по поводу которых легче договариваться (например, сразу появляется мысль о стандартизации как «один раз договориться, много раз использовать эту договорённость в разных проектах»). И тут на передний план выходят проблемы независимости частей больших алгоритмов, больших «программ работы». В науке говорят о композиционности (делении на «правильные части»), в инженерии тут говорят об архитектуре (делении на оптимальные конструктивные части и указание на способы организации взаимодействия этих частей в целой системе).
Производство-в-малом — это когда группа людей, имеющих общий капитал (запасы материалов и денег, станки, накопленные базы знаний и т.д.) и общую управленческую волю (часто только подразумеваемую, знаем мы «общую волю и единое намерение» пары тысяч человек, в том числе их руководителей), производит что-то, не выходя при этом за границы собственных материальных и людских ресурсов. Условно говоря, производство-в-малом, это «производство внутри предприятия», как «программирование-в-малом» относится к созданию одной программы, которая исполняется, как в классической драме, с соблюдением единства времени, места и действия. Когда же единство времени, места и действия обеспечить уже нельзя, то мы переходим к программированию/моделированию/онтологизированию-в-большом и производству-в-большом.
Когда мы говорим о том, что комплектующие/предметы снабжения и готовые изделия (которые где-то будут комплектующими или предметами снабжения) пересекают границы предприятий, то речь идет уже о производстве-в-большом. И программирование корпоративных информационных систем, которые это поддерживают в плане обмена информационными моделями данных физических объектов (спецификациями, чертежами, технологической документацией и т.д.) и другими информационными артефактами (планами, прогнозами, заказами этих физических объектов и т.д.) является программированием-в-большом.
Готовых курсов информатики пока нет
Вот этот акцент в информатике на моделирование мира — он важен. Текст «Алгоритмика, информатика, моделирование, далее везде»8 — про обучение алгоритмике детишек на примере четырёх роботов («платоновский» робот, робот-из-программы, физический робот-на-коврике, робот-из-возможного мира где-то в космосе). И первое же, что надо уяснить — это соотношение между всеми этими роботами. С одной стороны, это онтологическая задача (какие между этими роботами отношения), с другой стороны — все эти роботы представляют собой вычислители и описания вычислителей, надо понимать, как они связаны. Сначала надо понимать, что такое «вычисление», а потом уже говорить об этих вычислениях. Вычисление — это изменение состояний какой-то памяти (то есть перевод мира из одного стабильного состояния в другое) по какому-то алгоритму как набору операций с отдельными элементами памяти. Запись алгоритма тоже может быть в памяти, как той же самой (архитектура фон Неймана), так и отдельной (Гарвардская архитектура), так и может быть распределена в какой-то нейросетевой структуре памяти.
Главное в информатике в целом и алгоритмике как её части — это не терять понимания, что именно моделируют те модели, с которыми ведутся вычисления/рассуждения/вывод/исполнение. И помнить, что модель тоже всегда исполняется: или модель исполняется на компьютере (имитационная модель), или её исполняет рассматривающий глазами эту модель человек (например, модель может быть дана в виде диаграммы в диаграммном моделере, или таблички в каком-то универсальном моделере типа сoda.io, или даже таблички в Excel, или даже в виде просто текста в MS Word как моделере). Но всегда есть исполнение модели, без физического вычислителя, «оживляющего» модель, она будет мертва. Такое понимание нужно закладывать ещё в школьный курс информатики, а уж в образовании для образованных и подавно.
В вузовские курсы информатики эта постановка задачи не попала, но уже с этим начинаются какие-то подвижки в связи с распространением языковых моделей типа ChatGPT, Claude, Bard, а также с пониманием, что:
-
Программирование таких нейросетевых вычислителей ведётся на естественном языке (мы уже упоминали прогноз Andrej Karpathy о том, что переход на программирование на естественном языке даст 1.6 миллиарда программистов на планете)
-
Алгоритмика как создание эффективных алгоритмов, оторванных от предметной области (например, алгоритмы сортировки какой-то последовательности чисел по возрастанию или строк в алфавитном порядке) уходит от учёных к компьютерам. Свежий пример — это нахождение новых эффективных (для коротких последовательностей — эффективней на 70% по сравнению с известными до сих пор) алгоритмов сортировки программой AlphaDev от Google DeepMind9.
Вместо универсального мышления про информатику как алгоритмику — трансдисциплину о вычислителях и паттернах вычислений (алгоритмов), на самых разных вузовских и вневузовских курсах учат разрознённому набору «программирований» на разных языках программирования, очень частным инженерным прикладным практикам.
Доходит до курьёзов, когда один из лучших в мире курсов по развитию вычислительного мышления SIPC10 пришлось убрать из вузовской программы ещё в 1997 году. В основе курса SIPC лежала функциональная парадигма, как очень удобная для размышлений о вычислениях. Самая популярная сегодня парадигма в программной инженерии — объект-ориентированное программирование. Поэтому курс SIPC нельзя непосредственно положить в основу сегодняшних курсов программирования, он совсем не экономит время в обучении инженеров-программистов, даже с учётом того, что все годы с момента прекращения преподавания SIPC в программной инженерии неуклонно росла доля людей, поддерживающих функциональный стиль программирования! Зато курс SICP отлично справляется с развитием мозга изучающих его людей, оставаясь удивительно непрактичным в части обучения текущей версии программирования-как-ремесла. Критика SICP от 2005 года11 подчёркивала важность отражения в учебных курсах распространения объект-ориентированного программирования, но в последние несколько лет жизнь ещё раз поменялась, и нужно учитывать вот эти новые «программирования» — вероятностное, дифференцируемое и всё прочее, что приходит с коннекционистской парадигмой, все эти Software 2.0 (код пишет алгоритм) и даже 3.0 (код пишется на естественном языке как языке программирования, то есть «код» вообще не пишется!). Вот «история алгоритмики» как история смены подходов к программированию вычислений (то есть подходов к составлению алгоритмов обработки каких-то данных):
-
Софт/software 1.0:
-
Основано на программировании, основанном на формальных правилах выполнения формально определённых операций над формально определёнными данными.
-
Программы создаются путем явного кодирования правил и инструкций.
-
Ограниченная способность обучаться на основе данных или адаптироваться к новым ситуациям (ограниченная вменяемость: если хочется, чтобы программа могла как-то разбираться с новыми данными, надо её менять «вручную»).
-
-
Софт/software 2.0:12:
-
Основано на искусственных нейронных сетях и глубоком обучении.
-
Программы дифференцируемы13, поэтому способны обучаться на основе данных (обычно большой объём данных) и адаптироваться к новым ситуациям.
-
-
Софт/software 3.0:14:
-
Основано на предварительном обучении больших языковых моделей/large language models (LLM). Обычно эти модели предобучаются/pretrained сначала на примерах программного кода, затем на больших массивах данных естественного языка и даже мультимедиа, и только потом их используют для программирования.
-
Эти большие языковые модели способны понимать естественный язык, а также понимать программный код на языке программирования или моделирования, они могут обучаться на небольших объёмах данных. В пределе — это программирующий/планирующий интеллектуальный агент с высокой вменяемостью.
-
Используется нейролингвистическое программирование (сегодня называется prompt engineering), то есть программирование нейросети на какое-то вычисление или на создание кода на языке программирования, каковой код будет потом выполнен на каком-то внешнем компьютере (классическом, квантовом или ином), ведётся на естественном языке.
-
Два варианта: или получается выполняемая программа как в Software 2.0 (часть нейросети просто аппроксимирует нужную функцию), или получается выполняемая программа как в Software 1.0 (и тогда нейросеть способна объяснять получившуюся программу, а также оптимизировать её — синтезировать более эффективные алгоритмы, чем придумываемые людьми).
-
Базовый курс информатики опять должен поменяться, и при этом мы даже не говорим о квантовых или оптических компьютерах, робототехнике, не говорим о биологических компьютерах на искусственно выращенных органоидах, например, искусственно выращенных мозгах людей или мышей, которые тоже рассматриваются как перспективные устройства-вычислители/компьютеры (все они оказываются энергетически весьма выгодны15). В любом случае, на данный момент нет какого-то консенсуса на тему содержания дисциплины информатики и алгоритмики как связанной с эффективностью вычислений части информатики как общей трансдисциплины моделирования. Почему моделирование? Потому что один физический объект «компьютер с моделью» является моделью другого физического «моделируемого объекта», возможно, по длинной «цепочке моделирования».
Трансдисциплина алгоритмики нужна не только для программных инженеров/software engineers или «учёных по данным»/data scientists. Мы можем говорить об условном директоре стадиона: он имеет на своём попечении робота, который внутрь себя забирает 5 тысяч человек и два часа развлекает, а потом отдаёт этих 5 тысяч человек назад в окружение. У этого робота-стадиона есть вычислительные ресурсы, есть датчики и актуаторы, частью этого робота являются и его сотрудники. Знание какой трансдисциплины научит людей думать про свои предприятия таким образом? Это знание научит миллиарды людей разговаривать с «айтишниками» — не работать вместо них, а обсуждать их работу в условиях неминуемого разделения труда и неминуемой автоматизации этого труда. А кто тут будут эти «айтишники»? По факту это будут и другие люди (почти все, поскольку моделируют и вычисляют что-то по этим моделям все — как с использованием собственного мозга как вычислителя, так и с использованием экзокортекса с внешней памятью или даже внешним вычислителем). Более того, общаться надо будет с AI, который тем самым будет «свой айтишник» («сделай мне программу, которая будет давать мне сигнал на телефон, если в чат напишет Вася или его бот, а остальные оповещения будет откладывать для просмотра их в более удобное время» — это вы скоро будете голосом прямо говорить своему смартфону, и он поймёт! Сейчас такое пишут программисты, завтра такое пишут сами компьютеры).
Люди в своей массе должны знать, что как человеческий, так и машинный интеллект — это не результат работы алгебраических торсионных полей и не трансляция сигналов Космоса.
Современный человек должен понимать, где границы возможного. Человек в 18 веке должен был знать, что полёты на ковре-самолёте — чудеса. Человек в 21 веке должен знать, что полёты на Марс — не чудеса, и что полностью повторно используемые ракеты — не миф. Может ли сегодня человек отличить реферат текста, сделанный компьютером от реферата текста, сделанного человеком? Это ведь трудная задача, над ней бились безуспешно десятки лет? Объяснялось, что для такого нужно иметь огромную эрудицию, которую может иметь только человек. Но нет, с 2020 года рефераты текстов, сделанные компьютерами и людьми, неотличимы друг от друга самими людьми16. Граница того, что могут сделать только люди, что могут и люди, и алгоритмы машинного интеллекта, а что уже не могут люди, но могут алгоритмы машинного интеллекта — она непрерывно сдвигается в пользу машинного интеллекта.
Курс алгоритмики посвящён обучению тому, что всё это не магия, а обычная инженерная работа. Булки растут не на деревьях, мышление растёт необязательно в мозге, современный человек должен это понимать, иначе все его стратегирования будут фантазиями, основанными на магическом понимании технической реальности.
Информатика, её поддисциплины и её инженерная практика
Дэвид Дойч считает информатику/computer science17 одной из четырёх нитей, без которых не получается объяснить структуру нашей реальности (другие — это квантовая физика в интерпретации Эверетта, эволюционная эпистемология Поппера, эволюционная теория репликаторов Докинза).
Информатику как целостное учение часто делят18 на Theory A как алгоритмику, занимающуюся вопросами сложности алгоритмов и их эффективностью, и Theory B, занимающуюся вопросами теории информации в физике, семантики, теории понятий, онтологии и логики как «вычислений по правилам». Всё это оказывается трансдисциплинами, стыкующими наши знания о поведении математических/идеальных/ментальных объектов в их связи с моделированием предметов реального мира и представленностью в виде знаков в физическом мире.
Вот краткое изложение шутки, которая отсылает нас к Theory B — всегда помним, что вычисления мы ведём с математическими объектами, которые что-то отражают в реально мире, и мышление семантиков, типологов, онтологов, логиков всегда будет про это19:
Буратино дали 3 яблока. Два он отдал Мальвине. Сколько яблок у него осталось?
1. (initializing) Неизвестно, сколько яблок было у Буратино до того, как ему дали 3 яблока.
2. Неизвестно, два «чего» он отдал Мальвине.
3. Неизвестно, не является ли Буратино и Мальвина двумя разными сущностями, или одно из них это ссылка на другое.
4. Неизвестно, что подразумевается под процессом «отдал», и результат этого процесса (может, Мальвина не взяла).
5. Непонятно, в какой момент «осталось». После того как он попытался дать в первый раз?
6. (state) Неизвестно, не являются ли яблоки частью состояния Буратино, или самостоятельными объектами.
7. (волатильность) Не ясно, сколько времени прошло с момента нахождения яблок у Буратино до процесса «отдачи":
- может, яблоки полураспадаются сами по себе (сгнивают), или возвращаются к тем, кто их дал.
- может, их едят, пока они у Буратино, а он просто этого не знает.
8. (длина переменной) Не ясно, сколько яблок может удержать Буратино.
Может, всего 2... и если он 2 отдал, у него нет яблок.
9. Если процесс дачи яблок рекурсивный, мы все останемся без яблок.
В интеллект-стеке мы рассматриваем SoTA информатики в разных трансдисциплинах. В текущем подразделе мы кратко характеризуем информатику в целом, но всё-таки больше раскрываем алгоритмику. В быту же IT/информатика встречается не только как научная дисциплина/science (теория и средства моделирования для теории), но и как опирающаяся на теорию инженерная практика создания компьютеров как физических вычислителей, а также программного обеспечения к ним. Грамотный человек сегодня не только умеет самостоятельно читать сложный текст на естественном языке и писать слепым десятипальцевым методом на клавиатуре, но и может отмоделировать какой-то кусок мира и формализовать его в какой-то мере, и даже выполнить какие-то несложные вычисления с помощью компьютера — как предки с трудом научились умножать «в столбик», как дедушки-бабушки научились это делать при помощи калькулятора, так любой человек после окончания школы вроде как должен уметь сделать это на каком-то языке программирования, и уж точно в системах NoCode/LowCode (productivity tools), то есть программируя на языке электронных таблиц.
Понятие алгоритма как некоторой последовательности вычислений как операций над какой-то памятью с данными, при которой из известных входных данных получаются требуемые выходные данные, все знают ещё из школы. Сегодня понятно20, как алгоритмику в объёме требований по программированию из текущего ЕГЭ дать уже к окончанию начальной школы, причём детям на это требуется решать задачи всего около 16 часов (да, так мало!), а взрослым около 8 часов (они всё-таки более организованы, чем дети). Удивителен сам факт, что дети и взрослые осваивают азы мастерства императивного/процедурного программирования за примерно одинаковое время, а для этого достигают понимания основных понятий: алгоритма, вычислителя/интерпретатора алгоритма, языка программирования, программиста (составляющего алгоритм), шага алгоритма, данных. Эта учебная программа уже преподаётся на русском языке десяткам тысяч детей21.
Но всё-таки компьютеры в массе своей в труде используются только как ручка-бумажка-на-стероидах. Не «вычислитель» (computer — это вычислитель!), а просто «счёты с хорошей коллективной памятью». Память при этом, конечно, структурированная — она содержит не просто какие-то тексты и картинки, а описания мира/модели, обширные «базы данных» с довольно кучерявыми «моделями данных». Или даже неструктурированную информацию для полнотекстового поиска в корпоративных хранилищах документов. Как устроены эти описания мира разной степени формальности, в computer science разбирается в рамках Theory B (теория информации, логика, семантика, далее мы будем ещё рассматривать онтологию с многоуровневым мета-моделированием, они все идут по этой линии Theory B): как мы думаем о мире, как записываем наши мысли, что означают знаки, как представлены знаки на физических носителях, как их интерпретировать. Это важнейшее использование компьютеров на сегодняшний день: личная и коллективная собранность людей сегодня базируется именно на таком использовании «компьютера-как-ручки-бумажки», вся алгоритмика в её разнообразии оказывается не такой уж важной, разве что речь идёт о задачах масштабирования (когда запомнить, а потом найти надо очень много разнородных данных, становится важна эффективность алгоритмов, которые этим занимаются).
Вычислительная мощь компьютеров в бизнесе пока задействуется примерно в объёме бухгалтерских счётов-на-стероидах, простейшие сложения и умножения, сравнения текстовых строк в целях их упорядочивания. Это вычисления человека, который использует компьютеры и компьютерную связь для помощи в управлении личным и коллективным вниманием, для организации общения с другими людьми, для умощнения памяти. Вычислять ничего не нужно, знание о том, как составить простой алгоритм и объяснить его компьютеру на языке программирования школьники получают, сдают ЕГЭ — и дальше не используют. Проблема в том, что в 21 веке алгоритмика (Theory A из computer science/информатики) поменялась, и нужно с ней разбираться заново: появились нейросетевые вычисления, которые привели к изменению архитектуры компьютеров («видеокарты» превратились в GPU как graphics processing unit, но с появлением алгоритмов искусственного интеллекта их часто стали называть general processing unit, чтобы подчернуть нейтральность по отношению к вычислениям именно графики22), а ещё появились квантовые компьютеры, оптические компьютеры23, компьютеры на органоидах24. В предыдущих разделах курса мы уже узнали о существовании ускорителей для разных видов алгоритмов, ибо по теореме о бесплатных обедах для универсального компьютера (то есть выполняющего все возможные в природе вычисления, эквивалентного машине Тьюринга) возможно множество реализаций, но вот универсальной реализации, дающей большую скорость вычислений для вообще всех алгоритмов — такого нет. Для каждого вида алгоритмов хорошо бы иметь какой-то ускоритель, что не отменяет необходимость универсального компьютера, который хоть и плохо (то есть неэффективно, с затратами большого количества энергии и времени), но выполняет самые разные классы алгоритмов, а не какой-то один узкий класс.
Новая алгоритмика: изучение универсальных алгоритмов
В алгоритмике (Theory A из информатики/computer science) предметом заботы являются алгоритмы вычислений — нахождение таких способов вычислений (практик выполнения операций), которые как дают точный результат, так и укладываются в ресурсный бюджет. Ресурсы оказываются важны. Если у тебя есть выбор — точно моделировать ситуацию, затратив на это время и энергию, или моделировать очень грубо, но затем сразу действовать, то побеждает не всегда идея точного моделирования. Тебя просто съедят, если ты будешь много думать и мало бегать! Но если ты будешь быстро и экономно моделировать с большой точностью, то придётся меньше бегать, и направление бега будешь вычислять точнее — и тебя не успеют съесть. Так что есть задача моделирования мира с большой точностью, но с затратой малого количества ресурсов и времени.
Проблема в том, что точность моделирования мира и потребность в вычислительных ресурсах в большинстве случаев увязаны между собой. Если вы хотите отмоделировать мир точно, то вам нужно много исходных данных и много вычислений. Иногда это удаётся обойти придумыванием нового способа моделирования, новых алгоритмов вычислений, но иногда теория говорит, что в общем случае это невозможно. Например, сегодня для многих и многих задач находится максимум какой-то функции методом градиентного спуска. В конце 2021 года выяснилось, что точность и вычислительная сложность (время вычисления при последовательном выполнении операций) для таких задач связаны пропорционально. Если точность удвоить, то время нужно увеличить вчетверо (и это обычно приемлемо), но если для некоторых приложений нужна точность в квадрате, то время (число вычислительных шагов) нужно увеличивать тоже в квадрате — и это может оказаться за пределами разумного. Скажем, один миллиард шагов одинарной точности могут выполняться одну секунду, но вот миллиард секунд для квадрата этой точности — это 32 года работы вычислителя! При этом подобные ресурсные оценки сложности алгоритмов неприменимы при переходе к другой физике вычислителей/компьютеров, например, при переходе к квантовым компьютерам. Такое впечатление, что алгоритмик как версий науки о сложности и ресурсоёмкости алгоритмов может быть множество, для каждой физики вычислений своя версия, и ещё варианты для различных сложных вычислителей, объединяющих вычисления, ведущиеся в разной физике.
Похожие рассуждения по ресурсным (а не теоретическим!) ограничениям на вычисления на одном классическом одноядерном электронном компьютере есть и для многих других классов задач. Например, криптографические задачи основываются на том, что вы легко проверяете ключ на его правильность, за долю секунды. Но вот найти этот ключ, если вы его не знаете, может потребовать тысяч лет вычислений, хотя всего одного года, если у вас тысячи компьютеров, алгоритм ведь хорошо распараллеливается! Ситуация опять-таки осложняется тем, что при переходе на другую физику (например, квантовый вычислитель/компьютер разбрасывает нужные для получения операции по бесконечному числу вселенных, а потом собирает их результаты для получения конечного ответа, подробно это рассказывается в книгах Дэвида Дойча) оценка сложности алгоритмов меняется. И ещё всё время придумываются новые алгоритмы, причём нахождение нового алгоритма — это творческий процесс, для многих классов задач до сих пор непонятно, можно ли вообще найти быстрый алгоритм получения решения (проблема перебора25): можно ли для задач, которые заведомо решаются методом перебора, придумать алгоритм, который решает их не за экспоненциальное по отношению к объёму входных данных время, а за меньшее, полиномиальное или даже линейное. Алгоритмика до сих пор не даёт ответа на этот важный вопрос!
Есть математический результат 1989 года (теорема Джорджа Цыбенко26), который показывает, что нейронная сеть с одним скрытым слоем является универсальным аппроксиматором, то есть может отмоделировать с заданной точностью любую функцию, если в ней есть «достаточное количество нейронов». Любая функция — это таки математически любая, например, «распознавание речи» — это из входных бит огибающей сигнала на выходе аналого-цифрового преобразователя с сигнала микрофона вычислить по функции распознавания речи последовательность бит слов текста в подходящей символьной кодировке. Синтез речи — это обратная функция, из букв в звуки. Диагноз — это функция из входных данных множества анализов больного в выходные с текстом диагноза. Назначение лечения — обратная функция.
Проблема только в том, что на существующих классических компьютерах моделирование даже простых функций занимает на такой нейронной сети огромное время, это математически очень крутой результат, но практически он бесполезен. Алгоритмика как раз наука о том, как получить практически полезные результаты, то есть получить результат достаточной точности, использовав минимальные ресурсы, которые можно было бы потратить на вычисления так, чтобы вычисления были выгодны (полезность результата вычислений оценивалась выше, чем полезность ресурсов, потраченных на вычисления).
При этом подход «универсального вычисления на нейронной сети» оказывается таким общим, что вся Вселенная представляется таким большим «нейросетевым компьютером» (работы группы Ванчурина, о которых мы уже довольно много говорили, но появляются и более новые работы, которые представляют «космическую нейронную сеть» из небесных тел27 и уподобляют её нейронной сети мозга).
Так, если сделать глубокую нейронную сеть (несколько скрытых слоёв), то свойства универсального аппроксиматора остаются, но время моделирования оказывается вполне приемлемым — хотя опыт показывает, что один расчёт большой языковой модели может стоить несколько миллионов долларов за аренду вычислительных мощностей для этого, нейронная сеть GPT-3 была вычислена за примерно $4.6 млн28.
Интеллект компьютеров, похоже, зависит главным образом от вычислительной мощности — это так называемый «горький урок»29, полученный анализом всех прошлых прорывов в области AI. Все эти прорывы оказывались прорывами не столько в хитрых конструкциях самого интеллекта как исполняемого на хитрых компьютерах хитрыми алгоритмами, сколько прорывами в не очень хитрой алгоритмически аппаратной вычислительной мощности. Простые алгоритмы и большая вычислительная мощность — вот в чём оказался секрет искусственного интеллекта! То есть вы в конечном итоге терпите неудачу, когда пытаетесь сочинить сложный алгоритм, управляющий каким-нибудь автомобилем в поездке. Но если вы в автомобиль включаете суперкомпьютер, и этот суперкомпьютер выполняет относительно простые вычисления в просто устроенной алгоритмически нейросети, то вы получите такие результаты, какие не получите от специально разрабатываемого традиционного «алгоритма вождения автомобиля по правилам». Поэтому внимание исследователей машинного интеллекта обращается к HPC, high performance computing и универсальным аппроксиматорам, вычисления с которыми ведутся на этих компьютерах.
Новые универсальные алгоритмы отличаются тем, что сами функции не программируются/моделируются/описываются вручную/аналитически, но познаются/выучиваются/learn/вычисляются компьютером при минимальном вмешательстве человека. Универсальные алгоритмы нейронных сетей, когда применяются вместо традиционных «императивных» алгоритмов моделирования физических процессов, могут давать ускорение до миллиона раз на аналогичной аппаратуре30.
Распознавание речи, изображений, поиск аномалий (тут нюанс: аномалия характеризуется тем, что нужно распознать не то, что компьютер уже видел, а наоборот — то, чего он ещё не видел!) компьютер делает уже лучше, чем человек.
После того, как универсальные алгоритмы упёрлись в барьер по ресурсам, начались массовые работы по оптимизации этих алгоритмов. Так, выяснилось:
-
Есть зависимость между размером данных для обучения и размером нейронной сети. Огромные сети языковых моделей первого поколения (2018-2023) на 175 миллиардов обучаемых весов оказались банально недообучены, для полного использования такого размера сетей нужно было бы больше данных, больше вычислений, учить нужно было бы ещё дольше и больше. Поэтому можно для тех же результатов для одного размера обучающих данных брать нейросети поменьше — и за меньшие деньги получать «умные» большие языковые модели. Другой резерв — использование данных с меньшей разрядностью (не 32 разряда, а 16 разрядов, не плавающие, а целые 8 разрядов или даже плавающие 8 разрядов, а современные предложения — обойтись 3-4 разрядами!).
-
Если хочется сделать сеть поумнее, нужно выполнить все рекомендации предыдущего пункта (для эффективности!), но поднять размер сети (число весов) и поднять размер данных для обучения, причём данные нужно брать «от людей», а не сгенерированные31!
А алгоритмы творчества есть такие? Если вернуться к универсальным алгоритмам, которые работают с универсальными аппроксиматорами, могут ли они творить? Да, могут. Творчество идёт по тому же пути, что и эволюция: в шуме (например, шуме, получаемом при помощи генератора случайных чисел на тепловом/квантовом шуме, чтобы надёжно этот шум был свободен от любых закономерностей) потенциально содержится всё новое, что может быть придумано в мире. И дальше можно просто модифицировать этот шум так, чтобы он попал под необходимые ограничения. Если немного поманипулировать со сжатием информации (моделированием/онтологизацией/абстрагированием) и последующим разжатием (демоделированием/рендерингом/конкретизацией), то вычислительно это всё может быть вполне осмысленным, «воображение» шума бесконечно разнообразно!
Если каждый алгоритм распознавания основывается на какой-то модели, сохраняющей знания о важном для распознавания аспекте входных сигналов, то можно всегда предложить алгоритм порождения, который в выходном сигнале сохранит это важное — алгоритм распознавания признает творчески сгенерированный новый объект «своим». Алгоритм GAN (generative adversarial network, порождающей соревновательной сети) устроен примерно так: тренируют подалгоритм распознавания, и на вход ему подают шум от подалгоритма генератора — распознаватель говорит «это не то» и сообщает генератору, что ему особо не понравилось. Генератор подстраивает свой выход, чтобы понравиться распознавателю — и так много раз, пока ему не удаётся обмануть распознаватель и подсунуть вроде как «то». Если распознаватель умеет распознавать картины Ван Гога, то генератор в конце концов сумеет сделать картину, которую и человек, и этот распознаватель (качество работы распознавателей сейчас может быть при надлежащем их обучении не хуже, чем у людей) признают, как картину Ван Гога, но готовил эту картину не Ван Гог, а генератор. Это и есть алгоритмика: придумать такого сорта алгоритм, как этот GAN32!
Коннективистские модели (однородные вычислительные алгоритмы, подразумевающие распределение вычислений по многим мелким элементам, типа нейронных сетей) тоже по факту включены в информатику. Авторы алгоритмов обучения нейронных сеток ЛеКун, Бенжио и Хинтон стали лауреатами Тьюринговской премии 2018 года33, то есть машинный интеллект (занимающийся мышлением-не-в-человеке) признали частью computer science и software engineering в профильной ассоциации, Association for Computing Machinery.
По мере ухода всей науки/science в компьютеры вполне возможно, что «наука» как «познание» будет по-английски называться learning (обучение алгоритма-интеллекта решать какие-то классы задач), а в пределе — self-supervising learning (обучение без учителя, по собственной инициативе, используя научное мышление — выдвигая гипотезы и проводя эксперименты). По мере ухода инженерии в компьютеры она будет называться search (поиск инженерного решения в пространстве решений как поиск оптимума функции). Всё это будет алгоритмика обучения и поиска, computer science, а мышление на эти темы — computer thinking/вычислительное мышление.
В алгоритмике вычисления ведутся над данными. В data science обсуждаются разные алгоритмы работы с данными прежде всего — хотя предметом вроде как являются сами данные. Данные стали весьма и весьма «кучерявыми», отражающими результаты больших проектов корпоративного моделирования и множество уровней мета-моделирования: поглядим на корпоративные базы данных, составленные из десятков тысяч таблиц, или представленные графами знаний на сотни миллионов узлов! Одна из популярных методологий разработки корпоративного софта Domain driven design (DDD)34 по факту представляет собой моделирование предметной области работы компании, и результаты этого моделирования отражены обычно в сложных структурах баз данных — там используются главным образом предыдущие перед алгоритмикой дисциплины интеллект-стека. Но затем эти данные всё-таки нужно обрабатывать, как-то их использовать. И вот тут пока работают относительно простые алгоритмы, но не факт, что так будет всегда. Алгоритмы обработки этих данных могут быть вполне сложными! Вычислительное мышление оказывается не столько про собственно вычисления, но и про виды моделей, над которыми эти вычисления могут проводиться — оно неразрывно связано с мышлением про данные, про поддерживаемые экзокортексом модели. Пока простые, но непрерывно усложняющиеся алгоритмы вывода/оценки/вычислений над сложными моделями мира, выраженными в данных — и вот эти сложные алгоритмы, похоже, будут реализованы как настройки параметров для универсальных алгоритмов.
Как и вся остальная мыслительная деятельность, вычислительное/алгоритмическое мышление само по себе начинает поддерживаться компьютерами с универсальными алгоритмами, это предмет сегодняшней программной инженерии, базирующейся прежде всего на современной алгоритмике. У людей постепенно будет исчезать рутинная инженерная/программистская работа по написанию программного кода, настроек нейронной сети, описанию каких-то компьютерных сложных процедур, и можно будет больше времени посвятить чему-то другому. Землекопы не жалеют, что их работу взял на себя экскаватор. Экскаваторщик не будет жалеть, что работу экскаватора берёт на себя автопилот экскаватора. Программисты не будут жалеть, что написание программного кода берут на себя программы. Но всем остальным людям планеты нужно понимать, что происходит: когда нужно вырыть канаву или котлован, к кому обращаться — рыть самому, обращаться к землекопу, экскаваторщику, экскаватору с прилагающимся к нему экскаваторщику? Когда нужно разработать информационную систему, к кому нужно обращаться — разрабатывать самому, обращаться к программисту, программирующему AI с прилагающимся к нему программисту?
Классическая информатика по факту занималась изучением алгоритмов перекодирования: как из одного компьютерного кода получить другой компьютерный код (компиляция программ на языках программирования). Речь в вычислительном мышлении идёт главным образом о расширении этого понимания до менее формальных текстов.
Уместна ли алгоритмика в интеллект-стеке?
Кому нужно знать про универсальные аппроксиматоры и алгоритмы, их реализующие? Нужно ли людям сегодня понимание того, как и зачем используются алгоритмы, какие они бывают, где используются вычисления по самым разным алгоритмам? Грубо говоря: нужно ли учение об алгоритмике в интеллект-стеке, нужна ли такая трансдисциплина?
Да, она нужна. Ибо мы не только запоминаем-вспоминаем информацию (это, кстати, тоже можно делать более и менее эффективно, это тоже предмет алгоритмики!), но и как-то над ней задумываемся, погружаемся в размышления/вычисления, которые требуют ресурсов. По большому счёту, вычисления нужны для:
-
познания/исследований: создание объяснительных моделей на основе восприятия окружающего мира и учёта уже имеющихся объяснений
-
деятельности на нескольких системных уровнях: в цикле/динамике вычисление/inference/вывод/update предсказаний по имеющимся моделям на основе восприятия/внешних данных, планирование действий, которые приведут предсказания к нас устраивающим, и действия/выполнение плана/актуация. Это всё на нескольких системных уровнях и с использованием заранее вычисленных объяснений.
Познание как построение всё более и более мощных объяснений/описаний/моделей мира, дающих всё более и более точные предсказания и деятельность по изменению мира в сторону благоприятных для нас предсказаний по имеющимся объяснениям — это и есть жизнь. В этом плане живым является вообще всё, идёт гигантское вселенское «вычисление» (такой подход развивает всё большее и большее число научных команд, это потихоньку становится мейнстримом).
Такой подход к алгоритмике как задаче получения наиболее эффективного и одновременно наиболее универсального алгоритма, который был бы ещё и самообучаемым, не отличается от классических задач той области computer science, которая называлась artificial intelligence и занималась поиском решения отдельных проблем, имеющих большую вычислительную сложность, и поэтому не подвластную старым компьютерам: это как раз задачи представления знаний (моделирования/познания мира, и тут мы опять попадаем в семантику и логику), а также задачи планирования. Про человеческий «интеллект» в алгоритмике говорили, но это всегда казалось далёкой целью (да и сегодня многим учёным это кажется довольно далёкой целью, хотя не меньшее количество учёных говорит, что эта цель достигнута на текущей архитектуре Transformer и не надо ждать быстрых изменений в этом классе алгоритмов. Есть даже пари на эту тему изменения основного алгоритма универсального интеллекта, можно делать ставки35).
Почему же AI — это была отдельная от всей остальной информаткики область знаний? Потому как решения этих задач в общем виде никак не удавалось алгоритмизировать, получающиеся в результате расчёта модели и планы были хуже тех, которые готовил человек. А сейчас за очень дорого (для самых интересных приложений это миллионы долларов за один расчёт, а этих расчётов нужно много!) модели и планы начинают быть лучше тех, которые могли бы приготовить люди. И цены падают экспоненциально, «искусственный интеллект» становится быстро дешевле грибов!
Классическая алгоритмика — это по факту чуть больше сотни важных алгоритмов, которые встречаются в книжках по алгоритмике, и прогресс в которых приводит к увеличению скорости вычислений даже быстрее, чем прогресс в компьютерном железе, хотя прогресс в компьютерном железе постоянен, а прогресс в алгоритмах идёт скачками. Последнее исследование 113 алгоритмических семей в 2021 году показало36, что в 43% случаев алгоритмика в плане улучшения использования компьютерных ресурсов имеет примерно такой же потенциал, как и улучшение «железа», но в 14% случаев нахождение новых алгоритмов существенно опережало темп ускорения вычислений за счёт новых компьютерных разработок, хотя речь в этом исследовании не шла о переходе к другому типу физики вычислителя: оптике, квантовой физике.
Прежде всего это относится к таким расчётам, которые делаются для предобучения глубоких нейронных сетей, это лучшие универсальные аппроксиматоры (напомним, что речь идёт о свойстве с какой-то заданной точностью аппроксимировать любую функцию как преобразования из входных данных в выходные, под это можно подогнать практически любую задачу). Алгоритмы глубокого обучения — это первый обнаруженный людьми класс алгоритмов, который показал удивительную особенность: качество полученных моделей растёт при добавлении вычислительных ресурсов. Уточнение решений для этих алгоритмов заканчивается не потому, что уже ничего там улучшить не удастся, сколько ни вычисляй, а просто потому, что слишком дорого вычислять. Было бы дешевле, получили бы решение получше! Это очень, очень дорогие на сегодняшний день расчёты, их цена падает с годами экспоненциально, но и потребность в них растёт экспоненциально, потому как если потратить столько же денег завтра, сколько тратим сегодня, закупив на эту же сумму побольше вычислений, то получим результаты лучше! Этот класс алгоритмов был придуман в 1987 году, но другие алгоритмы этот класс алгоритмов смог обогнать только тогда, когда было использовано компьютерное «железо», особо подходящее под эти алгоритмы (GPU37), на обычных компьютерах эти алгоритмы не работают, ибо не хватает вычислительной мощности.
Отвлекаясь от конкретных алгоритмов решения вычислительных задач, где сегодня используется компьютерная мощь, именно вычисления, где можно подглядеть то будущее, которое нас ждёт при реализации тренда экспоненциального падения стоимости вычислительных ресурсов?
Получается такой разрыв: понимание, почему вычисления такие дорогие, и как их сделать дешевле — это предмет алгоритмики, которая находится довольно низко по интеллект-стеку. А использование этого понимания должно быть в бизнесе. Вот идём в бизнес: квантовые компьютеры обещают дать нам невиданную вычислительную мощность, которая явно избыточна для тех, кому компьютеры нужны как ручка-бумажка-на-стероидах. Кто уже сегодня интересуется квантовыми компьютерами, для каких расчётов будут использовать их головокружительные вычислительные возможности? Если посмотрим на разные предложения по использованию38, то заметим там примеры того, о чём мы тут писали, наши догадки верны:
-
создание объяснительных теорий в естественных науках (физика, метеорология, химия, биология и медицина, криптография)
-
предсказания и обновления предсказаний (инженерия, медицина, трейдинг, компьютерная безопасность — смотри все те прикладные практики, которые задействуют объяснительные теории из естественных наук)
-
планирование (всё те же прикладные практики, которые задействуют предсказания из предыдущего пункта)
И первое же применение, в котором квантовые компьютеры показали практическое (а не теоретическое) превосходство над традиционными компьютерами — это расчёты по естественным наукам, магнетизация двумерного твёрдого тела39. До этого момента они показывали превосходство только на никому не нужных расчётах, «теоретическое преимущество». А нужно преимущество практическое. Оно обеспечивается в том числе программным обеспечением, имеющимися алгоритмами для этого типа вычислений.
Продажи нынешних не очень ещё мощных квантовых компьютеров уже идут в научные учреждения (познание), финансовые институты (алгоритмический трейдинг — задачи предсказания), логистические фирмы (задачи планирования), маркетинг (рекомендательные системы, распознавание голоса), медицину (диагностика и планирование лечения, создание новых лекарств, генная инженерия), инженерию (создание новых материалов и цифровые двойники). Все они не могут себе позволить прозевать момент, когда квантовые компьютеры будут доступны, но их специалисты не смогут их использовать, ибо не будут уметь их программировать. Все эти организации попросту проиграют в конкуренции!
Как отследить тренд на вычислительные модели, в которых существенно задействована алгоритмика, а не просто использование компьютеров для накопления данных и их красивого показа? Понятие цифрового двойника/digital twin сегодня быстро размывается в значении, но всё-таки его создание подразумевает создание какой-то модели физического двойника не столько на стадиях проектирования и изготовления, но также и на стадии эксплуатации/использования целевой системы, чтобы иметь предсказания и предупреждения (вот тут вычисления!) состояния физического двойника на основе вычисленных состояний модели (цифрового двойника)40. На сегодняшний день в инженерии принимаются решения на основе традиционных алгоритмов физического моделирования, базирующихся на вручную составляемых людьми системах дифференциальных уравнений, которые потом решает компьютер41. Но и тут работает тот же тренд: физическое моделирование на универсальных аппроксиматорах оказывается надёжней, цифровые двойники тоже переходят на использование универсальных алгоритмов моделирования, сегодня это прежде всего алгоритмы на глубоких нейронных сетях.
А пока квантовых и иных с «новой физикой» дешёвых и мощных компьютеров нет, новые универсальные алгоритмы вычисляются на «обычных» компьютерах с кремниевыми чипами как центральных процессоров (CPU), так и ускорителей вычислений на базе GPU и поддерживающих их DPU (data processing unit — чипов, которые отвечают за обмен данными в большой вычислительной сети компьютеров с CUP и GPU в датацентре).
Как и где эти алгоритмы применяются? Как и естественный интеллект: везде, в самых неожиданных местах, которые только можно придумать!
Например, алгоритм NVIDIA на основе глубоких нейронных сетей сокращает требуемый для видеоконференций трафик вдесятеро42. Если вы занимаетесь видеоконференциями, и не знаете об этом прогрессе в алгоритмике, то вы покинете рынок. Главная тут мысль — такое происходит сегодня повсеместно, универсальные алгоритмы появляются в самых неожиданных местах и дают самые неожиданные результаты. Если вы не знаете, как про эти алгоритмы говорить, сколько они стоят, как и кто их разрабатывает, отслеживают ли их появление айтишники вашей фирмы — вашей фирме не жить. Алгоритмика важна. Первая волна компьютеризации «управления коллективным вниманием» в фирмах быстро переходит во вторую волну, где компьютер берёт на себя часть мышления/вычислений в двух ситуациях:
-
слишком дорого заказывать эти вычисления людям. Так, миллиарды переводов с самых разных одних естественных языков на самые разные другие, которые делают за сутки автоматические переводчики Google, Bing, Яндекса и других технических гигантов, просто не были бы выполнены. Да, они пока ужасного качества, на уровне студента вуза, незнакомого обычно со специальной лексикой какой-то предметной области, но они есть — и не были бы выполнены, если бы нужно было обращаться к людям. Переводчики не потеряли работу, но часть работы взяли на себя алгоритмы
-
алгоритмы выполняют работу, которая раньше людям была недоступна. Законы Кеплера компьютер уже может переоткрыть из данных наблюдения за планетой43. А фирма Sony не стесняясь говорит о создании компьютера-учёного, которому выдадут Нобелевскую премию, что ожидается к 2050 году44. Это всё алгоритмика, эти алгоритмы нужно создать, и эти алгоритмы нужно использовать.
-
В том числе алгоритмы открывают алгоритмы: AlphaDev открыло новые алгоритмы сортировки и сделало компиляторы быстрее45.
В этой универсальности нейросетей не хватает сегодня:
-
Объяснений результатов вычислений универсальных алгоритмов (сегодня — объяснение результатов работы нейронной сети), explainable AI46. Сегодня объяснений нет, «интуиция машинного интеллекта говорит вот так», а почему так — неизвестно, можно верить, можно не верить. Этой проблемой занимаются, какие-то успехи тут уже есть. Нам нужно не просто аппроксимирование какой-то функции, нам нужно ещё и объяснение ситуации в терминах причин и следствий, объяснение решения!
-
выход из чисто вычислительной работы в реальность, то есть восприятие и актуация (extended/embodied cognition). Можно ожидать, что следующий инвестиционный пузырь будет с роботами, а пока основной массив работ идёт с «мозгом» без «тела». По большому счёту, вопрос сейчас начинает ставиться так (это говорит Kenneth Stanley), что прогресс в области обучаемых алгоритмов больше зависит от того, насколько мы можем сделать богатым не сам алгоритм, а ту среду, в которой он обучается. Одно дело, вы выпускаете робота в пустыне и говорите «учись!», другое дело — выпускаете в центре какого-нибудь Нью-Йорка или Пекина и говорите — «учись!». Генерировать нужно не только алгоритмы, но и среды для этих алгоритмов47!
-
осознанности, которую связывают в том числе и с возможностью строить длинные цепочки рассуждений по поводу рассуждений (алгоритм выбора алгоритма, алгоритм управления вниманием как выделением ресурсов для вычислений)
Есть много разных подклассов универсальных алгоритмов. Об этой погоне за универсальностью/Master Algorithm рассказывает книжка Pedro Domingos, но она выпущена аж в 2015 году, это уже только хорошее историческое введение, ибо за прошедшие годы в алгоритмике много чего произошло нового (и продолжает происходить со скоростью два прорыва в неделю48). Сейчас нужно было бы писать абсолютно новую книгу, примерно той же направленности, но дополненную новыми знаниями.
Например, учёные из DeepMind заявили49, что настоящую универсальность дают алгоритмы reinforcement learning, в которых алгоритм «дрессируется» как животное: за достижение цели (или хотя бы приближение к цели) выдаётся награда. Тут же развязалась широкая дискуссия о том, что никакой особо универсальности от этих алгоритмов ждать не приходится, ибо типичная ситуация в том, что мы избегаем неприятностей/выживаем, при этом понятия не имеем, что такое «награда» или даже какого сорта могут встретиться «неприятности». Интеллект сам выбирает, что у него награда, ибо осознанность включает в себя и свободу выбора! Эволюционные алгоритмы — с ними всё в порядке насчёт универсальности (человека-то они сделали!), но для них никогда не хватит вычислительных ресурсов. Чтобы сделать человека, вся Земля несколько миллиардов лет была эдаким вычислителем!
Ещё одна заявка на «безнаградные» алгоритмы — это отсылка к понятиям predictive coding, active inference/деятельное обновление, а вместо «награды» агенты с такими алгоритмами стремятся к минимизации свободной энергии/free energy principle (помним, что «энергия» эта не из физики, а из математики для физики, как и «энтропия» в теории информации). Алгоритмы этого подхода (чаще всего его называют active inference, больше информации можно найти в общественной организации, координирующей самых разных исследователей этого класса алгоритма, Active Inference Institute50), крайне элегантны (кратки и универсальны), но пока не продемонстрировали каких-то впечатляющих практических результатов по сравнению с другими видами универсальных алгоритмов.
Алгоритмы формального логического вывода (раньше это называли «экспертные системы», потом «системы представления знаний», теперь самый распространённый термин — knowledge graphs) показали, что они сами по себе работают плохо, их неудача повлекла так называемую «зиму искусственного интеллекта», когда науку универсальных алгоритмов практически перестали финансировать, вплоть до 2012 года, когда обратили внимание на глубокое обучение. И так далее, по многим и многим классам претендующих на универсальность алгоритмов. И при этом работает теорема бесплатного обеда: что эффективно для какого-то класса задач, будет ужасно для другого. Хотите решения для многих разных классов проблем — имейте много разных алгоритмов, да ещё и выполняйте их на вычислителях с разной физикой! Так что «самый универсальный алгоритм» будет, скорее всего, каким-то сочетанием идей изо всех этих подходов.
Алгоритмика не только про способы вычислений на компьютерах, она и про способы мышления людей!
Но это всё разнообразие подходов к универсальности вычислений и дороговизна универсальных расчётов не снимает факта, что люди перестают заниматься алгоритмикой как придумыванием людьми специальных алгоритмов для отдельных частных прикладных вычислений и больше внимания уделяют универсальным алгоритмам, а уж прикладные вычисления потом делаются по итогам работы универсальных вычислителей. Классическая алгоритмика, конечно, останется (программирование самих универсальных вычислителей включает и классическую алгоритмику), но акценты меняются буквально на глазах: алгоритмика 2016 года и текущего года существенно разная. Так, архитектура универсального алгоритма Transformer впервые была опубликована в 2017 году51, её просто не существовало в 2015 году (году публикации книги Педро Домингоса про The Master Algorithm), но сейчас большинство практических применений AI на базе больших языковых моделей следует идеям этой архитектуры и её модификаций. Ограничения архитектуры Transformer тоже уже хорошо известны, поэтому активно идёт поиск новых и новых универсальных алгоритмов — более универсальных, более скоростных, менее требовательных к памяти. В 2026 году будут уже вполне в ходу квантовые компьютеры, но есть и аналогово-фотонные идеи52, и множество других аппаратных идей, так что и алгоритмика будет для них другой: сложность алгоритмов существенно зависит от физики вычислителя, что трудно для одного вычислителя, то нетрудно и быстро для другого.
Компьютерные вычисления и человеческое мышление одинаковы в том смысле, что это вычисления. Физику нашего «мокрого вычислителя» в голове мы тоже ведь дополняем «ускорителями» в виде разных компьютеров, так что они не только одинаковы, но и по большей части неразделимы — общее вычисление мозга и «ускорителей». Эти «ускорители» тоже могут иметь свои ускорители как «инструменты» — и дальше можно поставить задачу научения пользования инструментами в общем виде53.
Весь этот наш подход «образования для образованных» через предобучение универсального интеллекта на основе интеллект-стека из фундаментальных трансдисциплин — это такой же сдвиг от человека как «опытного» в части владения многими-многими прикладными специализированными алгоритмами решения отдельных прикладных задач к «умному» человеку, который способен справиться с самыми разными проблемами при помощи своего универсального интеллекта. Хотя по классификации Chollet — ещё не универсального для всех классов проблем во вселенной, но всё-таки уже «экстремального» интеллекта, в отличие от текущего компьютерного интеллекта. Ход тот же самый, что и в современной алгоритмике: один и тот же универсальный аппроксиматор, задействуемый для решения самых разных проблем.
Люди тоже всё меньше будут просто «помнить и проверять, узнавать и передавать» (линейные менеджеры, передающие указания от топ-менеджеров персоналу, и собирающие отчёты по работе персонала, становятся не нужны, равно как не нужны и прочие клерки), но больше думать/рассуждать — и плохо или хорошо это будет происходить, тоже будет определяться способом их мышления, алгоритмами. Трансдисциплины интеллект-стека описывают лучшие известные человечеству способы мышления/алгоритмы мышления/последовательности действий, которые нужно выполнить интеллекту, чтобы решить проблему.
В интеллект-стеке нужна алгоритмика как мыслительная практика рассуждений о вычислениях/мышлении в той части, где выясняется, как рационально расходовать свой человеческий вычислительный ресурс, а также ресурс вычислительной техники. Мышление людей дорого, мышление компьютеров тоже дорого. Через некоторое время окажется, что самые дорогие, самые умные люди озадачивают самые дорогие компьютеры (и озадачить эти компьютеры помогают не менее дорогие компьютеры!), и хорошо бы, чтобы эти люди понимали, что способ вычисления/алгоритм имеет значение!
Аппаратура сознания, различия исполнителей и выполнителей
Три нейронных сетки/вычислителя в модели внимания и сознания Graziano54 — воплощение мастерства восприятия, мастерства моделирования себя и мастерства коммуникации соответственно. Вместе же они управляют вниманием: заняты выделением из потока восприятия нужных для агента фигур из фона и позволяют агенту коммуницировать с собой по поводу текущей ситуации с вниманием и его объектами, управлять этим вниманием. Вместе все три нейронные сети (восприятия, моделирования себя, коммуникации), дающие три мастерства (их тоже можно развивать! Можно обучать!) обеспечивают сознание, активно использующееся при исследованиях/познании. Но часть времени эти сети обучаются, а часть — используются, ведут прикладные вычисления на базе уже исследованного/познанного. Постановка надёжного, не отвлекаемого любым шорохом внимания (оно же — развитие собранности как мастерства управления вниманием) делается интеллектом в ходе мышления, собранность оказывается тоже мастерством, которое можно выучить! Другие модели сознания, модели человеческого внимания тоже опираются на алгоритмику, например модель сознания Conscious Turing Machine55.
Тут же можно обсуждать различия исполнителей и выполнителей в смысле из «Программирования для математиков» Кушниренко и Лебедева, первые два раздела первой главы56, хотя для случая неимперативного программирования и тем более вычислений в распределённых представлениях нельзя применить тамошние идеи «в лоб», но если речь идёт о полнотьюринговых вычислениях, а все они таковы, что обсуждается у того же Дэвида Дойча, то различение «исполнитель-выполнитель» может оказаться очень полезным и очень похоже на различие между «мастерством» и «мастером», который задействует это мастерство. Аналогичные различения пытался ввести Алан Кей как chain of meanings, где у него прописана цепочка алгоритмических вычислителей, каждый из которых реализует какое-то «мастерство» в узкой предметной области, всё более и более делимое на части, пока это не становится «просто вычислителем элементарной компьютерной операции в центральном процессоре»57. Мысль тут в том, что информатика так или иначе обсуждает алгоритмы как правила вычислений, многоуровневость этих алгоритмов, алгоритмы создания алгоритмов — и возникает потребность выражения понятий, очень похожих на понятия интеллекта и познания/мышления, мастерства и рассуждений/вывода/вычислений по правилам, а также понятия агента как носителя/владельца/целого для интеллекта и мастера как носителя/владельца/целого для мастерства.
Упражнение: современная алгоритмика
Сходите на вебсайт, пишущий о применениях машинного интеллекта в бизнесе: https://venturebeat.com/category/ai/
Выпишите оттуда три наиболее интересных новости за последние три дня, и обоснуйте, почему они вам кажутся интересными:
| URL новости | О чём новость (своими словами!) | Почему эта новость интересна | |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 |
https://ailev.livejournal.com/1265432.html, Этот подход продолжает реализовываться, см. доклад Кушниренко и Райко «Дошкольная информатика без компьютера» (видео второго доклада https://vimeo.com/337031069, слайды http://g-l-memorial.ice.ru/files/941738/Kushnirenko_Raiko_2019.pptm).
SICP (Structure and Interpretation of Computer Programs вышел в 1979 году, 41 год назад), он был «фундаментальным курсом» для computer science (https://mitpress.mit.edu/sites/default/files/sicp/index.html).
In short, SICP, Scheme, and functional programming don’t prepare students properly for other programming courses and thus fail to meet a basic need — https://www2.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf. Название этой критики SICP ровно то, что нам нужно — The Structure and Interpretation of the Computer Science Curriculum (Matthias Felleisen, Northeastern University, Boston, MA, USA, Robert Bruce Findler, University of Chicago, Chicago, IL, USA, Matthew Flatt, University of Utah, Salt Lake City, UT, USA, Shriram Krishnamurthi, Brown University, Providence, RI, USA).
https://cstheory.stackexchange.com/questions/1521/origins-and-applications-of-theory-a-vs-theory-b
самое ранее упоминание было в 2019 году — http://chemistry-chemists.com/forum/viewtopic.php?f=45&t=1600&start=100, это краткое изложение более длинного и полного рассказа catcha в 2011 году, https://www.multitran.com/c/m.exe?a=4&MessNum=257738&l1=1&l2=2
первый доклад в https://vimeo.com/553810189, слайды https://yadi.sk/i/F6e33aVANX3J3g
http://www.isattentionallyouneed.com/, но есть и разные другие варианты оценок, например, https://www.metaculus.com/questions/4892/transformers-as-lm-sota-in-2025/
https://www.idquantique.com/quantum-safe-security/quantum-computing/real-world-applications/, https://hbr.org/2021/07/quantum-computing-is-coming-what-can-it-do, https://builtin.com/hardware/quantum-computing-applications
См. ленту новостей по алгоритмике для универсальных алгоритмов (алгоритмов AI), https://syncedreview.com/
Toolformer — https://arxiv.org/abs/2302.04761, TaskMatrix — https://arxiv.org/abs/2303.16434
Краткий рассказ в https://selfawarepatterns.com/2019/09/29/a-standard-model-of-consciousness/, полное изложение в https://yadi.sk/i/jNrkSyc-9ohRIA