Posts Tagged ‘выделение совпадений’

Смена режимов 1ВЦ и 2ВЦ

Суббота, Январь 16th, 2010

Сначала схема работы ИНС, которая просматривает все совпадения и работает без разрывов.
1ВЦ нашел позицию. Эта позиция могла быть получена только на текущем шаге (найден второй кластер, у которого более одного общего признака получено за последний шаг), или за текущий и предыдущий шаги (найдена цепочка, у которой минимум один общий признак с прошлого шага и один общий за текущий). Поэтому, после нахождения позиции в 1ВЦ, в обеих цепочках, алгоритм должен перейти на шаг назад (чтобы учесть все варианты), а затем активировать эти предыдущие кластеры и начать работу с 2ВЦ.
Теперь представьте, что возможен разрыв в 15 шагов. После нахождения кандидата в 1ВЦ, по обеим цепочкам сигнал должен вернутся на 15 шагов назад. Ждать последовательного перехода сигнала назад по цепочке в 15 итераций, а потом еще и снова 15 шагов идти вперед? Слишком расточительно.
Решение: для перехода ведущего сигнала назад по цепочкам на сравнительно большое количество шагов, использовать «перескок назад» сигнала по связям. Какую выбрать схему соединений?
Наиболее простая схема – каждой позиции на цепочке соответствует свой нейрон (контур) перехода на N шагов назад. (На рисунке – схема 1). Преимущества такого решения – высокая точность: сигнал переходит на одно и то же количество шагов назад (кроме первых N нейронов, для которых цепочка еще не достаточно длинная). Недостаток – большое количество нейронов, у которых всего одна связь. Это неэффективно и в ЕНС, и в ИНС. Для ЕНС более подходит решение с локальным «накоплением» связей и одной посылкой назад. На рисунке – схема 2. С некоторым небольшим разбросом интервалов перехода можно смириться.


Варианты возвратных схем


Но для ИНС, в системе с виртуальными связями, объект кластера может содержать обычный указатель на кластер, к которому нужно будет вернуться. Эта схема наилучшая – меньше всего памяти, наиболее точный переход, наименьшая вычислительная емкость.
Теперь по поводу создания таких связей и указателей. Нет нужды каждый раз программно проходить всю цепочку на N шагов назад для получения нейрона возврата. Объект «цепочка памяти» должен содержать текущий курсор возврата. При росте цепочки с нулевого размера, курсор задерживается на первом кластере. Все кластеры, которые добавляются в цепочку, создают возвратные указатели на курсор – на первый кластер. После того, как размер цепочки превысит N, с каждым новым добавленным кластером, курсор сдвигается на кластер вперед.
Но что делать с удалением кластера? Если на кластер ведут возвратные связи, то их нужно перенаправить. Если кластер был первым в цепочке, то связи нужно перенаправить на следующий в цепочке кластер, иначе – на предыдущий. Но чтобы знать о входящих связях, проще всего вернутся к обычным межнейронным связям. Чтобы не тратить ресурсы попусту на проход по всем нейронам контура торможения, такую связь можно обрабатывать в стиле обычного указателя. При распараллеливании ИНС, нейрон назначения может оказаться в другом отделе памяти (другого потока) – тогда вроде бы нужен возврат к обычной схеме прохода по всем нейронам. Но это не так: учитывая, что возвратов не много – до двух, в каждом разделе каждого потока можно предусмотреть две переменный, а не проход по всем нейронам.

Нейронная пластичность и классификации

Суббота, Октябрь 24th, 2009

Продолжим изучение механизмов, описанных в прошлой заметке.
Смена «типа» связи. Если связь была создана как распознающая с Необх<1, но в дальнейшем показывает себя как необходимая, то статус соответствующего признака нужно изменить. Его вклад в порог должен стать, как и у обычных нейронов с Необх=1 – единица, кластер должен активироваться только при наличии этого признака, и признак должен тормозиться при распознавании. Конечно, речь не о точных значениях Необх=1 – вместо единицы, нужно сравнивать с приближенным значением, типа «меньше или больше 0.95».
Верно и обратное – (далее…)

