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






