Как стать автором
Обновить

Что такое алгоритм?_?? Часть π «Копирование иерархии памяти»

Анализ и проектирование системАлгоритмыМозг

Пациент Алгоритм на операционном столе. Он жив и здоров. Поэтому отложим скальпель. Будем изучать силой своей мысли.


Title


Задача


Это новая статья серии "Что такое алгоритм?". Каждый раз статья — это решение маленькой подзадачи. В текущий момент почти все подготовлено для "вскрытия" процессов обучения. Для перехода к ним нам необходимо "вынырнуть с глубин" структур памяти живого организма, осмотренных в предыдущей статье, оценить сложность получаемой системы при переходе к иерархии и найти метод "пересадки" синтезированных цепочек одного организма в другой.


dog`s heart


Повторю почти дословно важный момент, подчеркиваемый и ранее, но по-прежнему актуальный для выбранной формы повествования. Текущая статья, как и каждая статья серии — просто один шаг в пути к эффективным методам работы с алгоритмами. Предлагаемые на этом шаге решения требуют обсуждения. Жду в комментариях конструктивную критику. Но отмечу, что не всегда получается раскрыть все важные аргументы, поддерживающие описываемые решения, в рамках одной статьи, в которой важно максимально подробно представить конкретную сторону теории. Поэтому подкрепление этих решений со стороны процессов формирования естественного языка и коммуникации отложено и будет приведено в последующих частях этой серии.


Во вскрытии структуры Памяти и процессов обучения потребуются все результаты, полученные в предыдущих статьях серии (Часть 1 "Действие", Часть 2 "Исполнение", Часть 3 "Память", Часть 3.1 "Эволюция памяти"). Без перечисленных там выкладок читать дальше будет сложнее.


Давайте приступим.


Иерархия областей памяти


Для выполнения задачи поставленной в этой статье нам необходимо вспомнить "действие" (главного героя первой статьи) и принять как истинное следующее утверждение: "Память простого живого организма синтезирует (запоминает) алгоритм его выживания". Основываясь на этих вводных, опытный программист уже может отметить, что элементарных средств, обозначенных в статье №3.1 "Эволюция памяти", достаточно для написания почти любого кода Алгоритма выживания, основывающегося на имеющихся у организма инструментах:


  • элементарных действиях,
  • элементарных признаках (в качестве условий к действиям),
  • торможении как логической инверсии признака,
  • логическом комплексировании признаков операциями OR и AND
  • и объединении признаков и действий в последовательность с использованием цепочки.

Эти инструменты в силу реализации, описанной в предыдущей статье, даже дают дополнительные возможности по сравнению с элементарными средствами, имеющимися в арсенале современного программиста. Выгодно отличается, например, операция AND распределенная по времени. И самым главным преимуществом является способность такой программной системы, предоставленной для свободного существования в некоторой среде, самостоятельно формировать макро-признаки на основе простых признаков среды и группировать последовательности действий организма и "действий", существующих в среде (согласно статье №1 "Действие"), в макро-действия организма.


Но от опытного программиста не ускользнет и тот факт, что этих средств мало для поддержания написанного кода в "чистоте". То есть для "удобного" занятия развитием проекта ("Алгоритмы выживания организма") в программной среде необходимо наличие дополнительных возможностей. Первой в списке необходимых является возможность изоляции одного синтезированного (написанного) алгоритма от другого, то есть инструмента формирования подпрограмм. Подпрограмма даёт возможность развивать и вызывать исполнение алгоритма независимо от других алгоритмов.


Чтобы продолжить вспомним "область памяти", обозначенную в предыдущей статье как место детектирования повтора и формирования цепочки, обобщим эту информацию и закрепим в виде термина.


Область памяти — это обособленная совокупность узлов памяти, в которой возможно формирование цепочки, объединяющей последовательность активированных близко по времени узлов, путем создания (или укрепления/ослабления имеющихся) связей между ними. При этом цепочки, существующие в области памяти, укрепляются с появлением повтора сформировавшей их последовательности активаций и ослабляются с отсутствием таких повторов.


Здесь можно отметить, что функции области памяти не ограничиваются перечисленными выше процессами. Но в борьбе с отклонением от темы текущей статьи отложу описание всех нюансов и подчеркну только важность некоторых процессов, вызванных:


  • пресыщением области памяти по количеству хранимых цепочек, при котором слабые цепочки начинают конкурировать с активно используемыми и могут быть разрушены и переформированы;
  • изменчивостью и взаимозависимостью цепочек хранимых в одной области памяти (дополнение, замещения частей, переброс активации), дающих ошибки при исполнении цепочек, но тем самым предоставляющих дополнительные средства синтеза новых алгоритмов, наподобие мутаций и кроссинговера для "генетических алгоритмов".

И давайте вернемся к подпрограммам. Запоминаемая в области памяти цепочка из последовательности признаков и действий является способом записи кода алгоритма в живом организме (подобно формированию кода функции на основе последовательности строчек вызовов других функций и условий, оценивающих признаков). При своём развитии организм накапливает полезные синтезированные алгоритмы в виде цепочек. У организма пока одна возможность — единая область памяти, в которой одна за другой формируются связи новых последовательностей действий и признаков.


Программисту эта ситуация должна быть знакома, особенно "старожилам", помучившимся в написании больших проектов на BASIC (и отчасти на ASM) с обильным использованием безусловных переходов. Нас (как программистов) может немного утешить тот факт, что у организма тоже был период "спагетти-кода". И организм тоже сталкивался с замедлением развития своего "программного проекта", ведь в спагетти-коде каждая модификация одного алгоритма может поломать реализации несколько других.


Spaghetti code


Мы подошли к эволюционному фактору. На этот раз он не такой наглядный, как в примерах предыдущей статьи с "Едой" и "Хищником". Но среда опять играет в нём ключевую роль, предоставляя организму множество разнообразных ситуаций, для каждой из которых полезны отличающиеся алгоритмы. И в такой среде успешнее выживает тот организм, который способен синтезировать и использовать бóльшее число алгоритмов!


Как организму запомнить большое количество алгоритмов? Как в реализации Памяти убрать сильную связность этих алгоритмов? Как достичь изоляции одного алгоритма от другого?


Ответом на все эти вопросы становится появление в организме нескольких обособленных областей памяти, которые обеспечивают его возможностью формирования цепочек разных алгоритмов отдельно (каждый в своей области памяти). При этом у каждой вспомогательной области должна быть возможность использовать элементарные действия организма. То есть необходим доступ к области памяти, отвечающей за эти действия. Этот подход порождает множество сложностей. Самой очевидной из которых является сложность разрешения конфликта управления между несколькими областями памяти (а значит разными алгоритмами), одновременно использующими одни и те же элементарные действия. Но уже по традиции сложные моменты рассмотрим позднее. А пока перейдём к самому тривиальному случаю.


И для этого рассмотрим минимальное количество областей памяти (то есть 2 области) и введем их специализацию по возможности непосредственно исполнить элементарные действия организма. Так область памяти №1 не будет иметь непосредственного доступа к действиям, ответственность за инициализацию выполнения которых целиком возложим на область памяти №2 ("исполнительную" область памяти). При таком разделении между полученными областями памяти необходимы связи, которые становятся внутренними функциями организма. Все выходы области памяти №1 (в том числе сгруппированные макро-признаки) можно назвать "внутренними действиями" организма. И эти "внутренние действия" с использованием связей становятся тождественны "внутренним признакам" для области памяти №2.


Сперва рассмотрим упрощенную версию такой двухкомпонентной системы Памяти, в которой область памяти №1 не использует "игровое поведение", то есть не генерирует "внутренние действия" спонтанно, но лишь в результате воздействия входных признаков. Такую ограниченную область памяти будем далее называть "признаковой".


hierarchy prepare


Попробуем описать последовательность переживаемых организмом закономерных ситуаций среды, которые приведут к состоянию указанному на этой схеме.


№ этапа Порождающий фактор среды Задействованные внутренние признаки Формирующиеся связи
1 Действие("№1") полезно при Признаке("№4") Признак("Внутренний №3") Признак("№4") ⇒ Признак("Внутренний №3"); Признак("Внутренний №3") ⇒ Действие("№1")
2 Действие("№2") полезно при Признаке("№5") Признак("Внутренний №4") Признак("№5") ⇒ Признак("Внутренний №4"); Признак("Внутренний №4") => Действие("№2")
3 Признак("А") подкрепляет повтором макро-Действие { Действие("№1") → Действие ("№2") } - Действие("№1") ⇒ Действие("№2") ⇒ Признак("А")
4 макро-Действие{ Действие("№1") → Действие("№2") } полезно при макро-Признаке{ Признак("№1") → Признак("№2") } Признак("Внутренний №1") Признак("№1") ⇒ Признак("№2") ⇒ Признак("Внутренний №1"); Признак("Внутренний №1") ⇒ Действие("№1") ⇒ Действие("№2")
5 Действие("№1") вредно при Признаке("№3") Признак("Внутренний №2") Признак("№3") ⇒ Признак("Внутренний №2); Признак("Внутренний №2") => Действие("№1")

В первом и втором этапе в пережитых ситуациях была выявлена полезная организму закономерность среды по использованию Действия("№1") и Действия("№2"). В этапе №3 на основе игрового поведения была выявлена еще одна закономерность, фиксирующая, что последовательность Действие("№1") → Действие ("№2") имеет в среде отклик в виде Признака("А"). На этапе №4 был выявлен повтором макро-Признак { Признак("№1") → Признак("№2") } и выявлено полезное при этом макро-признаке организму действие, которым оказалось макро-Действие{ Действие("№1") → Действие("№2") }. На этапе №5 была выявлена вредная закономерность по использованию Действия("№1") при наличии Признака("№3").


Таблица описанных закономерностей была сформирована достаточно произвольно. Целью ставилось показать развитие системы алгоритмов организма, формирующихся разными способами:


  • с использованием признака Повторимость и с использованием подкрепления пользой;
  • с увязыванием действия за подкрепляющий признак и за ограничивающий признак;
  • с выполнением группировки макро-признака и формирования макро-действия.

Описание приведенных этапов вышло лишь немного сложнее (за счет формирования внутренних признаков) чем было бы в случае использования организмом одной области памяти. В силу большого сходства описание развития более простого варианта опущено. А до полнофункционального иерархического варианта остался один шаг. Этот шаг — введение внутренней области памяти, которая может использовать спонтанную активацию узлов ("игровое поведение"). Такую область памяти далее будем называть "активной" (чтобы подчеркнуть её отличие от "признаковой" область памяти).


hierarchy


При введении промежуточного слоя должны сохраниться все ранее доступные способы построения алгоритмов поведения организма. Поэтому нельзя вносить усложнения в реализацию сопоставления входного признака и выходного действия организма. Это сопоставление можно осуществить проведением признака сквозь внутренний слой без изменения, например, как это сделано для цепочки { признак("Внутренний №5") ⇒ действие("Внутреннее №3") }. В остальном внутренний слой не мешает, а только добавляет возможности (как в выявлении макро-признаков, так и в формировании макро-действий) и тем самым способствует разработке более сложных алгоритмов и сохранению большего их количества в Памяти организма.


Анализ иерархии памяти подопытного живого пациента с именем Алгоритм оказался несколько затянутым, и хочется на этом пока завершить, оставив не изученными несколько вопросов:


  • конфликты внутренних областей памяти за управление;
  • возможности усложнения взаимодействия областей памяти с перенаправлением внутренних действий на области памяти внутреннего анализа;
  • способы временной блокировки "исполнительной" области памяти торможением.

Эти вопросы очень важны, потому что при объединении дарят организму возможность самоанализа (пока не языкового) и прогнозирования. Но, к сожалению, они весьма объёмны и не вписываются в тему текущей статьи, а потому будут рассмотрены в статьях последующих.


В заключение раздела важно подчеркнуть, что универсальность и специализация (признаковая и активная) областей памяти делает простым дальнейшее наращивание уровней иерархии системы Памяти организма. Что, в итоге, развивает его возможности по эффективному синтезу алгоритмов. А эффективный синтез алгоритмов является главной целью текущей работы.


Копирование памяти


И мы переходим к главному этапу, отмеченному в плане нашей "нехирургической" операции. Необходимо диагностировать процессы обучения, как способа переноса алгоритма от одного организма другому.


apple


Даже при кратком обзоре неполной модели памяти живого организма становится понятно, что структура хранения описания алгоритмов в ней очень многосвязна. Это кардинально отличается от линейной структуры хранения описания алгоритмов, используемой в генетическом коде организма. И во многом поэтому копирование такого описания по наследству от организма к организму весьма ограничено. Но полезные алгоритмы выживания, синтезированные одним организмом, безусловно будут полезны и другому родственному организму. И процедура копирования алгоритма почти во всех случаях должна быть более эффективна чем самостоятельный повторный синтез этого же алгоритма другим организмом. Мы подходим к объяснению почему коллективные живые организмы более развиты по сравнению с организмами, ведущими одиночный образ жизни. Они при взаимодействии научились передавать синтезированные в памяти цепочки!


И опорой для первого шага такого копирования служит способ, которым формируется цепочка в организме. Если исключить подсказки от признака Повторимость, то этот способ — переживание ситуации, характеризуемой некоторыми признаками и сопровождаемой игровым (спонтанным) выбором действия с последующим анализом его полезности. Каким же образом можно скопировать полезный алгоритм другого организма? Конечно, для этого не стоит пересаживать гипофиз и семенники от человека собаке, как описывает М.Булгаков. Есть более простой способ.


Этот способ — копирование в процессе обучения. То есть во взаимодействии организма-учителя, владеющего полезным алгоритмом, и организма-ученика, копирующего этот алгоритм. При этом для выполнения обучения необходимо:


  • (шаг 1) совместное попадание организма-ученика и организма-учителя в ситуацию, которую копируемый алгоритм использует, при этом организм-ученик должен зафиксировать характеризующие эту ситуацию признаки в своей области памяти;
  • (шаг 2) выполнение в переживаемой ситуации организмом-учеником необходимого действия, идеально если это действие будет полностью совпадать с действием организма-учителя;
  • закрепление сформированной в организме-ученике цепочки с использованием нескольких повторов шагов 1 и 2 или с применением подкрепления от организма-учителя.

Если первый шаг не вызывает сложностей для нескольких живущих совместно родственных особей, то шаг второй (активное копирование действий другой особи) не так тривиален. Он требует механизма, обеспечивающего подобное поведение. И не было бы у организмов процессов обучения, если бы копирование поведения другой родственной особи не было жизненно важным эволюционным фактором, появившимся еще до необходимости копирования сложных цепочек. Этот эволюционный фактор у живущих коллективно организмов звучит так: "Убегай в ту же сторону, если бегут живущие с тобой родственные особи". Это основа стадного поведения, работающего на уровне инстинктов даже у человека при его попадании в соответствующие условия. Похоже, что развитие способности копирования поведения родственной особи в экстренных ситуациях стало основой процессов обучения и всех впоследствии появившихся способов зеркального копирования алгоритмов поведения (уже не обязательно для экстремальных ситуаций) между родственными организмами.



Если немного забежать вперед, то можно указать, что почти всё инстинктивное поведение, оставшееся у человека в наследство от своего предка (выживающего организма), очень важно в анализе, какими свойствами должна обладать оперирующая алгоритмами компьютерная система, реализация которой ставится практической целью этой работы. Почти все ключевые инстинкты являются способом сохранить жизнь только что родившегося организма, пока он всецело занят самостоятельным построением и копированием от своих родителей тех цепочек алгоритмов, которые обеспечат его выживание (и размножение). Многие такие инстинкты завязаны у человека на эмоциональную реакцию:


  • страх — способ торможения игрового поведения при большой доле неизвестных признаков или детектировании опасного признака среды;
  • слезы как способ использовать алгоритмы родителей для своего выживания (тождественны фразе "Очень нуждаюсь в чем-то, но никак не могу получить самостоятельно", направленной родственной особи);
  • смех как способ детской особи сигнализировать свое нахождение в режиме обучения, а для взрослой особи — способ заместить агрессивную реакцию на нелепое игровое поведение своего ребенка, то есть двусторонний способ перейти в состояние обучения.

Обособленно стоят инстинкты, связанные с половым влечением. Но их рассмотрение в текущей работе можно опустить, ввиду отсутствия необходимости повторять процессы копирования живых организмов в разрабатываемой компьютерной системе. Ведь копирование компьютерной программы и её состояния для современных вычислительных машин достаточно тривиально.


Мы несколько удалились от процессов обучения. И пока описано только копирование односвязной цепочки {признакдействие}. Как же копировать макро-признаки и макро-действия?


Сначала разберем простой ответ для макро-действия. Этот способ уже описан в статье №3 "Память" на примере с фортепиано. В университете мы называли это практикой. А по факту это многократные повторы организмом последовательности элементарных действий, составляющих копируемое макро-действие. Хорошо, что у современного программиста есть более эффективные методы копирования алгоритмов чем у живых организмов. И копирование макро-действий в разрабатываемой компьютерной системе можно не целиком списывать с организма.


А вот описать способы копирования между организмами макро-признаков сложнее. Для реализации этих процессов цепь эволюционных факторов привела организмы к использованию коммуникации и впоследствии создала Язык. Начало их рассмотрения будет приведено в следующей статье.


И в этот раз в статье не будет выводов. Рассмотренные процессы сложны, а приведённые описания не каноничны. Даже Булгаков оставил нас самих решать, стоит ли так играть темой мозга, но сам Шарикова снова сделал Шариком...


end


Спасибо Вам за внимание.


Отзывы


Буду очень благодарен за отзывы, пожелания и предложения, так как они помогают мне скорректировать направление развития работы в этой области.


Отдельное волнение у меня есть по стилю повествования и форматированию, используемым в статье (кавычки, абзацы, курсив). Напишите, пожалуйста, если у Вас есть замечания к ним. Можно личным сообщением.


Ссылки


Теги:память человекамозгалгоритммодель памятиэволюцияобучениеэмоции
Хабы: Анализ и проектирование систем Алгоритмы Мозг
Всего голосов 9: ↑5 и ↓4+1
Просмотры1.3K

Похожие публикации

Лучшие публикации за сутки