Поиск и обобщение, 1ВЦ и 2ВЦ

Понедельник, Октябрь 19th, 2009

При описании алгоритмов работы ИНС, часто приходилось использовать их длинные названия. Для сокращения, введу новые: стадия алгоритма выделения обобщения, в которой только одна ведущая цепочка, и происходит поиск кандидатов для обобщения, будет называться «поиск, 1ВЦ» (одна ведущая цепочка). Стадия, на которой поиск произведен, вторая цепочка найдена, и происходит само обобщение, будет называться «обобщение, 2ВЦ». Теперь продолжим рассмотрение этих алгоритмов.
В прошлой записи на эту тему, «Торможение при распознавании и обобщении» ( http://neurocod.net/blog/tag/2009/10/торможение-при-распознавании-и-обобщ ), рассмотрение прошло первый из трех пунктов – обобщение «для гностических нейронов, активируемых одним шагом, без учета времени». Теперь пришла очередь второго пункта: «рассмотрение цепочек памяти (с длинной от одного элемента и выше), работающих без разрывов».
Известный шаблон алгоритма нужно усовершенствовать. Нужно добавить распознавание образов в обе стадии – 1ВЦ и 2ВЦ. Распознавание на примере одного кластера во время обобщения было рассмотрено в прошлой заметке. Для учета цепочек, нужно добавить шаг с пересылкой разрешающих сигналов по nEn. Но нужно предусмотреть и внесение распознанных образов в цепочку памяти – обновление цепочки.
На рисунке ниже, для простоты, каждый кластер изображен одним нейроном. Порог такого нейрона считается как сумма порога nIn+nEn. У nEn порог может быть 0, если кластер первый в цепочке, иначе 1. Обозначения: ВЦ1,1 и ВЦ1,2 – временная цепочка 1, кластеры 1 и 2. ГК1 – гностический кластер 1. Остальное – кластеры признаков.


1ВЦ, внесение изменений после распознавания


Связь от ГК1->ВЦ1,2 выделена цветом. Нужно рассмотреть четыре ситуации: [1ВЦ или 2ВЦ] и [выделенная связь существует или нет]. Если связь не существует, ее нужно создать.
После спуска сигнала с ВЦ1,1 к признакам и подъема вверх, в алгоритме, рассмотренном в прошлой записи, будет активирован ГК1. Раз уж он активирован, то можно воспользоваться ситуацией и заносить в ВЦ1,2. Но на момент распознавания, ведущим кластером еще будет являться ВЦ1,1. Чтобы соответствовать общепринятому подходу соединять только активные кластеры, нужно подождать до следующего такта, когда ведущим станет ВЦ1,2, и тогда уже добавлять ГК1 в список признаков. Нужно предусмотреть, чтобы посылка сигнала к признакам со стороны ВЦ1,2 не приводила к переактивации ГК1 – ведь он уже был активен недавно. Для этого, перед таким шагом, нужно не забыть обнулить активацию. Поэтому, проверка и добавление связи должно происходить до очередного спуска «вниз к признакам» и до обнуления активации.
Нужно рассмотреть специальный случай – когда образ, который будет распознан, «случайно» сам оказался ведущей цепочкой.


2ВЦ, исходное состояние


В таких случаях, если не внести изменений в алгоритм, будет выделен кластер с полной копией признаков, как у гностического кластера. Но такая копия не нужна. Можно заметить, что в режиме 2ВЦ способ определения такой ситуации – один из ведущих кластеров распознан. Если он распознан, то все работает нормально. Новый кластер следовало бы создавать, если бы кластер находился в режиме предпороговой активации. Хорошо, ситуация определена. Можно писать заплатку… Но есть вариант лучше – универсализировать алгоритм. Такое распознавание происходит в конце функции «вниз и вверх». В случае 1ВЦ, если прозвон начался с начала ВЦ, распознавание в этой цепочке будет происходить всегда – это нужно учитывать. Универсализация относится к шагу торможения. Можно заметить, что если распознанный ведущий кластер никак не выделять, то он точно также произведет торможение признаков. В случае 2ВЦ, просто ничего не будет выделяться. Но зато останется работать функциональность, при которой такой кластер будет занесен во вторую цепочку – как и показано на последнем рисунке. То есть, новая обобщенная цепочка не сформируется, но старая будет подправлена.


2ВЦ, после внесения изменений

Торможение при распознавании и обобщении

Суббота, Октябрь 17th, 2009

Главным образом, речь пойдет о противодействии выделению копий закономерностей. В предыдущей записи на эту тему была описана постановка рассматриваемой задачи:
(далее…)

Противодействие выделению копий закономерностей

Воскресенье, Сентябрь 20th, 2009

Пусть А – некоторая последовательность активации образов, которая еще не выделена в обобщающую цепочку, но в течении бодрствования встретилась несколько раз, и несколько раз была занесена в память. Каждое вхождение этой цепочки в память будем обозначать буквой А с индексом: …А0…А1…А2…А3… (далее…)

Универсализация нейронных цепочек

Четверг, Июль 23rd, 2009

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

Пусть есть цепочки, обобщающие последовательности «абв» и «абг». После еще одного обобщения будет выделена цепочка, обобщающая последовательность «аб». Но такая цепочка в своих первых кластерах будет совпадать с первыми двумя упомянутыми цепочками. Зачем ее выделять еще раз, если она уже по сути выделена? Исходно, при распознавании некоторой цепочки, запоминанию подлежали лишь кластеры, находящиеся в самом конце цепочки, и лишь при условии, что распознана вся цепочка. Если бы остановка распознавания произошла в середине – ничего из кластеров данной цепочки не было бы запомнено. Такая особенность работы диктовалась привычкой восприятия, выработанной при решении исходной задачи: «создать цепочку памяти, которая будет распознавать заданную последовательность». В исходную задачу не входили требования распознавания целого класса цепочек. Еще одна деталь, которая мешала сразу прийти к подобным выводам – это разработка схем, тормозящих низкоуровневые признаки, которые (схемы) запускаются только при распознавании всей цепочки. Даже рисунки на бумаге ставили привычные ограничения.

Но теперь, после высказанного предложения изменения архитектуры цепочек памяти, можно изменить схему. Почти каждый кластер распознающей цепочки должен иметь возможность выступать высокоуровневым признаком, который может заноситься в память при распознавании и тормозить более низкоуровневые признаки. Такая схема более близка к биологическим моделям. Но вот простейший пример – попытка проверить данную схему на примере своего мышления. Пусть есть начальные буквы разных слов – «пр». Можно ли заметить, что такая последовательность отдельно представлена в мышлении? Не очень заметно. В то же время, какой-нибудь префикс или приставка типа «пред» представлены намного более ощутимо. Дело в том, что набор букв «пред» связан с осмысленным образом – «то, что перед». А две буквы «пр», хотя и выделены в отдельную распознающую цепочку, но не связаны с высокоуровневыми образами. Оставаясь на уровне визуальных и акустических цепочек, образ «пр» выполняет свою работу по распознаванию, оставаясь в то же время малозаметным для осознания.

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

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

Изначально, цепочки с выделенными обобщениями имели тип, отличный от цепочек обычной непрерывной памяти. Причин такого разделения было несколько. Кроме упоминавшейся задачи «разработать архитектуру цепочек, распознающих заданную последовательность», свою роль играло и желание все контролировать, не получать непрогнозируемых результатов. Сейчас у меня достаточно опыта, я вижу, что никаких особо опасных последствий быть не должно, и поэтому принимаю решение о том, что цепочки памяти и распознающие цепочки можно унифицировать. Рассмотрим некоторые последствия таких изменений.

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

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

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

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

Понятие «распознающая цепочка» в такой измененной модели более не имеет радикальных отличий от понятия «цепочка памяти». Но эти названия можно сохранить, и употреблять их тогда, когда необходимо подчеркнуть различные аспекты цепочек: в какой роли выступает в данный момент времени каждая из цепочек – основы для выделения обобщения или распознавания; можно различать способ создания цепочки – во время запоминания или целенаправленного выделения обобщений. Со временем, возможно, и такие различия будут стираться – об этом говорит пример биологических НС, опыт все более глубокой унификации ИНС, но пока различия могут быть полезны.
Историческая экскурсия:

  1. //В мозге Б1, было несколько типов кластеров:
  2. //Time Chain Element of Brain B1
  3. class TceB1: public NeuroCluster<neuronB1, linkB1>
  4. {
  5. public:
  6.         enum Type
  7.         {
  8.                 GTC = 0|NeuroTypeInfo::CanMemory,//Gnostic Time Chain Cluster
  9.                 STC = 1|NeuroTypeInfo::CanMemory,//Sensor Time Chain Cluster
  10.                 LTC = 2,//Long-term memory Time Chain Cluster
  11.                 OTC = 3,//Operative Time Chain Cluster
  12.                 RTC = 4,//Root memory Time Chain Cluster
  13.         };
  14.         QString getTypeName()const;//для просмотра в Нейролаборатории
  15.         …
  16. protected:
  17.         Type m_type;
  18. };
  19.  
  20. //В Б2, все стало намного проще:
  21. class TceB2: public NeuroCluster<neuronB2, linkB2>
  22. {
  23.         …
  24.         bool m_bCanMemorize;
  25.         bool m_bCreatedAtSleep;
  26.         bool m_bIsSensor;
  27.         bool m_bUnused;//на всякий случай добавлено смещение – для оптимизации скорости доступа к памяти
  28.         …
  29. };

Пакет обновлений к последним заметкам

Вторник, Июль 21st, 2009

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

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

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

Теперь про роботизированного военизированного пожирателя трупов. По-видимому, аж на аминокислоты разложить не выйдет. Выйдет глубже, хе-хе )) Ура, товарищи! Эмергенция избежна все меньше!.. :))) Если подтвердятся предположения людей с этого форума http://www.berkem.ru/interesno-kak/ :

