Уже говорилось, что одиночные сенсорные нейроны также лучше заменять унифицированными кластерами. Цепочки памяти и распознавания также имеют одинаковые кластеры. Не сделать ли их одинаковыми и в остальных проявлениях?
Пусть есть цепочки, обобщающие последовательности «абв» и «абг». После еще одного обобщения будет выделена цепочка, обобщающая последовательность «аб». Но такая цепочка в своих первых кластерах будет совпадать с первыми двумя упомянутыми цепочками. Зачем ее выделять еще раз, если она уже по сути выделена? Исходно, при распознавании некоторой цепочки, запоминанию подлежали лишь кластеры, находящиеся в самом конце цепочки, и лишь при условии, что распознана вся цепочка. Если бы остановка распознавания произошла в середине – ничего из кластеров данной цепочки не было бы запомнено. Такая особенность работы диктовалась привычкой восприятия, выработанной при решении исходной задачи: «создать цепочку памяти, которая будет распознавать заданную последовательность». В исходную задачу не входили требования распознавания целого класса цепочек. Еще одна деталь, которая мешала сразу прийти к подобным выводам – это разработка схем, тормозящих низкоуровневые признаки, которые (схемы) запускаются только при распознавании всей цепочки. Даже рисунки на бумаге ставили привычные ограничения.
Но теперь, после высказанного предложения изменения архитектуры цепочек памяти, можно изменить схему. Почти каждый кластер распознающей цепочки должен иметь возможность выступать высокоуровневым признаком, который может заноситься в память при распознавании и тормозить более низкоуровневые признаки. Такая схема более близка к биологическим моделям. Но вот простейший пример – попытка проверить данную схему на примере своего мышления. Пусть есть начальные буквы разных слов – «пр». Можно ли заметить, что такая последовательность отдельно представлена в мышлении? Не очень заметно. В то же время, какой-нибудь префикс или приставка типа «пред» представлены намного более ощутимо. Дело в том, что набор букв «пред» связан с осмысленным образом – «то, что перед». А две буквы «пр», хотя и выделены в отдельную распознающую цепочку, но не связаны с высокоуровневыми образами. Оставаясь на уровне визуальных и акустических цепочек, образ «пр» выполняет свою работу по распознаванию, оставаясь в то же время малозаметным для осознания.
Превращение распознающих цепочек в запоминающие на каждом шаге распознавания позволяет значительно экономить память, так как новые цепочки пристраиваются уже к созданным, а не строятся заново.
Но не каждый кластер распознающей цепочки должен заноситься в память при распознавании. Не должны заноситься «тавтологические» кластеры. Это кластеры, которые имеют только один информационный вход. Например, первый кластер цепочки, который распознает только один признак и передает его дальше – элемент линии задержки, заноситься в память не должен, так как это бессмысленно (на данном этапе моделирования). Другой пример кластера с одним входом – элемент линии задержки внутри цепочки, который не распознает никаких признаков, а единственным информационным входом является связь с кластера, предыдущего в цепочке. В то же время, кластер, первый в цепочке, но который распознает более одного признака, не является тавтологическим, а является классическим гностическим кластером, и подлежит запоминанию.
Изначально, цепочки с выделенными обобщениями имели тип, отличный от цепочек обычной непрерывной памяти. Причин такого разделения было несколько. Кроме упоминавшейся задачи «разработать архитектуру цепочек, распознающих заданную последовательность», свою роль играло и желание все контролировать, не получать непрогнозируемых результатов. Сейчас у меня достаточно опыта, я вижу, что никаких особо опасных последствий быть не должно, и поэтому принимаю решение о том, что цепочки памяти и распознающие цепочки можно унифицировать. Рассмотрим некоторые последствия таких изменений.
Не помню, писал ли раньше, если да, то сейчас самый раз повториться. Рассмотренные алгоритмы выделения обобщений не делают разницы между тем, является ли найденная последовательность расположенной в основной линии памяти, или взята при прозвонке высокоуровневых образов.
Вся цепочка памяти может рассматриваться как гигантская по длине распознающая цепочка. Действительно, если в систему начнет поступать информация, совпадающая с той, что поступала при начале ее работы, то цепочка памяти будет заниматься распознаванием так же, как и остальные.
Если в цепочке памяти будут образованы разрывы, то образуются несколько новых распознающих цепочек. Разрывы образуются, как правило, при забывании самых неприоритетных событий. Тогда появившиеся распознающие цепочки можно рассматривать, как обобщающие самые важные события.
В целях исследований, в цепочках можно оставлять информацию о том, каким образом они были получены – во время сна или днем. Такая информация не будет влиять на работу, но будет полезна при изучении закономерностей интеллектуального развития системы.
Понятие «распознающая цепочка» в такой измененной модели более не имеет радикальных отличий от понятия «цепочка памяти». Но эти названия можно сохранить, и употреблять их тогда, когда необходимо подчеркнуть различные аспекты цепочек: в какой роли выступает в данный момент времени каждая из цепочек – основы для выделения обобщения или распознавания; можно различать способ создания цепочки – во время запоминания или целенаправленного выделения обобщений. Со временем, возможно, и такие различия будут стираться – об этом говорит пример биологических НС, опыт все более глубокой унификации ИНС, но пока различия могут быть полезны.
Историческая экскурсия:
-
//В мозге Б1, было несколько типов кластеров:
-
//Time Chain Element of Brain B1
-
class TceB1: public NeuroCluster<neuronB1, linkB1>
-
{
-
public:
-
enum Type
-
{
-
GTC = 0|NeuroTypeInfo::CanMemory,//Gnostic Time Chain Cluster
-
STC = 1|NeuroTypeInfo::CanMemory,//Sensor Time Chain Cluster
-
LTC = 2,//Long-term memory Time Chain Cluster
-
OTC = 3,//Operative Time Chain Cluster
-
RTC = 4,//Root memory Time Chain Cluster
-
};
-
QString getTypeName()const;//для просмотра в Нейролаборатории
-
…
-
protected:
-
Type m_type;
-
};
-
-
//В Б2, все стало намного проще:
-
class TceB2: public NeuroCluster<neuronB2, linkB2>
-
{
-
…
-
bool m_bCanMemorize;
-
bool m_bCreatedAtSleep;
-
bool m_bIsSensor;
-
bool m_bUnused;//на всякий случай добавлено смещение – для оптимизации скорости доступа к памяти
-
…
-
};