Полная версия
Активные данные. Философское программирование
Один из концептуальных способов описания поведения и построения моделей самых разнообразных сложных систем, носит название «Метод чёрного ящика». В классическом чёрном ящике важно только то, что входит и выходит. Именно это мы и будем рассматривать как данные. Входные и выходные данные – это поток сигналов, который из всего огромного разнообразия сигналов внешнего мира, с одной стороны выделяет и воспринимает, а с другой, генерирует и возвращает обратно, конкретная система. Если же мы приоткроем чёрный ящик и заглянем внутрь, то у нас появляются некоторые знания, с помощью которых можно определить, какой компонент воспринимает сигналы на входе, а какой отвечает за их генерацию на выходе, в теперь уже сером ящике. И наконец у программистов, вход и выход связаны программой, где каждый шаг понятен и определен. При таком подходе у нас появляются количественные характеристики входных и выходных компонент, такие как пропускная способность, формат сигнала, объемы памяти и др. Только не нужно забывать, что декомпозируя ящик, можно этот же подход применить на любом уровне и для любого функционального блока внутри. Так, например, минимальным компонентом в компьютере можно считать ячейку памяти, а в биологической системе – отдельную клетку, хотя всегда можно продолжить декомпозицию, как клетки, так и ячейки памяти.
В классической модели компьютера данные поступают и передаются вовне через устройства ввода/вывода. В биологических системах, данные – это разнообразные физические взаимодействия или молекулярные объекты, которые могут восприниматься сенсорными клетками, и на которые реагируют рефлекторные механизмы. Данные могут генерироваться источником целенаправленно, например радиостанцией, которая создаёт и передает сообщения в сеть слушателей, или человеком, порождающим поток слов во время разговора в интернете. Это могут быть любые физические сигналы, возникающие в окружающем нас мире: космическое излучение астрономических объектов или молекулы запаха цветка в воздухе. И все эти сигналы превращаются в информацию в тот момент, когда получатель воспринимает их и интерпретирует в соответствии со своим состоянием. И уже из информации могут быть получены знания, которые образуют индивидуальную ассоциативно-связанную систему фактов и процедур.
В биологических системах, физиология знаний – это изменения состояний нейронов, свойств нервов и появление новых ассоциативных или моторных связей. Мы еще слабо представляем, как всё это происходит в комплексе, но некоторые детали этого процесса уже более или менее понятны. Например, для того, чтобы установить новую связь, целевой нейрон выделяет нетрины – специальные макромолекулы, которые привлекают аксоны, а исходный нейрон инициирует рост нерва, который «по запаху» должен найти свою цель. Всё выглядит элементарно для пары нейронов. Но если попробовать представить себе сложнейшую композицию асинхронных процессов, где один исполнитель начинает, другой подхватывает и продолжает, и всё это происходит в миллиардах нейронов, между которыми появляются триллионы связей, и в этой гармонии возникают новые индивидуальные знания, то становятся понятным, почему Д. Кнут и Э. Дейкстра сравнивают программирования с музыкой, и утверждение биохимика, что «мы живем до тех пор, пока внутри нас звучит симфония запахов».
Биохимики – люди в меру циничные, поскольку знают, что человеческие чувства – это производные химических процессов, которые в норме инициируются нервной системой. Для того, чтобы то или иное чувство возникло, нужно заставить эту систему работать, и хотя человек может и обмануть самого себя, испытав иллюзию чувств при помощи искусственных наркотических субстанций, но ничего нового при этом у него не возникнет. «Получается, что когда мы узнаём нечто, у нас возникает биохимическое Чувство Нового? И пока наш мозг способен выделять нетрины, мы способны удивляться и учиться?» – спросит романтичный программист. Вполне возможно, что чувство нового, это одно из основополагающих и мотивирующих в индивидуальном развитии думающего существа. И живое существо активно живет и развивается лишь до тех пор, пока его мозг способен воспринимать и устанавливать новые связи между нейронами. А в понимании того, как и почему нетрины притягивают аксоны, и лежит ключ к созданию систем по обработке знаний.
Эволюция биологических систем происходит от простейшей, но далеко не простой! клетки, к простейшим, а в последующем, ко всё более усложняющимся организмам. В какой-то момент у организмов появляется нервная система, у которой уже на следующем этапе развития, формируется головной мозг.
клетка → системы клеток → нейроны → головной мозг
Развитие информационных машин происходит похожим образом: от простых компьютеров – к сетям и облакам. Затем, на очередном этапе эволюции, появляется искусственный интеллект, у которого в дальнейшем должен будет сформироваться аналог головного мозга – система искусственных нейронов?
компьютер → интернет → искусственный интеллект →???
Клетки являются исполнительными механизмами – машинами, которые выполняют заданные действия, под управлением внешней программы РНК. Эта программа задает правила и определяет поведение любой биологической системы. Программа может допускать варианты, вероятности, изменять реакцию в соответствии с состоянием и значением тех или иных параметров, но интерпретация программы РНК рибосомой, происходит в соответствии с алгоритмом, который заложил в нее «автор». Клетка может породить новую, модифицированную клетку, но она не может учиться и приобретать знания.
Точно также и компьютеры были созданы для того, чтобы строго исполнять последовательности инструкций. Идеи и цели, которые находились в голове у программиста при создании программы, не доступны центральному процессору, который должен получить команду и выполнить ее, в соответствии с правилами, которые заложил в него конструктор, и которые ожидает от него программист. Многие поколения классических компьютеров были построены на основе принципов, заложенных в архитектуре фон Неймана. В процессе работы над ней, фон Нейман соединил доступные для него знания физиологии нервной деятельности, с математическими формализациями и инженерными решениями. Структура его вычислительной машины состоит из трех блоков: вход, обработка и выход, по аналогии с тремя типами нейронов: сенсорные, ассоциативные и моторные. Однако если сравнить современные модели нейрона и рибосомы, то окажется, что его архитектура значительно ближе к рибосоме чем к нейрону!
В современных компьютерах оперативная память содержит множество однотипных элементов, количество которых сравнимо с количеством клеток в биологических системах, однако все эти элементы являются пассивными, и в отличие от биологических нейронов не являются функционально полными устройствами.
Первоначально фон Нейман объединил устройство управления, арифметико-логическое устройство и память в один блок, который он назвал ассоциативным нейроном или центральным процессором. На первый взгляд может показаться, что его процессор напоминает модель нейрона, однако биологический ассоциативный нейрон в отличие от пассивного запоминающего элемента обладает самостоятельной активностью. Компьютер на ассоциативных нейронах так никогда и не был реализован – вместо множества активных элементов, из которых он должен был бы состоять следуя первоначальной схеме фон Неймана, классический компьютер построен из пассивных ячеек памяти, связанных с единственным центральным процессором.
Первое поколение искусственных нейронных моделей, основанное на работе МакКалока и Питтса «A logical calculus of the ideas immanent in nervous activity», было построено исходя из предположения, что нервная активность биологических систем подчиняется закону – «всё или ничего», и как следствие этого, «…нервную деятельность, нейронные события и отношения между ними можно рассматривать с помощью логики высказываний». Искусственный нейрон, построенный по этой схеме, содержит два основных блока – сумматор и функциональный преобразователь, а сама сеть, состоящая из таких нейронов, предполагается неизменной во времени.
Ограничения архитектуры фон Неймана стали заметны, практически сразу же после появления построенных на её основе промышленных версий компьютеров и языков программирования. Джон Бэкус, был один из первых, кто проанализировав узкие места машин Тьюринга и фон Неймана, предложил принципиально новую модель – функциональное программирование, или, если применить более современную терминологию – распределенную систему функциональных объектов с динамическими связями. И хотя в его работе используется сложный математико-логический способ анализа проблемы и описания решения, если настойчивый программист с базовым математическим образованием уделит немного времени чтобы разобраться в сути его небольшой статьи: «Can programming be liberated from the von Neumann style?», то для него станет понятной связь между моделью λ-исчислений и биологическими нейронами.
Существует глубокое заблуждение, что «нейрон прост» и представляет собой элемент с известными функциональными свойствами, которые можно формально специфицировать. При этом упускаются из вида хорошо известные факты:
– как и всякая клетка, нейрон может размножаться;
– нейрон способен инициировать соединения с другими нейронами;
– нейрон может принимать или отказываться (attraction, repulsion) от приглашений на соединение, поступающие от других клеток;
– внутри нейрона есть механизм, который реагирует на изменение электро-магнитного и биохимического состояния внешней для него среды и, соответственно, у него есть генератор ответных электрических или химических сигналов;
– нейрон имеет внутреннюю долговременную память – при помощи рибосомы он способен копировать и интерпретировать молекулы РНК, в которых могут храниться разнообразные данные.
Эти свойства нейрона, а также ещё многое, чего мы пока не знаем, позволяют утверждать, что нейрон – не прост! Это не элемент, а сложная система, и ближайшим аналогом ему является вовсе не процессор или запоминающий элемент памяти, а целостный компьютер. Если исходить из этой аналогии, то нервная система похожа на сеть компьютеров, или – интернет нейронов.
Способность нейрона связываться с другими нейронами и с другими функциональными клетками, изменять свое состояние в соответствии с внутренними процессами и внешними сигналами, запоминать значения и генерировать выходные импульсы – является важным свойством, которое предполагает новый подход к анализу нервной деятельности, но одновременно открывает программистам пути для использования опыта биологических систем при решения принципиально нового класса задач.
Когда-то Аристотель в своих рассуждениях о природе знаний, выделил два типа поведения: подчиненное и рассудительное. Подчиненное поведение – это исполнение инструкций без необходимости или возможности понимать цель. А рассудительное – способность определить пользу действия и разработать инструкцию для исполнителя. Человек, способный понять – способен сформулировать цель и определить способ достижения. Так же и программист создает последовательности инструкций для исполнения компьютером аналогично тому, как менеджер или технолог создают процедуры для исполнителей в офисе или на производстве. В биологических системах, для того чтобы понять, используются динамические многослойные нейронные сети, способные генерировать новые ассоциации. Создание новых ассоциативных связей – это то, что отличает высшую нервную деятельность от любых, сколь угодно сложных, исполнительных механизмов или систем интерпретации программ. Нервная система червяка-нематоды принципиально отличаются от человека не только количеством нейронов, но и тем, что наш мозг постоянно создаёт новые связи, а у червяка, после этапа формирования, они остаются одними и теми же на протяжении всего периода его существования. И наверное поэтому люди все разные, а червяки – одинаковые.
Какой бы сложной не была программа, до тех пор, пока исполнительный механизм будет следовать ее логике, этот механизм не создает новых знаний. И в этом отличие машин Тьюринга или фон Неймана от динамических нейронных моделей. Машины такого типа не могут работать без загруженных в них программ, а наш головной мозг работает без центрального процессора и без внешнего программиста. Теперь на вопрос: «Может ли машина мыслить?» рассудительный программист мог бы ответить так: «Одна машина мыслить не может точно, а вот множество взаимосвязанных машин с определенными новыми свойствами, похоже, что да. И кто знает, возможно, что Интернет – это прототип нового поколения умных машин?».
Возвращаясь к ДНК и базовым моделям вычислительных машин, в которых данные интерпретируются однозначно, можно сказать, что в основе этого лежит буква. В формальных грамматика такой объект называется Терминалом. Действительно, для заданного алфавита, любая система должна распознавать букву из этого алфавита, однозначно. И любая буква, поступающая на вход такой системы, также должна иметь единственное значение. После того, как входное устройство передало сообщение процессору, буквосочетания будут интерпретироваться в соответствии с логикой внутренней программы, которая может быть весьма сложной и иметь свое состояние. Но если заглянуть в память машины, мы увидим статические последовательности «букв, которые могут быть изменены только центральным процессором по командам программы.
Хотя алфавиты, с которыми работают компьютеры, меняются часто, неизменной остается двоичная система, на базе которой строятся более мощные структуры – машинные слова, шестнадцатеричные символы, юникод, и т. п. А вот базовая спецификация языка, на котором записаны коды биологических программ не меняется на протяжении миллиарда лет! И более того, это язык, в основании которого лежит очень простой алфавит. Можно сказать, что геном человека – это программа, написанная всего четырьмя буквами. Если бы нам удалось построить аналогичную основу систем программирования, то продолжительность жизни программ увеличилась бы существенно, и это то направление, в котором работают конструкторы виртуальных машин.
Совсем иная ситуация возникает, когда мы используем слова. Слово естественного языка не может быть определено однозначно, потому что его интерпретация происходит в системах с различными ассоциативными связями и состояниями. Одно из ключевых свойств нейронных сетей, это неоднозначная интерпретации входного сообщения, которая зависит от контекста или состояния этой сети. Каждый человек или каждая активная нейронная сеть, получив сообщение, поймет его по-разному и более того, одно и то же сообщение будет воспринято иначе одной и той же системой в разное время. Интересно, что такое свойство нейронных систем, хорошо согласуется с физическими свойствами неопределенности и относительности – два наблюдателя не в состоянии синхронизировать свои знания.
Поток слов, поступающих в нейронную сеть, вызывает возмущение ее состояния, которое можно представить себе как волнение поверхности воды от падения капель дождя. Такой образ, совсем далекий от строгих определений, к котором привыкли алгоритмические программисты, вряд ли смутит человека, не знакомого с формальными грамматиками, но неоднократно наблюдавшего волнения воды. А поскольку наша задача при создании новых «умных» систем, будет очень похожа на моделирование волновых процессов, мы надеемся, что подобные аналогии помогут с формированием образного представления о том, как такое решение может работать.
Дело и деньги
Богатый – это тот, у кого денег всегда достаточно.
Почти математическое определение (Р. Ф.)
Среди программистов не бывает бедных. Они по сути своей профессии всегда должны иметь достаточно средств или возможностей, чтобы получить доступ к компьютеру. И не обязательно его покупать – очень часто программисты работают на чужих компьютерах, но именно «власть» над компьютерами, физическими или виртуальными, делает программиста собственником в самом положительном смысле этого слова. Некоторые программисты зарабатывают много денег, а у других, денег достаточно, чтобы получать удовольствие от любимого дела. Достаточно – очень интересное слово! В одном случае оно может определять условие, а в другом, количество, как и категория бесконечность, которая в одной математике – число, а в другой – процесс. В древности, люди употребляли слово много для обозначения совокупности предметов, а правила счета в самой старой троичной системе (1, 2, много) были очень просты: 1+1=2; 2+1=много; много+много=много. По аналогии с такой троичной арифметикой слово достаточно можно применить как критерий в нечёткой логике человеческих ценностей. Для программистов различные логики и операции над лингвистическими значениями, являются естественной и рутинной нормой. Например, вместо двоичной системы счисления или булевой логики, в современном программировании для определения двоичного состояния битa памяти, используются троичное значение, которое может быть: 1, 0 или null (если значение неопределено или недоступно) и большинство современных компиляторов это учитывают. A такие лингвистические переменные, как «лучше» или «хуже», согласно Л. Заде, можно свести к функции или набору числовых параметров, и уже к ним применять стандартные алгебраические операции.
И вот здесь на нашей сцене появляется деловой человек (бизнесмен), для которого подобные логические и лингвистические проблемы не относятся к категории значимых, а понятие богатство по обыкновению, это количество, которого всегда не достаточно.
Если посадить рядом бизнесмена и программиста, разговор между ними получается очень сложным. У делового человека и у программиста разное практически все: словарный запас, парадигмы мышления, критерии, стиль жизни, и ко всему этому, долгая история взаимного недоверия. Но есть нечто, объединяющее их вопреки всем различиям. Дело или действие, это то, ради чего, в конечном счете, программист пишет программы, и если во всех рассуждениях, наряду с физиком и математиком, он будет прислушиваться к мнению делового человека, а иногда и обращаться к нему с идеями или предложениями, то от этого безусловно выиграет не только наша книга.
Все деньги в современном мире создаются или контролируются информационными технологиями, а программисты, это те, кто создают и контролируют эти самые информационные технологии. «Если бы ещё знать, что такое деньги?» вдруг возникает дерзкая мысль у наивного программиста. Ведь не зря же появились биткойн и множество его вариантов. Правда, хитрые бизнесмены быстро привязали биткойны к доллару, и – пропала независимая мера! Но если деньги выступают в качестве меры стоимости, то, следуя логике измерения энерго-информационных действий в джоулях и битах, почему бы не предложить универсальную меру, в которой эти две единицы будут объединены? И тут расчетливый программист декларирует: «Если построить энерго-информационную модель, в которой единицы измерения энергии и информации – джоуль и бит, будут связаны интуитивно понятными отношениями, то это позволит создать принципиально новую денежную единицу, назовем ее условно ДжоБит, которая может прийти на смену биткойну и даже доллару.». Тогда на энерго-информационном рынке возможны вот такие отношения подобия:
1 грамм молока ~ 1 байт знаний ~ 1 ДжоБит
1 грамм колбасы ~ 1 байт веселья ~ 1 ДжоБит
3 минуты программиста ~ 1 минута врача ~ 2 ДжоБит
В такой модели становится возможным обосновать соответствие между трудом информационным и трудом физическим. И вековая мечта философов о равенстве, о справедливом обмене на рынке производства и потребления, становится теоретически достижимой. Ведь если можно измерить любой труд, то и результатами труда можно обмениваться на основе понятных и соизмеряемых величин. Старый лозунг социалистов: «От каждого – по способностям, каждому – по труду» будет оставаться идеалистической догмой, до тех пор, пока не появится сначала теоретическая, а затем и практически осуществимая возможность измерить труд в двух его составляющих: физической и информационной.
Если это произойдет, будет устранена ключевая проблема в экономической модели наивных коммунистов, в которой только физический труд рабочих оценивается на основе измерений и нормативов, а знания и удовольствия относятся к непостижимой области идеализма. Одновременно и теория капитализма приобретёт радикально иной смысл, когда рыночные отношения, по аналогии с законом сохранения энергии в физике, будут служить основой для оптимизации новой экономики, в которой термины «бесплатное» и «прибыль» не имеют смысла. Равенство людей, должно быть основано на том, что они получают равные деньги за равный труд, независимо от того, где и как они работают. Один программист может написать программу за неделю, а другой – за две, но в результате оба совершат одинаковую работу и должны получить за неё одинаковую плату. Но если за одинаковое время один программист заработает сто единиц, а другой десять, то это вполне возможно и нормально, и подтверждается старыми статистическими данными измерений различных параметров технологии программирования, которые показали, что производительность труда среди программистов в среднем отличается приблизительно в десять раз.
«Получается, что когда в проект приглашают людей из других стран, и за ту же самую работу им платят меньше, то это форма дискриминации? Или эксплуатации? Становится понятной суть поведения некоторого подмножества множества посредников (финансовых, маркетинговых, страховых и др.), которые разнообразными способами отнимают у людей деньги, не создавая ничего полезного и прикрываются понятием прибыли, якобы обоснованной теорией капитализма. Мы должны бороться против дешёвой рабочей силы!» – возбуждённо воскликнет программист-демократ и с ним наверняка согласятся многие беспартийные участники производственных отношений.
Однако программисту не следует слишком далеко углубляться в самые различные области знаний, с которыми его сталкивает профессиональная деятельность, и особенно – в политические споры! Интерес программиста к предмету, с которым его на короткое время сводит судьба, как правило, дилетантский. Но все-таки, в логике и умению быстро разобраться в сути проблемы, программистам не откажешь. И вот если провести экспресс-анализ архитектуры, да и самой возможности построения системы поддержки универсальной денежной единицы, основанной на энерго-информационной мере, то аргументы и предложения расчетливого программиста могут показаться вполне разумными.
Можно начать с информационного барьера В. М. Глушкова. Рассуждая о способности человека обрабатывать информацию, он пришел к выводу о необходимости создания новой, безбумажной экономики. В рассуждениях Глушкова, совершенно далеких от монетарных проблем, есть вроде бы тривиальный, но в то же время очень важный формальный момент: способности человека потреблять энергию и тратить ее на работу, так же, как и воспринимать и обрабатывать информацию – ограничены, и стало быть, существует барьерная функция, которая позволяет вычислить объективное значение суммарного производственно-потребительского порога человечества в джоулях и битах. И эта величина может послужить основой для определения не только оптимального объема данных на веб-странницах в Интернете, но и предельного количества универсальных ДжоБитов, по аналогии с золотым запасом или максимальным количеством биткойнов. А если известна предельная величина и мы сможем построить баланс, то это и есть основа для универсальных расчетов. Таким образом, вместо сложного и закрытого механизма печати и перераспределения денег, которую мы имеем сегодня, можно построить прозрачную и основанную на понятных показателях систему, в которой деньги будут обладать всеми свойствами привычных мер, таких как масса, длина, температура и т. п. Все основные компоненты и технологии, которые потребуются для её создания, имеются в наличии, включая протоколы блокчейн, методы измерений энергии и информации, а также расчетливых программистов, которые могут всё это реализовать. Дело за малым.