Mukaddam1 Says:
Июль 16th, 2009, 13:58
бРАТВА! не ебите мозги ни себе ни людям! Это известная довольно давно технология, на 100 % или спизженная в СССР или купленная на Украине, и даже знаю, кто продал. Она разрабатывалась для автономной системы жизнеобеспечения станции Мир, работает на ЛЮБОЙ органике, выдавая электроэнергию и парогазовую смесь. Подобные же штуки делают в израиловке, НА Украине и у нас ин-т Курчатова в мск. А сам изобретатель делает это еще круче, вплоть до автомобильного двигателя на мусоре и энергоустановки для коттеджа, но живет в полной жопе. Его и убивали уже, а жив ли сейчас – не знаю.

arc Reply:
Июль 16th, 2009 at 14:43
Суть процесса в общих чертах можно? Есть процесс переработки органики анаэробными бактериями, получается смесь газов, включая метан, различные оксиды серы, азота, немного водорода (все горючие). Дальше или дом обогревать, електричество вырабатывать и т.д. Но сам процесс очень длителен и требует огромного бака – накопителя отходов. В данном случае – суть процесса не ясна.

Mukaddam1 Reply:
Июль 16th, 2009 at 19:27

Это высокотемпературный пиролиз, но с обработкой рабочей зоны плазмой, за счет этого достигается 100% разложение органики без образования диоксинов и фуранов, которые есть бич любого температурного процесса, что сжигания, что крекинга. А теплотворная способность того же мусора – не хуже чем у бензина. Универсальный процесс, годится и для мусоропереработки. и для перегонки нефти, и для выплавки металлов, и для других целей. Автор – гений со склочным и мерзким характером и крупными жидовскими заморочками (жаба невъебенная душит дяденьку, на чем и попадалово постоянное). Жив сейчас или нет – не днаю, и под кем, если жив – тоже ХЗ. Убивали его, но выжил. А меня с партнерами круто и изящно вывели из игры, посадив на крупные бабки свершенно официально. Так на Урале и в Сибири не состоялось энергетики на мусоре. кот орый есть неисчерпаемое топливо 21 и22 ит.д. веков, ибо гавно будет всегда, пока жив человек…

