Мы очень часто используем понятие сложности, мы с ней боремся, и в то же самое время, мы создаем все более упорядоченные структуры, мы уменьшаем энтропию и утверждаем себя этим. В то же время, мы должны быть готовы к изменениям, мы должны быть адаптивными. Где точка равновесия? Что стоит за всеми этими понятиями и концептами. Может есть нечто, что объединяет это все, скрываясь от наших глаз, и в то же время находясь постоянно у нас на виду?
Начнем с маленьких шажочков и попробуем раскрыть глубокие структуры, лежащие в основе комплексных систем, и, для начала, обратимся к удивительно красивой, и в какой-то мере революционной теории NK автоматов С. Кауфмана.
NK автоматы или «life on the edge of the chaos».
NK автомат (см рисунок) это сеть из N Булевых логических элементов. Каждый элемент имеет K входов и один выход. Сигналы на входах и выходах элементов бинарны, т.е. принимают значения либо 0 либо 1. Выходы одних элементов поступают на входы других, эти связи случайны, но число входов К каждого элемента фиксировано. Сами логические элементы также выбираются случайно. Система полностью автономна, т.е. отсутствуют внешние входы. Число элементов входящих в автомат предполагается большим, N>>1.
Автомат функционирует в дискретном времени t = 1, 2, 3,… Состояние автомата в каждый момент времени определяется вектором Х(t) — совокупностью всех выходных сигналов всех логических элементов. В процессе функционирования последовательность состояний сходится к некоему аттрактору, — предельному циклу. Последовательность состояний X(t) в этом аттракторе может рассматриваться как программа функционирования автомата. Число аттракторов М и типичная длина аттрактора L — важные характеристики NK-автоматов.
Поведение автоматов существенно зависит от связности К.
При больших К (К=N), т.е. количество связей равно или почти равно количеству элементов <<жизнь>> автоматов стохастична: последовальные состояния аттракторов радикально отличаются друг от друга. Программы очень чувствительны (существенным образом изменяются) как по отношению к минимальным возмущениям (случайное изменение одной из компонент выходного вектора Х(t) в процессе работы автомата), так и к минимальным мутациям (изменение типа элемента или связи между элементами). Длина аттракторов очень велика L ~ 2 в степени N/2.
Количество аттракторов М порядка N. Если количество связности К уменьшается, то есть число входов на каждый Булевый элемент уменьшается, то стохастическое поведение все еще наблюдается, до тех пор, пока мера связности не становится K ~ 2
При K ~ 2 поведение автоматов меняется радикально. Чувствительность к минимальным возмущениям слаба. Мутации, изменения на входах, как правило, вызывают только небольшие вариации в динамике автоматов. Только некоторые редкие мутации вызывают радикальные, каскадные смены «программ» автоматов. Длина аттрактора L и число аттракторов M порядка квадратного корня из N.
Это поведение на краю хаоса. На разделительной полосе между порядком и хаосом.
NK автомат может рассматриваться как модель регулирующих и контролирующих генетических систем в живых клетках. К примеру, если мы рассматриваем синтез протеинов (экспрессию генов), как регулируемую другими протеинами, то мы можем аппроксимировать эту регулирующую схему экспрессии гена Булевым элементом, таким образом, полная сеть молекулярно-генетического контроля и управления клетки может быть представлена сетью NK автоматов.
С.А. Кауфман утверждает, что случай K ~ 2 является подходящим для моделирования регулирующих систем биологических клеточных механизмов, особенно в эволюционном контексте. Основные тезисы данной аргументации следующие:
Управляющие генетические системы, существующие на краю хаоса, обеспечивают, как необходимую стабильность, так и потенциал для прогрессивных эволюционных улучшений. Т.е. если ты стабилен, то при изменении внешних условий, ты вымрешь. Если ты напротив, часто меняешься, то ты также вымрешь, поскольку не сохранишь оптимальный набор генов;
Типичная схема клеточной регуляции генов включает в себя малое число входов(воздействий) от других генов, в соответствии со значением K ~ 2;
Если мы сравним количество аттракторов автомата M при К=2 (подсчитанного для данного числа генов N) с количеством различных типов клеток (нервные, мышечные и т.д.) в биологических организмах на различных уровнях эволюции, мы обнаружим похожие значения; К примеру для человека (N ~100 000): M = 370, количество типов клеток = 254
Поскольку регулирующие структуры «на краю хаоса» (K ~ 2) обеспечивают как стабильность, так и эволюционные улучшения, они могут предоставить необходимые условия для эволюции генетических киберсистем, поскольку данные структуры имеют «способность к эволюции». Кажется вполне правдоподобным, что такого типа регулирующие и контролирующие системы были выбраны на ранних стадиях жизни, и это в свою очередь, сделало возможным дальнейшую прогрессирующую эволюцию.
Если мы начнем двигаться немного далее, то перед нами встанет вопрос, почему в природе существуют два пола? Ведь, по идее, если мы возьмем простой эволюционный алгоритм, который совершает случайные мутации и выбирает лучших, согласно какому-либо критерию, то рано или поздно оптимум приспособленности будет достигнут. Вот вполне естественные вопросы, которые возникают перед нами:
Какова роль секса в эволюции? Репродукция с рекомбинацией практически вездесуща в жизни (даже бактерия обменивается генетическим материалом), тогда как асексуальные виды являются, по видимому, редкими тупиками эволюции. Что дает полам такое преимущество? Что дает преимущество сексу как таковому, мы с вами знаем :)
Что конкретно оптимизирует эволюция?
Парадокс вариации. Генетическое разнообразии у людей, да и других видов, намного выше, чем предсказывала теория эволюции (естественный отбор). И если принимать во внимание то, что в какой то мере эта вариация нейтральна, то опять возникает проблема.
Как найти правильный баланс между способностью к адаптации и стабильностью?
Секс практически универсален в жизни: он везде — у животных и растений, грибов, бактерий. Да, многие виды вовлечены и в асексуальное размножение, или в почкование, в какое-либо время своей жизни, но также у них существует и сексуальное размножение в другие моменты времени, гарантируя тем самым то, что их гены будут перетасованы.
Не только секс присутствует повсюду, но по видимому, он является весьма главной точкой жизни, как таковой. Достаточно посмотреть на все многообразие поведений и структур, от соединения бактерий до интенсивной молекулярной инженерии мейоза (процесса рекомбинации генетического аппарата), от бесчисленных оттенков цветов, до танца и завораживающего пения птиц, от сражений до драмы человеческих отношений, очень много в жизни вращается вокруг секса. Так почему? Какую роль может секс играть в эволюции?
Один достаточно общий ответ, это то, что секс генерирует достаточное разнообразие, и таким образом, это должно помочь эволюции. Но также, как сексуальное размножение собирает генетические комбинации, оно же и разбивает их. Очень успешный генотип может быть разломан и потерян в следующем поколении, поскольку потомок приобрел только половину генов. Таким образом, утверждать, что роль секса это создавать очень приспособленные генетические комбинации, это все равно, что наблюдать за рыбаком, ловящим рыбу только для того, чтобы выкинуть её обратно в море, и делать из этого вывод, что он хочет принести еду на стол своей семье.
Сексуальная репродукция представляет собой включение половины генов одного родителя, и половины другого, добавления очень малых значений мутаций и комбинирования всего этого, для получения потомков. Асексуальная альтернатива, — это создание потомков из небольших мутированных копий родительского генотипа. Кажется вполне правдоподобным, что асексуальная репродукция это лучший путь оптимизировать индивидуальную приспособленность, потому что хороший набор генов, которые показали свою отличную работу, могут быть переданы напрямую потомству. С другой стороны, сексуальная репродукция вероятно разобьет этот набор генов с хорошей ко-адаптацией. Особенно, если этот набор генов большой! Интуитивно нам ясно, что это должно уменьшать приспособленность организмов, которые уже в процессе эволюции выработали у себя сложные ко-адаптации.
Одно из возможных, и взятое в общем контексте, наиболее вероятных объяснений превосходства сексуальной репродукции это то, что в долгой перспективе, критерием для естественного отбора может быть не индивидуальная приспособленность, а скорее возможность независимой совместной работы генов. Способность набора генов совместно работать с другим случайным набором генов делает их более устойчивыми. Так как ген не может полагаться на большой набор партнеров, которые будут присутствовать всегда рядом, он должен выучить что-либо полезное сам по себе, или в сотрудничестве с малым числом других генов. Согласно этой теории, роль сексуальной репродукции заключается в том, чтобы не только позволить удачной комбинации генов распространиться по популяции, но и облегчить этот процесс уменьшением сложных ко-адаптаций, которые могут уменьшить шанс нового гена в улучшении приспособленности индивида.
Ричард Доукинз в своей скандальной книге "Эгоистичный Ген", также утверждает, причем убедительно аргументируя, что единицей эволюции являются не виды, и не популяции, а аллеи генов, и продолжительность жизни данных единиц эволюции не сотни и тысячи лет, а десятки миллионов. Мы же не более чем машины, выращенные генами, для достижения своих целей, хоть это и звучит шокирующе.
Данная теория роли секса в эволюции появилась в работах А. Ливната и К. Пападимитроу в 2010 г. Sex, mixability and modularity.
Вышеупомянутая теория повлияла на методы обучения нейронных сетей. Нейронные сети являются универсальным аппроксиматором, и могут с достаточной точностью представить любую функцию, с необходимым уровнем приближения. Но поскольку наши собранные данные зашумлены, то идеальная аппроксимация приводит к оверфиттингу, то есть нейронная сеть обучается не только данным, но и шуму с которым эти данные были измерены. Более того в пространствах высокой размерности на многообразиях высокой кривизны, мы не можем использовать Гауссовы ядра для аппроксимации окрестностей нашего многообразия, и нам необходимо найти sweet-spot между оверфиттингом и правильной аппроксимацей многообразия, на котором лежат данные. То есть, тут мы сталкиваемся со старой доброй бритвой Оккама в виде правила объяснения данных минимальной размерностью Вапника-Червонескиса.
В теории машинного обучения подходы, которые, помогают нам найти общие правила, объясняющие структуру наших данных, называют регуляризаторами. В нейронных сетях, к примеру, это может быть затухание весов L2, регуляризатор разреженности L1, ранняя остановка и т.д.
DropOut был мотивирован разбиеним ко-адаптаций в генотипах. Что это такое?
Сам термин DropOut ссылается на отбрасывание юнитов (нейронов) как видимых, так и скрытых. Под отбрасыванием элемента, понимается временное исключение его из сети, как с входными, так и с выходными соединениями (см рисунок внизу).
Слева стандартная нейронная сеть. Справа пример сети, после отбрасывания части нейронов, они отмечены как перечеркнутые.
Выбор, какой элемент отбрасывать, случаен. В самом простом случает, каждый элемент остается в сети с некой фиксированной вероятностью, независимой от других элементов. Грубо говоря, перед каждым проходом по сети, в процессе обучения, мы кидаем монетку и определяем, остается ли этот нейрон в сети, для данного прохода, или нет. После каждого прохода, процесс повторяется.
После обучения, все веса нейронов умножаются на вероятность их присутствия в процессе обучения, и в итоге мы получаем взвешенный ансамбль моделей.
Таким образом, подобно набору генов, каждый элемент в нейронной сети обученный с применением dropout, должен учиться работать вместе со случайно выбранным множеством других элементов — нейронов. Это должно сделать каждый нейрон более устойчивым, и двигать его веса к созданию полезных признаков, которые должны работать сами по себе, без надежды на корректировку и поддержку со стороны других нейронов, которые бы корректировали его ошибки. Таким образом разбивается возможная ко-адаптация элементов, которая ведет в общем случае к устойчивости и генерализации.
Комплексные ко-адаптации могут быть обучены и показывать хороший результат на тренировочных данных, но на новых данных они имеют намного большую вероятность провалиться, чем малые простые ко-адаптации, которые стремятся к той же самой цели.
Этот же самый концепт, разбития ко-адаптации, как в роли секса, так и в применении dropout, можно вывести, размышляя об успешных заговорах. Десять групп, в каждой из которых 5 человек, это лучший способ создать смуту и панику, чем один большой заговор, требующий 50 человек, которые должны точно исполнять свои роли. Если условия не меняются, и в наличии есть много времени на подготовку, то большие заговоры могут работать неплохо, но в нестабильных условиях и быстро изменяющейся обстановке, чем менее группа заговорщиков, тем выше их шансы на успех. Именно поэтому у регулярной армии нет шансов победить партизан, если только мы не заключим всех в концлагерь, или борьба с терроризмом используя войска не будет иметь никогда успеха. И тут если мы подумаем, где еще мы оказываемся в нестационарных условиях, где обстановка быстро меняется, то мы обнаружим, что это мир бизнеса в целом, и разработки программного обеспечения в частности.
Разработка Инфосистем и Бизнес.
История бизнеса полна примеров, когда гигант, почивающий на лаврах, не был способен адекватно отреагировать на меняющуюся обстановку, и был раздавлен конкурентом, который быстро реагировал на изменения. Самый яркий пример — это история Нокии. Но я хочу заострить внимание на смене парадигмы в индустрии разработки программного обеспечения, и, как следствие, смене парадигмы в организациях. Если раньше бизнес двигал ИТ, то сейчас ИТ двигает бизнес.
Еще на заре программирования стало ясно, что по мере роста объемов кода, им становится все труднее и труднее управлять. Изменения даются все сложнее и сложнее, а исправление одних ошибок приводит к каскаду других. Вполне естественно пришли к концепции слабо связанного кода (loosely coupling), начали разделять системы на слои абстракции, объектно-ориентированный подход засиял на наших небесах. Инкапсуляция и интерфейсы позволили разбить сложность кода, убрать ко-адаптации и разделить уровни ответственности. Это было большим шагом. Но данный подход работал на уровне одной машины. Создавались системы, которые внутри были устроены согласно вышеперечисленным принципам, но внешне это были монолитные приложения. Те самые монолиты, от которых сейчас все пытаются отказываться, пока не поздно.
Сам монолитный подход к созданию приложений вносил свои требования и в организационный процесс. Несмотря на то, что многие команды разработчиков были достаточно agile, общий процесс в организации был линейным. Было планирование, были аналитики, охватывающие общие процессы в системе, были этапы приема. Было и кое-где есть, то, что называется waterscrumfall. Модель водопада по краям и scrum в середине.
Вместе с ростом скоростей сети и потоков информации, пришло понимание того, что монолитные системы неспособны адекватно реагировать на эти вызовы. Можно сказать, что подходы слабой связности, проектировки через интерфейсы и прочее, мы вытащили изнутри монолита наружу. Микросервисы это и есть самый наглядный пример данного подхода. Мы разбиваем сложную систему, на большое количество слабо связанных элементов, каждый из которых делает минимум вещей максимум хорошо, и пытается быть как можно более независим и изолирован. То же самое, что секс приносит генам, dropout — нейронной сети, архитектура микросервисов приносит в разработку ИТ систем. Да, микросервисы для ИТ организации, это как секс, секс для генов. Изменения бизнес требований могут быть очень быстро адаптированы малыми группами и единицами функциональности и разработки, не задевая при этом другие части системы.
Более того, данный подход неминуемо ведет и к изменению на уровне организации, вместо жестко структурированной иерархии, вместо дерева управления и цепочки принятия решений, появляется сообщество небольших групп, каждая из которых хранит глубокие знания в своей предметной области (и вот нам не надо столько аналитиков). Эти небольшие группы разработчиков могут очень быстро реализовывать огромный обьем функциональности за очень малое время (подход API first). Таким образом, если бизнес хочет очень быстро адаптироваться к изменениям, или выкатывать новые сервисы, то единственный подход к этому, это разбиение ко-адаптаций и на уровне предприятия.
Все это уже известно.
Но я хотел показать, что это разбиение сложности и ко-адаптаций, нечто такое, что лежит в основе нашего мира, подобно концепту вычислимости.
Computation, which we initially described as just “what a computer does,” has turned out to be something of a force of nature. It’s tempting to think of computation as a sophisticated human invention that can only be performed by specially designed systems with many complicated parts, but it also shows up in systems that don’t seem complex enough to support it. So computation isn’t a sterile, artificial process that only happens inside a microprocessor, but rather a pervasive phenomenon that crops up in many different places and in many different ways.
Том Стюарт, красиво заметил, что концепт вычислимости, который вначале был описан Тьюрингом, просто как «что делает вычислитель/компьютер», внезапно обернулся чем-то вроде сил природы. Заманчиво думать, что вычисление это сложное изобретение человека, которое может быть исполнено только специально спроектированными для этого системами со многими сложными частями, но также видно, что системы которые достаточно просты могут выполнять вычисления. Та же система Черча, клеточные автоматы Конвея, SKU и тау исчисления, циклические системы тегов, формальные системы Гёделя и т.д. То есть, вычисление это не стерильный, искусственный процесс, который происходит только внутри микропроцессора, но скорее всеобщий феномен, который неожиданно возникает в разных местах и различными путями. Это платоническая идея в чистом виде, то что существует помимо нашего перцептивно-мыслительного аппарата, то, что является некой истинной в высшем смысле этого слова.
Более того, вся математика, это не сугубо наша придумка, которую мы изобрели. Напротив, математика это нечто большее, мы открываем там то, что мы туда не вкладывали. Яркий пример — фракталы. Это нечто, что существует вне нас и помимо нас, мы подобны капитанам в забытых землях, кто открывает новые берега.
Я пытался показать, что между жизнью «на границе хаоса», между математическими концептами тренировки нейронных сетей, между методиками проектировки программного обеспечения и управления организациями есть нечто общее, что пронизывает и лежит в основе, как необходимая предпосылка к одновременным способностям к адаптации и стабильности.
Получается, что в различных сферах нашей жизни, мы как и сама жизнь, пытаемся вскарабкаться на вершину той горы, что мы видим на рисунке внизу.
Эпилог.
И напоследок, хочу вспомнить прекрасный роман Станислава Лема "Непобедимый". Писатель, обладая незаурядным умом и интуицией, также схватил этот концепт, который я попытался описать, и очень убедительно сделал выводы. Напомню.
Экипаж «Непобедимого» получил задание найти следы пропавшей экспедиции «Кондора» и выяснить причину её гибели. У биолога Лауды возникает идея, согласно которой на планете происходит эволюция механизмов, оставшихся от инопланетной цивилизации, прибывшей из района созвездия Лиры (Лирян).
Судя по немногочисленным следам, сохранившимся от первых колоний роботов, типов роботов было несколько. «Подвижные» — мобильные роботы, сложные, интеллектуальные, вооружённые, питались ядерной энергией. «Простейшие» — простые конструктивно, эти роботы, тем не менее, были способны к ограниченной приспособляемости. Они не были настолько интеллектуальны и специализированы как «подвижные», но при этом не зависели от наличия запасных частей и радиоактивного топлива.
Лишённые присмотра Лирян, роботы начали неконтролируемо развиваться и изменяться. Некроэволюция привела к тому, что выжили наиболее приспособленные, и ими оказались простейшие роботы. С их дальними потомками, которые имеют вид «мушек», и столкнулись экспедиции землян.
В условиях Региса-III наиболее приспособленными оказались не самые сложные и интеллектуальные, не самые мощные, а наиболее многочисленные и гибкие. Эти автоматы за тысячи лет некроэволюции научились эффективно бороться с конкурентами, которые превосходят их и по интеллекту, и по энерговооружённости. Им пришлось сражаться не только с другими роботами, но и с живым миром планеты.
цитаты из книги:
— … тут речь идет о мёртвой эволюции весьма своеобразного типа, которая возникла в совершенно необычных условиях, созданных стечением обстоятельств, <…> в этой эволюции победили устройства, во-первых, наиболее эффективно уменьшающиеся, а во-вторых, оседлые, не двигающиеся. Первые положили начало этим вот чёрным тучам. Я лично думаю, что это очень маленькие псевдонасекомые, которые способны в случае надобности, в общих, так сказать, интересах объединяться в большие системы. А именно вот в эти тучи. Таким путём шла эволюция движущихся механизмов. Оседлые же положили начало тому странному виду металлической растительности, что мы видели, — руины так называемых городов…
— Это всё же неслыханно, чтобы существа с более развитым интеллектом, эти макроавтоматы, не одержали победы, — сказал один из кибернетиков. — Это было бы исключением из правила, что эволюция идёт по пути усложнения, совершенствования гомеостаза… Вопросы информации, её использования…
— Эти автоматы не имели шансов именно потому, что были уже с самого начала так высоко развиты и сложны, — возразил Заурахан. — Ты пойми: они были высокоспециализированы для сотрудничества со своими конструкторами, лирянами, а когда лиряне исчезли, они оказались вроде как искалеченными, потому что лишились руководства. А те механизмы, из которых развились теперешние «мушки» — я вовсе не утверждаю, что они существовали уже тогда, считаю даже, что это исключается, они могли образоваться лишь намного позже, — были относительно примитивными, и поэтому перед ними открывалось много путей развития[1].
— Возможно, существовал ещё более важный фактор, — добавил доктор Сакс, подойдя к кибернетикам. — Речь идет о механизмах, а механизмы никогда не проявляют такой способности регенерировать, как живое существо, живая ткань, которая восстанавливается при повреждении. Макроавтомат, даже если он способен отремонтировать другой автомат, нуждается для этого в инструментах, в целом машинном парке. Поэтому стоило их отрезать от таких инструментов, и они были обезоружены. Сделались почти беззащитной добычей летающих созданий, которые были гораздо менее чувствительными к повреждениям… <…> Это не очень-то ново, <…> ведь эволюция живых форм идёт именно таким образом и не случайно… Поэтому и то, что «туча» состоит из таких взаимозаменяемых элементов, наверняка не случайно. Тут всё дело в материале: <…> устройство, состоящее из пары кристалликов, термисторов или других простейших элементов, можно уничтожить, и никакого вреда от этого не будет, его немедленно заменит одно из миллиарда ему подобных… —