Логические нейронные сети

Алгоритм трассировки нейросети


В результате решения примера сформировались и даже стали привычными действия, на основе которых мы можем сформулировать

Алгоритм трассировки (обучения по обобщенным эталонам) нейросети

  1. Дополняем матрицу следования S транзитивными связями по алгоритму, представленному в разделе 3.4.
  2. Все нейроны выходного слоя не должны иметь в соответствующих им строках "пустых" элементов в позициях, соответствующих нейронам входного слоя. Пустой элемент указывает на отсутствие пути возбуждения от соответствующего нейрона входного слоя. Мы будем считать нейросеть построенной некорректно и нуждающейся во внесении дополнительных связей, например, непосредственно от нейрона входного слоя к нейрону выходного слоя.
  3. Организуем перебор всех обобщенных эталонных ситуаций и соответствующих им решений, последовательно закрепляя нейроны выходного слоя Выхi за обобщенными ситуациями. Для каждой обобщенной ситуации выполняем пункты 4-15.
  4. Для обобщенного эталона i (i = 1, 2, …, m) строим матрицу следования Si[Vi1, Vi2, …, Vir
    Выхi], где Vi1, Vi2, …, Vir - нейроны входного слоя, возбуждающиеся (до максимальной величины) при подаче обобщенного эталона, т.е. характеризующие ситуацию.
  5. В матрице Si последовательно, сверху вниз, вычеркиваем строки (и соответствующие столбцы), которые содержат количество единиц меньше значения m, указанного при строке.

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

  6. Присваиваем признак "возбужден" всем нейронам входного слоя, представленным в матрице Si.
  7. Проверяем: содержит ли матрица Si более одной строки? Если содержит, выполняется следующий пункт, в противном случае выполняется пункт 3.
  8. Исключаем из матрицы Si строки и столбцы, соответствующие нейронам–входам, не обладающим признаком "возбужден".
  9. Выделяем множество столбцов матрицы Si, обладающих признаком "возбужден".

  10. Выполняем действие, отраженное в пункте 5 (во внешнем цикле): исключаем из текущего вида матрицы Si строки (и столбцы), которые содержат количество единичных элементов меньшее, чем указанное при строке значение m.

    Примечание. Такое действие необходимо после каждого вычеркивания строк и столбцов.

  11. В совокупности выделенных столбцов находим (если таковая имеется) первую строку, содержащую максимальное число единиц и не содержащую единиц в других столбцах. (Число найденных единиц не должно быть меньше соответствующего значения m.) Соответствующий ей нейрон может быть переиспользован. Если такой строки найти не удается, выполняем пункт 13.


  12. Исключаем из рассмотрения нейроны (вычеркиваем строки и столбцы) которым соответствуют единицы в найденной строке. Присваиваем нейрону, соответствующему выделенной строке, признак "возбужден". Уничтожаем в выделенной строке все нули и символы транзитивных связей, если они имеются, - превращаем строку во вход матрицы Si.

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

    Переходим к выполнению пункта 7.

  13. В совокупности выделенных столбцов находим, если таковая имеется, первую строку, содержащую максимальное число нулевых элементов. Если такой строки найти не удается, выполняем пункт 15.


  14. Меняем значение возбуждения соответствующих связей, то есть заменяем нули единицами. Присваиваем нейрону, соответствующему выделенной строке, значение m, равное количеству единиц в строке, и признак "возбужден". Исключаем из рассмотрения нейроны (вычеркиванием строк и столбцов), "передавшие" свое возбуждение найденному нейрону.

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


    При этом достаточно учитывать лишь число единиц в строке. В процессе такого обучения эталоны не мешают друг другу!

    Внесенные изменения весов учитываем в матрице S. Переходим к выполнению пункта 7.



  15. По каждому выделенному столбцу "спускаемся" вниз и находим первый из непустых элементов, соответствующий транзитивной связи. Вводим в нейросеть дополнительную связь, присваивая единичное значение найденному элементу. Исключаем из рассмотрения (вычеркиваем строки и столбцы) нейроны, соответствующие обработанным столбцам. Отражаем внесенные изменения в матрице S.

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

    Переходим к выполнению шага 7.



Описание алгоритма закончено.

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

Так, в нашем случае удачно сложился терм в результате связи [C1, C2, C3, C4,C5
6]. Он использовался при получении трех решений по эталонным ситуациям – R1, R4, R5. По-видимому, целесообразны термы в результате объединения С1, С2, С3, а также С4 и С5, В1 и В2 и др.

Мы предлагаем читателю самому произвести трассировку сети, представленной на рис. 2.14, по предложенному алгоритму. Избежит ли он введения дополнительных связей? Мы не знаем. Но, во-первых, мы строим простой, нетрудоемкий алгоритм; во-вторых - мы же раньше говорили о нецелесообразности экономии! При такой скудости наших знаний на что нам тратить сто миллиардов нейронов с десятью тысячами дендритов каждый?!


Содержание раздела