373 Reply:
Июль 16th, 2009 at 21:24
Диоксины, они какбэ из хлорорганики образуюццо, а мы тут за трупы говорили)
В которых 80% воды, а из того, что осталось, больше половины костей) Как этим плазмогенератор запитывать? За счёт чего выкипятить 50-70 кг воды?
>плазмокрекинг нефти
- это жесть. получаем сажу, водород, метан и чуток ацетилена – кому это нахер надо?
Сцылка грамотная на работы есть?

Paradoxe Reply:
Июль 17th, 2009 at 17:32
Мож там такая ВЫЖИМАЛКА есть – сходи в ванную посмотри. Бойцы в войну другое придумывают – но это к БаБ

Вот так-то вот – была русская космическая станция «Мир», стал американский наземный военный пожиратель трупов! Амеры жгут (трупы)!

Удаление кластеров из нейронных цепочек памяти

Вторник, Июль 21st, 2009

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

У кластера может не остаться признаков в базисе по двум причинам. По причине удаления связей: удаления связей в результате забывания, оптимизации памяти, распознавания признака более высокоуровневым и понижения приоритета на его запоминание. И по причине создания кластера, но не добавления к нему ни одного признака. Такое может случиться, например, при прозвонке с «разрывом», когда в некоторый такт у двух цепочек не оказалось общих элементов, а кластер был создан. Последний случай можно рассматривать как недостаток алгоритма создания пустых ненужных кластеров, но все же лучше учесть и его.

1) Если в гностической временной цепочке (ГВЦ) первый элемент содержит пустой базис, то такой кластер можно удалить. Первый кластер часто может иметь тип, отличный от типов кластеров оставшейся части ГВЦ. Например, первый кластер, распознающий только один признак, с информационной точки зрения дублирует исходный признак, и полезен лишь как линия задержки для отправки сигнала на следующий кластер. Тогда, тип кластера может указывать, что при активации такого первого кластера в ГВЦ заносить его в цепочку памяти не нужно. Если такой первый кластер потерял базис и будет удален, этот тип нужно не забыть передать следующему за ним кластеру.
2) Если кластер, последний в уже созданной ГВЦ, оказался с пустым базисом, то такой кластер можно удалить.
3) Если ИНС поддерживает работу на распознавание без линий задержки, то можно удалять и кластеры с пустыми базисами, расположенными в середине ГВЦ. (Естественно, удаление подразумевает соединение образовавшихся частей ГВЦ, расположенных до и после удаляемого кластера). Говоря иначе, кластеры с пустым базисом можно удалять, если для распознавания не нужно прохождение сигнала для задержки по пустым кластерам. Иначе, можно удалять, если линия задержки может нормально работать лишь с одним переходом по связи для большого количества циклов ожидания. Принципов работы устранения длинных линий задержки два: сохранение активации на время, большее одного цикла, и сокращение задержки между активацией кластеров во время прозвона благодаря «перепрыгиванию» через пустые элементы – тогда распознавание можно провести по памяти позже, во время ускоренного воспоминания.

Для последнего случая – когда линии задержки не нужны, все три пункта можно объединить в один: если кластер в ГВЦ потерял базис – его можно удалить. Более того, тогда пункт 2 больше не нуждается в уточнении «кластер в уже созданной ГВЦ» – даже если ГВЦ растет, и последний кластер, который скоро может оказаться далеко не последним, потерял базис, то его также можно удалять. Более того, все то же самое тогда распространяется не только на ГВЦ, но и на ВЦ остальной памяти, на любые ВЦ. Конечно, в случае образования длительных разрывов, к каждому кластеру полезно присоединять информацию о времени между наступлением событий, которую ИНС сможет использовать при работе.

№94 Начальная схема кластера и выделение совпадений в ИНС Б2

Пятница, Май 1st, 2009

От выделения совпадений уровня Б2 – сравнительно недалеко до выделения классификаций.
Предыдущие статьи: http://neurocod.net/blog/tag/выделение-совпадений/
Для примеров будут применяться упрощения: в большинстве случаев, в каждый такт запоминания
будет активен только один образ, подлежащий запоминанию (текстовая ИНС). Для иллюстрации последовательностей цепочек памяти будут использоваться строки. Звездочкой будут обозначаться любые несущественные образы в последовательности.
Требования:
- Выделение совпадений с разрывами в цепочках. Пример – А***Б
- Длина разрывов в разных цепочках может отличаться. Пример – А*Б и А***Б
- Возможность нахождения преобразований одной последовательности в другую. Пример – А*Б*В и В*Б*А.

Начальный поиск цепочек для выделения будет осуществляться нечетким распознаванием: «№91 Нечеткое распознавание и поиск в ИНС Б2» ( http://neurocod.net/blog/tag/2009/04/№91-нечеткое-распознавание-и-поиск-в-ин ). После выбора двух цепочек, по ним пускается активация.
Разрывы различной длинны будут означать, что на участки воспоминания, содержащие одинаковые элементы, активация может приходить в разные такты, не синхронно. Простая схема прозвонки не подходит. Например, как в Б1, с синхронно сдвигающимися позициями, где обрабатываются только общие элементы этих двух позиций.
Можно, как было описано в «№42 Методы привнесения нечеткости в нисходящие и восходящие нейронные цепочки» ( http://neurocod.net/blog/tag/2008/08/№42-методы-привнесения-нечеткости-в-ни ), использовать перескакивание сигналов по связям. Вместо опережающих сигналов, я выбрал схему с прохождением недостаточного сигнала и запаздывающим распознаванием пройденных кластеров. Сигналы идут по цепочке
последовательно и без перескоков. Некоторая позиция с общими элементами одним из сигналов может быть пройдена. Выделение произойдет, когда сигнал второй цепочки наконец дойдет до позиции с элементами, общими с той пройденной позицией на первой цепочке. Чтобы пройденная позиция оказалась выделенной, на кластере должна сохраниться активация.


Рис. 94-1 Выделение совпадения с несинхронным прохождением общих элементов

На каких нейронах кластера хранить эту активацию? Вначале возникает желание продумать как можно более экономичную и простую схему. В одной из таких схем, активация будет храниться на том же нейроне, по которому проходил основной синхронизирующий сигнал по цепочке. Но тогда нужно, чтобы на пройденных нейронах эта активация была недостаточной для отправки сигнала вперед по цепочке, иначе синхронизирующих сигналов в этом режиме станет больше двух, и весь алгоритм собьется.
Я выбрал другую схему, немного более накладную в плане ресурсов памяти, но с более явной специализацией нейронов, и более похожую на ИНС Б1. Пришло время рассмотреть строение кластера ИНС Б2 подробнее.

  1. //ИНС Б2:
  2. кластер КластерПамяти
  3. {
  4.         //________________________________________
  5.         //"верхний" уровень, связь с более общими образами
  6.         //вход:
  7.         nExp,   //Expectation – получение сигнала прогнозирования
  8.                 //с кластеров, не относящихся к данной цепочке
  9.         //выход:
  10.         nOut,   //Out – отправка сигнала к вышестоящим образам
  11.  
  12.         //________________________________________
  13.         //средний уровень, связь с той же цепочкой
  14.         //вход:
  15.         nEn,    //Enable – сигнал разрешения с предыдущего кластера цепочки
  16.         //выход:
  17.         nFwd,   //Forward – распространение сигнала вперед по цепочке памяти
  18.        
  19.         //________________________________________
  20.         //"нижний" уровень признаков:
  21.         //вход:
  22.         nIn,    //In – распознавание признаков
  23.         //выход:
  24.         nDown,  //Down – активация признаков
  25. }

Как видно, кластер разделен на три абстрактных уровня – для работы с нижестоящими признаками, для связи с кластерами той же цепочки, и для связи с кластерами более общих образов. В свою очередь, каждый уровень содержит по два нейрона, один из которых принимает сигналы с нейронов соответствующего уровня, а второй – шлет сигналы, не необязательно на те же нейроны – лишь на нейроны того же уровня. На визуальных схемах, нейроны кластера целесообразно располагать соответственно этим уровням. Такая схема строения кластера красивее и гармоничнее предыдущих, которые не были приспособлены ко всем тем режимам работы, что возможны с этой схемой. Эта схема более универсальна, и на ней можно отрабатывать много разных алгоритмов работы ИНС, чем и займемся. (далее…)

№86 Переписывание алгоритмов работы мозга Б1 на Мозгокоде

Пятница, Февраль 27th, 2009

(«№82 Сокращенная запись алгоритмов ИНС с применением контуров и виртуальных связей. “Мозгокод”.» ( http://neurocod.net/blog/tag/2009/02/№82-сокращенная-запись-алгоритмов-инс ))

ИНС серии «Б» используются в НЛ 3, в предыдущих версиях была серия А0-А4, а еще раньше ИНС не назывались отдельно.

ИНС «Б0» – простейшая тестовая ИНС, применяется для отладки НЛ, а также служит примером для создания пользовательских ИНС в НЛ.

В ИНС «Б1» было исследовано несолько подходов, в том числе – безуспешная попытка выделения совпадений обычным кодом, без разделения на нейроконтуры.

Части алгоритмов для Б1, которые описывались ранее, переписаны на Мозгокоде, для привития привычки к этой форме записи.

  1. //мозг Б1
  2.  
  3. контуры
  4. {
  5.         nin,//признаки
  6.         nout,//выход кластера
  7.         ninPrev,//нейрон разрешения гностической цепочки
  8.         ndown,//нисходящая цепочка
  9. }
  10.  
  11. Кластер
  12. {
  13.         //Содержит по одному нейрону каждого контура
  14.         nin,
  15.         nout,
  16.         ninPrev,
  17.         ndown,
  18. }
  19.  
  20. такт фазы восприяия и запоминания:
  21. {
  22.         //цикл памяти включает распознавание поступающих образов
  23.         nin << 0;
  24.         ninPrev << 0;
  25.        
  26.         nin     ->V nout;
  27.         ninPrev ->V nout;
  28.  
  29.         Список<нейрон> списокАктивныхНейроновДляЗапоминания;
  30.        
  31.         nout << 0;
  32.         для всех нейронов в nout
  33.                 если(нейон активен && тип нейрона подлежит запоминанию)
  34.                         добавить нейрон в списокАктивныхНейроновДляЗапоминания
  35.  
  36.         кластер1 = создатьКластер();
  37.         присоединить нейроны из списокАктивныхНейроновДляЗапоминания к кластер1
  38.         добавить кластер1 в конец цепочки памяти за день
  39. }
  40. //предусловие – активны два нейрона, двух нисходящих цепочек
  41. Цикл «режим выделения совпадений при активированных нисходящих цепочках»
  42. {
  43.         ndown << 0;
  44.         ndown-> *;
  45.  
  46.         если(2 == количество активных нейронов в контуре ndown)
  47.         {
  48.                 списокАктивныхНейронов;
  49.                 для всех nin
  50.                         если активация>= 2*порог
  51.                                 занести нейрон в списокАктивныхНейронов
  52.                 если( списокАктивныхНейронов.пустой() )
  53.                 {
  54.                         окончание данного обобщения
  55.                         //ИНС Б1 при выделении обобщений работает до первого разрыва
  56.                         // – пока встречаются общие элементы
  57.                 }
  58.                 иначе
  59.                 {
  60.                         кластер1 = создатьКластер();
  61.                         присоединить списокАктивныхНейронов в качестве признаков к кластер1
  62.                         добавить кластер1 в конец новой гностической цепочки
  63.                 }
  64.         }
  65.         иначе
  66.         {
  67.                 //уже НЕ две активные цепочки
  68.                 //вероятно, окончание одной из цепочек
  69.                 окончание данного обобщения
  70.         }
  71. }

Остальное дописывать влом ))

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

Оставим этот код для музея, и перейдем к следующему поколению ИНС – Б2.