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

Трассировка нейронной сети

Разбить на страницы
Показывать лекцию целиком

" - Аннушка $$\dots$$ Аннушка?.. - забормотал поэт, тревожно озираясь, - позвольте, позвольте $$\dots$$

К слову "Аннушка" привязались слова "подсолнечное масло", а затем почему-то "Понтий Пилат". Пилата поэт отринул и стал вязать цепочку, начиная со слова "Аннушка". И цепочка эта связалась очень быстро и тотчас привела к сумасшедшему профессору".

4.1. Пример - опыт - предпосылки обобщения

Объединим множество эталонов, требующих возбуждения одного нейрона выходного слоя, понятием "обобщенный эталон". Например, эталоны $$А1\wedge В1\wedge С1$$, $$А1\wedge В1\wedge С2$$, $$А1\wedge В1\wedge С3$$, $$А1\wedge В1\wedge С4$$, $$А1\wedge В1\wedge С5$$ образуют один обобщенный эталон $$А1\wedge В1\wedge (С1\vee С2\vee С3\vee C4\vee C5)$$, ведущий к R1. Тогда для обобщенного эталона введем понятие обобщенной операции , которая объединяет все посылки, ведущие к одному выводу, A1B1C1C2C3C4C5->R1.

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

$$\begin{array}{l} A1\ B1\ C1\ C2\ C3\ C4\ C5 \to R1\\ A1\ B2\ B3\ C1\ C2\ C3 \to R2\\ A1\ B2\ B3\ C4\ C5 \to R3\\ A2\ B3\ C1\ C2\ C3\ C4\ C5 \to R4\\ A2\ B1\ B2\ C1\ C2\ C3\ C4\ C5 \to R5\end{array}$$

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

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

Ибо мы видели, с каким трудом удается приспособить "готовую" нейросеть под конкретную задачу. Мы постоянно склонялись к вопросу: "А не лучше ли сразу строить сеть "под задачу", а не наоборот?" Нам кажется, мы нашли диалектический компромисс: беря что-то близкое, подходящее, мы минимально переделываем, словно костюм с жмущим гульфиком, купленный в универсальном магазине. Кроме того, нам очень важно сделать алгоритм доступным широким массам студенческой молодежи, овладевшей основами таинства параллельного программирования!

(рис 4.1) Нейросеть, подлежащая обучению(рис 4.2) Матрица следования с транзитивными связями

Пусть выбранная нейросеть представлена на рис. 4.1, где первоначально заданные связи обозначены тонкими стрелками. Строим соответствующую матрицу следования S и в ней - транзитивные связи (рис. 4.2). Проверяем, все ли нейроны выходного слоя достижимы из любого нейрона входного слоя. Если нет, считаем, что сеть составлена не корректно.

В данном случае из нейрона В1 не исходит ни одной статической цепочки, заканчивающейся нейроном Вых5. Это следует из того, что в строке, соответствующей нейрону Вых5, нет даже транзитивной связи в столбце, соответствующем нейрону В1. То же касается нейрона В3.

Введем синапсические связи В1 -> Вых5 и В3 -> Вых5, что отмечено на рис. 4.1 жирными стрелками, а на рис. 4.2 – нулевыми весами введенных связей.

Сформируем статический путь возбуждения {B1, A1, C1, C2, C3, C4, C5} -> Вых1 и отобразим его матрицей S1[B1,A1,C1,C2,C3,C4,C5 -> Вых1] на рис. 4.3.

(рис 4.3) Матрица следования при обучении первому эталону

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

Найдем входы матрицы S1 (пустые строки), обладающие признаком "возбужден". Выделим в одну совокупность соответствующие им столбцы, в данном случае столбцы 1-7, и найдем в ней строку, содержащую максимальное число "нулей", - строку, соответствующую нейрону 6. Заменяем в этой строке (в выделенной совокупности столбцов) "нули" "единицами", т.е. максимально увеличиваем соответствующие веса. Присваиваем нейрону 6 признак "возбужден", а также значение m6 = 5, характеризующее то количество нейронов, "возбуждение" которых мы "собрали" на входе этого нейрона. Впредь мы можем только повторно использовать этот нейрон, но менять веса связей на его входе мы не должны. Изменение весов отображаем в матрице S.

Исключаем из матрицы S1 строки и столбцы, соответствующие нейронам С1, С2, С3, С4, С5. Новый вид матрицы S1 представлен на рис. 4.4.

(рис 4.4) Шаг преобразования матрицы следования

Вновь выделяем столбцы, соответствующие "возбужденным" входам матрицы. Это столбцы, соответствующие нейронам В1, А1, 6. Находим строку в выделенной совокупности столбцов, имеющую максимальное число "нулей". Такая строка соответствует нейрону 11. Заменяем в этой строке (в выделенной совокупности столбцов) "нули" "единицами", т.е. максимально увеличиваем веса. Присваиваем нейрону 11 признак "возбужден" и значение m11 = 3. Отражаем изменение весов в матрице S.

Исключаем из матрицы S1 строки и столбцы, соответствующие нейронам В1, А1, 6. Матрица принимает вид, изображенный на рис. 4.5.

(рис 4.5) Шаг преобразования матрицы следования

Исключаем из матрицы все входы, которые соответствуют нейронам 1, 2, 3, 4, 5, не обладающим признаком "возбужден". Ведь строящийся нами путь возбуждения уже миновал эти нейроны! Исключение этих нейронов породит новые нейроны, нуждающиеся в исключении по той же причине, - нейроны 9 и 10.

Последовательное исключение сверху вниз динамически учитывает появление таких нейронов и гарантирует полное исключение за один проход. Матрица S1 примет вид на рис. 4.6.

(рис 4.6) Шаг преобразования матрицы следования

Теперь в первом столбце имеется единственная строка с "нулем" - соответствующая нейрону Вых1. Меняем "нуль" на "единицу" - получаем окончательный возможный динамический путь возбуждения по заданному эталону. Изменения отражаем в матрице S.

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

Реакции на эталон одной комбинации мы сеть научили.

Составим обобщенный эталон ситуации, требующий решения R2, - {A1, B2, B3, C1, C2, C3}. Свяжем это решение с нейроном Вых2.

По сети на рис. 4.7 или по матрице на рис. 4.2 (с учетом частичного обучения!) построим (рис. 4.8) матрицу статического пути возбуждения S2[B2, B3, A1, C1, C2, C3 -> Вых2].

Нейрон 6 ранее "объединил" возбуждение пяти нейронов: С1, С2, С3, С4, С5, т.е. в матрице S в соответствующей строке содержится пять единиц и m6 = 5. Однако в составленной матрице S2 в строке, соответствующей этому нейрону, присутствуют лишь три единицы. Значит, этот нейрон не может быть использован для трассировки необходимого пути возбуждения, т.к. комбинация С1С2С3С4С5 нам здесь не нужна.

(рис 4.7) Нейросеть, обученная первому эталону(рис 4.8) Матрица следования для обучения второму эталону

То же следует сказать и о нейроне 11.

Исключим из данной матрицы строки и столбцы, соответствующие нейронам 6 и 11. Матрица примет вид, показанный на рис. 4.9.

(рис 4.9) Шаг преобразования матрицы следования

Объединяем столбцы множества входов матрицы, обладающих признаком "возбужден". На данном шаге - это первые шесть столбцов матрицы. Находим в них первую строку, содержащую максимальное число нулей. Это строка, соответствующая нейрону 4. Меняем в ней все нули на единицы, полагаем m4 = 4. Присваиваем нейрону 4 признак "возбужден". Отражаем внесенные изменения весов в матрице S.

Исключаем из матрицы S2 строки и столбцы, соответствующие нейронам В2, А1, С1, С2, "передавшим" свое возбуждение нейрону 4.

Вновь объединяем столбцы множества входов, обладающих признаком "возбужден". Это столбцы, соответствующие нейронам В3, С3, 4. В совокупности этих столбцов выбираем первую из строк, содержащую максимальное число нулей. В данном случае это строка, соответствующая нейрону 1. Меняем нуль на единицу, полагаем m1 = 1, нейрону 1 присваиваем признак "возбужден".

Исключаем из матрицы строку и столбец, соответствующие нейрону В3, "передавшему" возбуждение нейрону 1. Исключаем из матрицы строки и столбцы, соответствующие образовавшимся входам - "не возбужденным" нейронам 2 и 3.

Выделяем столбцы, которые соответствуют нейронам - входам, обладающим признаком "возбужден", и в их совокупности находим строку, обладающую наибольшим числом нулей. Такая строка соответствует нейрону 10. Меняем нули на единицы, присваиваем нейрону признак "возбужден", полагаем m10 = 2.

Исключаем из матрицы S2 строки и столбцы, которые соответствуют нейронам 1 и 4, передавшим возбуждение нейрону 10.

Нейрон 9, не обладающий признаком "возбужден", образует вход матрицы. Исключаем соответствующие ему строку и столбец.

Выделяем столбцы, соответствующие нейронам С3 и 10, и в них находим строку с максимальным числом нулей. Первая из таких строк соответствует нейрону 5. Заменяем в ней единственный нуль единицей, присваиваем нейрону признак "возбужден", полагаем m5 = 1. Отражаем изменение веса в матрице S.

Исключаем из матрицы S2 строку и столбец, которые соответствуют нейрону С3, передавшему возбуждение нейрону 5.

Исключаем строку и столбец, соответствующие нейрону 7, как порождающему вход матрицы и не имеющему признака "возбужден".

В совокупности выделенных столбцов, соответствующих нейронам 5 и 10, строка, соответствующая нейрону 12, имеет единственный нуль. Меняем его на единицу, присваиваем нейрону 12 признак "возбужден", полагаем m12 = 1. Отражаем внесенное изменение веса в матрице S. Исключаем из матрицы S1 строку и столбец, соответствующие нейрону 5.

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

(рис 4.10) Нейросеть после обучения двум эталонам

Обучим сеть третьей ситуации, требующей решения R3. Закрепим за этим решением нейрон Вых3. Матрица S3[B2, B3, A1, C4, C5 -> Вых3] представлена на рис. 4.11.

(рис 4.11) Матрица следования для обучения третьему эталону

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

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

В данном случае нам придется исключить из рассмотрения (вследствие исключения нейронов 4 и 5 ) нейроны 10 и 12. Матрица S3 примет окончательный вид на рис. 4.12.

(рис 4.12) Шаг преобразования матрицы следования

Присваиваем всем нейронам, образующим входы матрицы, признак "возбужден".

Выделяем и объединяем столбцы, соответствующие входам матрицы S3.

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

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

Так, нейрон 1 возбужден единственным нейроном, принадлежащим текущему множеству входов матрицы, - нейроном В3. Впредь он представляет этот нейрон, который может быть исключен из рассмотрения. Матрица S3 принимает вид на рис. 4.13.

(рис 4.13) Шаг преобразования матрицы следования

Подтверждаем нейрону 1 признак "возбужден" и превращаем его во вход матрицы S3, уничтожив веса в его строке.

Вновь находим множество входов матрицы и выделяем соответствующие им столбцы. Пытаемся найти строку, содержащую единицы в этих и только этих столбцах, но таких больше нет. Тогда находим строку, содержащую максимальное число нулей. Первая такая строка соответствует нейрону 2. "Объединяем" на нем возбуждение нейронов В2 и А1, заменяя нули единицами. Полагаем m2 = 2, исключаем нейроны В2 и А1 из рассмотрения, присваиваем нейрону 2 признак "возбужден". Отражаем сделанные изменения весов в матрице S.

Исключаем входы, не обладающие признаком "возбужден", - нейроны 3 и 5.

Выделяем столбцы, соответствующие входам. В их совокупности не находим строк, содержащих единицы. Тогда находим строку, содержащую максимальное число нулей. Такая строка соответствует нейрону 7. Меняем нули (в выделенной совокупности столбцов!) на единицы, полагаем m7 = 2, присваиваем нейрону 7 признак "возбужден", отражаем изменение весов в матрице S. Исключаем нейроны С4 и С5 из рассмотрения. Сразу замечаем, что сформируется "невозбужденный" вход, соответствующий нейрону 8. Исключаем из рассмотрения и этот нейрон (рис. 4.14).

(рис 4.14) Шаг преобразования матрицы следования

Выделяем столбцы, соответствующие "возбужденным" входам, и не находим строк, содержащих единицы. Тогда находим первую строку, содержащую максимальное число нулей. Это строка, соответствующая нейрону 13. Меняем нуль на единицу, нейрону 13 присваиваем признак "возбужден", полагаем m13 = 1. Исключаем нейрон 7 из рассмотрения.

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

Исключаем нейрон 13 из рассмотрения.

Выделяем множество столбцов, соответствующих "возбужденным" входам. Это столбцы, соответствующие нейронам 1 и 2. Пытаемся в этих столбцах найти строку с единицами, затем с максимальным числом нулей, - но таковых нет! Значит, необходимо введение дополнительных связей. Тогда в каждом столбце при просмотре сверху вниз находим первую транзитивную связь и меняем ее на единицу. Это означает, что данная сеть дополняется динамическими цепочками возбуждения 1 -> Вых3 и 2 -> Вых3.

Построение трассы решения R3 закончено. После этого этапа обучения сеть имеет вид как на рис. 4.15.

Приступим к обучению следующему обобщенному эталону - решению A2B3C1C2C3C4C5 -> R4. Матрица следования S4[B3, A2, C1, C2, C3, C4, C5 -> Вых4] представлена на рис. 4.16.

Исключим из рассмотрения те нейроны, для которых количество единиц в строках меньше значения m. Такими нейронами являются 4 и 11. Матрица S4 имеет вид как на рис. 4.17.

(рис 4.15) Нейросеть после обучения третьему эталону(рис 4.16) Матрица следования для обучения четвертому эталону(рис 4.17) Шаг преобразования матрицы следования

Присваиваем всем нейронам-входам значение "возбужден". Выделяем столбцы, соответствующие входам - первым строкам "возбужденных" нейронов. Это первые семь столбцов. Среди строк этой совокупности столбцов находим строку с максимальным числом единиц в этих столбцах, при отсутствии единиц в других столбцах. Это строка, соответствующая нейрону 6. Теперь нейрон 6 будет представлять нейроны С1, С2, С3, С4, С5, "передавшие" ему свое возбуждение. Присваиваем ему признак "возбужден", исключаем из рассмотрения перечисленные нейроны, матрица S4 принимает вид как на рис. 4.18.

(рис 4.18) Шаг преобразования матрицы следования

Для "не возбужденных" нейронов исключаем из матрицы S4 строки (и столбцы), число единиц в которых стало меньше соответствующего значения m. Они соответствуют нейронам 5 и 7. Повторяем этот шаг до полного исключения таких нейронов, - исключаются нейроны 12 и 13. Матрица имеет вид как на рис. 4.19.

(рис 4.19) Шаг преобразования матрицы следования

Исключаем из рассмотрения множество "невозбужденных" входов. К таким относится нейрон 8. Выделяем множество столбцов, соответствующих входам матрицы. В их совокупности находим первую строку, обладающую максимальным числом нулей (единиц нет во всей матрице!). Такая строка соответствует нейрону 3. Нули в ней соответствуют нейронам В3 и А2. Исключаем эти нейроны из рассмотрения, полагаем m3 = 2, присваиваем нейрону 3 признак "возбужден".

Вновь выделяем множество столбцов, соответствующих входам матрицы, и так как в их совокупности нет строк, содержащих единицы, находим строку с максимальным количеством нулей. Эта строка соответствует нейрону 14. Заменяем в ней нуль на единицу, полагаем m14 = 1, присваиваем нейрону 14 признак "возбужден". Исключаем нейрон 6 из матрицы. Матрица принимает вид как на рис. 4.20.

(рис 4.20) Шаг преобразования матрицы следования

Выделяем множество столбцов, соответствующих входам матрицы, и так как в их совокупности нет строк, содержащих единицы, находим строку с максимальным количеством нулей. Эта строка соответствует нейрону выходного слоя Вых4. Меняем в ней нуль на единицу. Так как это - нейрон выходного слоя, не присваиваем ему признак "возбужден" и значение m. Исключаем нейрон 14 из рассмотрения. Матрица имеет вид как на рис. 4.21.

(рис 4.21) Шаг преобразования матрицы следования

В этой матрице множество "возбужденных" входов составляет единственный нейрон 3. Однако в его столбце нет ни единичных, ни нулевых элементов. Тогда, как и прежде, вводим в сеть дополнительную связь, найдя в столбце, соответствующем нейрону 3, первую сверху транзитивную связь и положив ее вес равным единице. Эта связь порождает динамический путь возбуждения 3 -> Вых4. Все изменения отражаем в матрице S.

Построение трассы решения R4 закончено. Не приводя промежуточного вида матрицы S, дадим на рис. 4.22 вид сети, полученной после данного этапа трассировки.

И, наконец, приступим к трассировке последнего пути возбуждения. Он осуществляется по обобщенному эталону, требующему решения R5, A2B1B2C1C2C3C4C5 -> R5. За решением R5 закреплен нейрон выходного слоя Вых5.

На основе текущего вида матрицы S построим матрицу S5[B1, B2, A2, C1, C2, C3, C4, C5 -> Вых5], исключая из S "ненужные" строки и столбцы и сохраняя транзитивные связи. Затем нам придется исключить из рассмотрения нейрон 4, для которого количество единиц в строке меньше значения m4 = 4. Получившаяся матрица S5 представлена на рис. 4.23.

(рис 4.22) Нейросеть после обучения четырем эталонам(рис 4.23) Матрица следования для обучения пятому эталону

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

Исключаем из рассмотрения нейроны 5 и 7, так как в соответствующих им строках отсутствуют единицы при отличных от нуля значениях m. Однако видно, что после их исключения придется исключить по той же причине нейроны 12 и 13. Получившаяся матрица представлена на рис. 4.24.

(рис 4.24) Шаг преобразования матрицы следования

Исключаем из рассмотрения "невозбужденный" вход, соответствующий нейрону 8. Выделяем столбцы, соответствующие "возбужденным" входам, и в их совокупности находим строку, содержащую наибольшее число единиц при отсутствии единиц в других столбцах. Такая строка соответствует нейрону 14. Исключаем из рассмотрения нейрон 6 как передавший свое возбуждение нейрону 14, присваиваем нейрону 14 признак "возбужден". Матрица S5 принимает вид как на рис. 4.25.

(рис 4.25) Шаг преобразования матрицы следования

Выделяем столбцы входов, соответствующие "возбужденным" нейронам, и в их совокупности находим строку, содержащую максимальное число нулей (строк с единицами больше нет). Такая строка соответствует нейрону выходного слоя Вых5. Меняем нули на единицы. Исключаем нейроны В1 и 14 из рассмотрения. Отражаем введенные изменения в матрице S. Новый вид матрицы S5 приведен на рис. 4.26.

(рис 4.26) Шаг преобразования матрицы следования

Выделяем множество столбцов, соответствующих входам матрицы. В этих столбцах не находим ни строк, содержащих единицы, ни строк, содержащих нули. Тогда в каждом столбце заносим единицы на места транзитивных связей, то есть вводим связи В2 -> Вых5 и А2 -> Вых5, а веса этих связей полагаем равными единице.

Трассировка (обучение сети по обобщенным эталонам ) закончена. Окончательный ее вид представлен на рис. 4.27, где, напоминаем, веса, принявшие значение 1, соответствуют жирным стрелкам.

(рис 4.27) Обученная нейросеть

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    4.3. Приведение нейросети после трассировки

    Зафиксируем передаточную функцию, например

    $$\begin{array}{l} V:= \sum_j \omega_j V_j \\ V_i := if\: V > h\: then \: V else \: 0\end{array}$$

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

    Рассмотренный выше пример нехарактерен. В нем каждый эталон приводил, при данной передаточной функции, к одинаковой величине возбуждения нейронов выходного слоя. Но, например, при распознавании знаков алфавита величины возбуждения нейронов выходного слоя, в ответ на предъявление различных эталонов, могут быть различными. Так, в первом примере лекции 2 для записи буквы О потребовалось возбуждение шести нейронов-рецепторов, а для записи буквы А – восьми рецепторов. Очевидно, эталон латинской I "засветит" на входном слое (на клетчатке) меньшее число нейронов, чем, скажем, буква Q, но значительно большее число, чем необходимо для записи запятой. Значит, при рассматриваемых простейших видах передаточной функции величины возбуждения на выходе будут существенно различаться.

    Тогда закрадывается подозрение: а не приведет ли некоторое незначительное искажение ситуации А, логично требующее все же решения RA, в сторону ситуации В, то есть принятия решения RB?

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

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

    $$k_j = \frac{U_j}{V_j}.$$

    Однако значение Vj находим не по обобщенному эталону, а по каждой конкретной ситуации, входящей в состав обобщенного эталона. Например, ситуация {A1, B1, C1} образует реальный эталон в составе обобщенного эталона {A1, B1, C1, C2, C3, C4, C5}. По нему (другие ситуации аналогичны) находится величина возбуждения VВых1 нейрона Вых1. Значит,

    $$k_{Вых1} = \frac{U}{ V_{Вых1}}$$

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

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

    Страницы:

    " - Аннушка $$\dots$$ Аннушка?.. - забормотал поэт, тревожно озираясь, - позвольте, позвольте $$\dots$$

    К слову "Аннушка" привязались слова "подсолнечное масло", а затем почему-то "Понтий Пилат". Пилата поэт отринул и стал вязать цепочку, начиная со слова "Аннушка". И цепочка эта связалась очень быстро и тотчас привела к сумасшедшему профессору".

    4.1. Пример - опыт - предпосылки обобщения

    Объединим множество эталонов, требующих возбуждения одного нейрона выходного слоя, понятием "обобщенный эталон". Например, эталоны $$А1\wedge В1\wedge С1$$, $$А1\wedge В1\wedge С2$$, $$А1\wedge В1\wedge С3$$, $$А1\wedge В1\wedge С4$$, $$А1\wedge В1\wedge С5$$ образуют один обобщенный эталон $$А1\wedge В1\wedge (С1\vee С2\vee С3\vee C4\vee C5)$$, ведущий к R1. Тогда для обобщенного эталона введем понятие обобщенной операции , которая объединяет все посылки, ведущие к одному выводу, A1B1C1C2C3C4C5->R1.

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

    $$\begin{array}{l} A1\ B1\ C1\ C2\ C3\ C4\ C5 \to R1\\ A1\ B2\ B3\ C1\ C2\ C3 \to R2\\ A1\ B2\ B3\ C4\ C5 \to R3\\ A2\ B3\ C1\ C2\ C3\ C4\ C5 \to R4\\ A2\ B1\ B2\ C1\ C2\ C3\ C4\ C5 \to R5\end{array}$$

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

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

    Ибо мы видели, с каким трудом удается приспособить "готовую" нейросеть под конкретную задачу. Мы постоянно склонялись к вопросу: "А не лучше ли сразу строить сеть "под задачу", а не наоборот?" Нам кажется, мы нашли диалектический компромисс: беря что-то близкое, подходящее, мы минимально переделываем, словно костюм с жмущим гульфиком, купленный в универсальном магазине. Кроме того, нам очень важно сделать алгоритм доступным широким массам студенческой молодежи, овладевшей основами таинства параллельного программирования!

    (рис 4.1) Нейросеть, подлежащая обучению(рис 4.2) Матрица следования с транзитивными связями

    Пусть выбранная нейросеть представлена на рис. 4.1, где первоначально заданные связи обозначены тонкими стрелками. Строим соответствующую матрицу следования S и в ней - транзитивные связи (рис. 4.2). Проверяем, все ли нейроны выходного слоя достижимы из любого нейрона входного слоя. Если нет, считаем, что сеть составлена не корректно.

    В данном случае из нейрона В1 не исходит ни одной статической цепочки, заканчивающейся нейроном Вых5. Это следует из того, что в строке, соответствующей нейрону Вых5, нет даже транзитивной связи в столбце, соответствующем нейрону В1. То же касается нейрона В3.

    Введем синапсические связи В1 -> Вых5 и В3 -> Вых5, что отмечено на рис. 4.1 жирными стрелками, а на рис. 4.2 – нулевыми весами введенных связей.

    Сформируем статический путь возбуждения {B1, A1, C1, C2, C3, C4, C5} -> Вых1 и отобразим его матрицей S1[B1,A1,C1,C2,C3,C4,C5 -> Вых1] на рис. 4.3.

    (рис 4.3) Матрица следования при обучении первому эталону

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

    Найдем входы матрицы S1 (пустые строки), обладающие признаком "возбужден". Выделим в одну совокупность соответствующие им столбцы, в данном случае столбцы 1-7, и найдем в ней строку, содержащую максимальное число "нулей", - строку, соответствующую нейрону 6. Заменяем в этой строке (в выделенной совокупности столбцов) "нули" "единицами", т.е. максимально увеличиваем соответствующие веса. Присваиваем нейрону 6 признак "возбужден", а также значение m6 = 5, характеризующее то количество нейронов, "возбуждение" которых мы "собрали" на входе этого нейрона. Впредь мы можем только повторно использовать этот нейрон, но менять веса связей на его входе мы не должны. Изменение весов отображаем в матрице S.

    Исключаем из матрицы S1 строки и столбцы, соответствующие нейронам С1, С2, С3, С4, С5. Новый вид матрицы S1 представлен на рис. 4.4.

    (рис 4.4) Шаг преобразования матрицы следования

    Вновь выделяем столбцы, соответствующие "возбужденным" входам матрицы. Это столбцы, соответствующие нейронам В1, А1, 6. Находим строку в выделенной совокупности столбцов, имеющую максимальное число "нулей". Такая строка соответствует нейрону 11. Заменяем в этой строке (в выделенной совокупности столбцов) "нули" "единицами", т.е. максимально увеличиваем веса. Присваиваем нейрону 11 признак "возбужден" и значение m11 = 3. Отражаем изменение весов в матрице S.

    Исключаем из матрицы S1 строки и столбцы, соответствующие нейронам В1, А1, 6. Матрица принимает вид, изображенный на рис. 4.5.

    (рис 4.5) Шаг преобразования матрицы следования

    Исключаем из матрицы все входы, которые соответствуют нейронам 1, 2, 3, 4, 5, не обладающим признаком "возбужден". Ведь строящийся нами путь возбуждения уже миновал эти нейроны! Исключение этих нейронов породит новые нейроны, нуждающиеся в исключении по той же причине, - нейроны 9 и 10.

    Последовательное исключение сверху вниз динамически учитывает появление таких нейронов и гарантирует полное исключение за один проход. Матрица S1 примет вид на рис. 4.6.

    (рис 4.6) Шаг преобразования матрицы следования

    Теперь в первом столбце имеется единственная строка с "нулем" - соответствующая нейрону Вых1. Меняем "нуль" на "единицу" - получаем окончательный возможный динамический путь возбуждения по заданному эталону. Изменения отражаем в матрице S.

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

    Реакции на эталон одной комбинации мы сеть научили.

    Составим обобщенный эталон ситуации, требующий решения R2, - {A1, B2, B3, C1, C2, C3}. Свяжем это решение с нейроном Вых2.

    По сети на рис. 4.7 или по матрице на рис. 4.2 (с учетом частичного обучения!) построим (рис. 4.8) матрицу статического пути возбуждения S2[B2, B3, A1, C1, C2, C3 -> Вых2].

    Нейрон 6 ранее "объединил" возбуждение пяти нейронов: С1, С2, С3, С4, С5, т.е. в матрице S в соответствующей строке содержится пять единиц и m6 = 5. Однако в составленной матрице S2 в строке, соответствующей этому нейрону, присутствуют лишь три единицы. Значит, этот нейрон не может быть использован для трассировки необходимого пути возбуждения, т.к. комбинация С1С2С3С4С5 нам здесь не нужна.

    (рис 4.7) Нейросеть, обученная первому эталону(рис 4.8) Матрица следования для обучения второму эталону

    То же следует сказать и о нейроне 11.

    Исключим из данной матрицы строки и столбцы, соответствующие нейронам 6 и 11. Матрица примет вид, показанный на рис. 4.9.

    (рис 4.9) Шаг преобразования матрицы следования

    Объединяем столбцы множества входов матрицы, обладающих признаком "возбужден". На данном шаге - это первые шесть столбцов матрицы. Находим в них первую строку, содержащую максимальное число нулей. Это строка, соответствующая нейрону 4. Меняем в ней все нули на единицы, полагаем m4 = 4. Присваиваем нейрону 4 признак "возбужден". Отражаем внесенные изменения весов в матрице S.

    Исключаем из матрицы S2 строки и столбцы, соответствующие нейронам В2, А1, С1, С2, "передавшим" свое возбуждение нейрону 4.

    Вновь объединяем столбцы множества входов, обладающих признаком "возбужден". Это столбцы, соответствующие нейронам В3, С3, 4. В совокупности этих столбцов выбираем первую из строк, содержащую максимальное число нулей. В данном случае это строка, соответствующая нейрону 1. Меняем нуль на единицу, полагаем m1 = 1, нейрону 1 присваиваем признак "возбужден".

    Исключаем из матрицы строку и столбец, соответствующие нейрону В3, "передавшему" возбуждение нейрону 1. Исключаем из матрицы строки и столбцы, соответствующие образовавшимся входам - "не возбужденным" нейронам 2 и 3.

    Выделяем столбцы, которые соответствуют нейронам - входам, обладающим признаком "возбужден", и в их совокупности находим строку, обладающую наибольшим числом нулей. Такая строка соответствует нейрону 10. Меняем нули на единицы, присваиваем нейрону признак "возбужден", полагаем m10 = 2.

    Исключаем из матрицы S2 строки и столбцы, которые соответствуют нейронам 1 и 4, передавшим возбуждение нейрону 10.

    Нейрон 9, не обладающий признаком "возбужден", образует вход матрицы. Исключаем соответствующие ему строку и столбец.

    Выделяем столбцы, соответствующие нейронам С3 и 10, и в них находим строку с максимальным числом нулей. Первая из таких строк соответствует нейрону 5. Заменяем в ней единственный нуль единицей, присваиваем нейрону признак "возбужден", полагаем m5 = 1. Отражаем изменение веса в матрице S.

    Исключаем из матрицы S2 строку и столбец, которые соответствуют нейрону С3, передавшему возбуждение нейрону 5.

    Исключаем строку и столбец, соответствующие нейрону 7, как порождающему вход матрицы и не имеющему признака "возбужден".

    В совокупности выделенных столбцов, соответствующих нейронам 5 и 10, строка, соответствующая нейрону 12, имеет единственный нуль. Меняем его на единицу, присваиваем нейрону 12 признак "возбужден", полагаем m12 = 1. Отражаем внесенное изменение веса в матрице S. Исключаем из матрицы S1 строку и столбец, соответствующие нейрону 5.

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

    (рис 4.10) Нейросеть после обучения двум эталонам

    Обучим сеть третьей ситуации, требующей решения R3. Закрепим за этим решением нейрон Вых3. Матрица S3[B2, B3, A1, C4, C5 -> Вых3] представлена на рис. 4.11.

    (рис 4.11) Матрица следования для обучения третьему эталону

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

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

    В данном случае нам придется исключить из рассмотрения (вследствие исключения нейронов 4 и 5 ) нейроны 10 и 12. Матрица S3 примет окончательный вид на рис. 4.12.

    (рис 4.12) Шаг преобразования матрицы следования

    Присваиваем всем нейронам, образующим входы матрицы, признак "возбужден".

    Выделяем и объединяем столбцы, соответствующие входам матрицы S3.

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

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

    Так, нейрон 1 возбужден единственным нейроном, принадлежащим текущему множеству входов матрицы, - нейроном В3. Впредь он представляет этот нейрон, который может быть исключен из рассмотрения. Матрица S3 принимает вид на рис. 4.13.

    (рис 4.13) Шаг преобразования матрицы следования

    Подтверждаем нейрону 1 признак "возбужден" и превращаем его во вход матрицы S3, уничтожив веса в его строке.

    Вновь находим множество входов матрицы и выделяем соответствующие им столбцы. Пытаемся найти строку, содержащую единицы в этих и только этих столбцах, но таких больше нет. Тогда находим строку, содержащую максимальное число нулей. Первая такая строка соответствует нейрону 2. "Объединяем" на нем возбуждение нейронов В2 и А1, заменяя нули единицами. Полагаем m2 = 2, исключаем нейроны В2 и А1 из рассмотрения, присваиваем нейрону 2 признак "возбужден". Отражаем сделанные изменения весов в матрице S.

    Исключаем входы, не обладающие признаком "возбужден", - нейроны 3 и 5.

    Выделяем столбцы, соответствующие входам. В их совокупности не находим строк, содержащих единицы. Тогда находим строку, содержащую максимальное число нулей. Такая строка соответствует нейрону 7. Меняем нули (в выделенной совокупности столбцов!) на единицы, полагаем m7 = 2, присваиваем нейрону 7 признак "возбужден", отражаем изменение весов в матрице S. Исключаем нейроны С4 и С5 из рассмотрения. Сразу замечаем, что сформируется "невозбужденный" вход, соответствующий нейрону 8. Исключаем из рассмотрения и этот нейрон (рис. 4.14).

    (рис 4.14) Шаг преобразования матрицы следования

    Выделяем столбцы, соответствующие "возбужденным" входам, и не находим строк, содержащих единицы. Тогда находим первую строку, содержащую максимальное число нулей. Это строка, соответствующая нейрону 13. Меняем нуль на единицу, нейрону 13 присваиваем признак "возбужден", полагаем m13 = 1. Исключаем нейрон 7 из рассмотрения.

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

    Исключаем нейрон 13 из рассмотрения.

    Выделяем множество столбцов, соответствующих "возбужденным" входам. Это столбцы, соответствующие нейронам 1 и 2. Пытаемся в этих столбцах найти строку с единицами, затем с максимальным числом нулей, - но таковых нет! Значит, необходимо введение дополнительных связей. Тогда в каждом столбце при просмотре сверху вниз находим первую транзитивную связь и меняем ее на единицу. Это означает, что данная сеть дополняется динамическими цепочками возбуждения 1 -> Вых3 и 2 -> Вых3.

    Построение трассы решения R3 закончено. После этого этапа обучения сеть имеет вид как на рис. 4.15.

    Приступим к обучению следующему обобщенному эталону - решению A2B3C1C2C3C4C5 -> R4. Матрица следования S4[B3, A2, C1, C2, C3, C4, C5 -> Вых4] представлена на рис. 4.16.

    Исключим из рассмотрения те нейроны, для которых количество единиц в строках меньше значения m. Такими нейронами являются 4 и 11. Матрица S4 имеет вид как на рис. 4.17.

    (рис 4.15) Нейросеть после обучения третьему эталону(рис 4.16) Матрица следования для обучения четвертому эталону(рис 4.17) Шаг преобразования матрицы следования

    Присваиваем всем нейронам-входам значение "возбужден". Выделяем столбцы, соответствующие входам - первым строкам "возбужденных" нейронов. Это первые семь столбцов. Среди строк этой совокупности столбцов находим строку с максимальным числом единиц в этих столбцах, при отсутствии единиц в других столбцах. Это строка, соответствующая нейрону 6. Теперь нейрон 6 будет представлять нейроны С1, С2, С3, С4, С5, "передавшие" ему свое возбуждение. Присваиваем ему признак "возбужден", исключаем из рассмотрения перечисленные нейроны, матрица S4 принимает вид как на рис. 4.18.

    (рис 4.18) Шаг преобразования матрицы следования

    Для "не возбужденных" нейронов исключаем из матрицы S4 строки (и столбцы), число единиц в которых стало меньше соответствующего значения m. Они соответствуют нейронам 5 и 7. Повторяем этот шаг до полного исключения таких нейронов, - исключаются нейроны 12 и 13. Матрица имеет вид как на рис. 4.19.

    (рис 4.19) Шаг преобразования матрицы следования

    Исключаем из рассмотрения множество "невозбужденных" входов. К таким относится нейрон 8. Выделяем множество столбцов, соответствующих входам матрицы. В их совокупности находим первую строку, обладающую максимальным числом нулей (единиц нет во всей матрице!). Такая строка соответствует нейрону 3. Нули в ней соответствуют нейронам В3 и А2. Исключаем эти нейроны из рассмотрения, полагаем m3 = 2, присваиваем нейрону 3 признак "возбужден".

    Вновь выделяем множество столбцов, соответствующих входам матрицы, и так как в их совокупности нет строк, содержащих единицы, находим строку с максимальным количеством нулей. Эта строка соответствует нейрону 14. Заменяем в ней нуль на единицу, полагаем m14 = 1, присваиваем нейрону 14 признак "возбужден". Исключаем нейрон 6 из матрицы. Матрица принимает вид как на рис. 4.20.

    (рис 4.20) Шаг преобразования матрицы следования

    Выделяем множество столбцов, соответствующих входам матрицы, и так как в их совокупности нет строк, содержащих единицы, находим строку с максимальным количеством нулей. Эта строка соответствует нейрону выходного слоя Вых4. Меняем в ней нуль на единицу. Так как это - нейрон выходного слоя, не присваиваем ему признак "возбужден" и значение m. Исключаем нейрон 14 из рассмотрения. Матрица имеет вид как на рис. 4.21.

    (рис 4.21) Шаг преобразования матрицы следования

    В этой матрице множество "возбужденных" входов составляет единственный нейрон 3. Однако в его столбце нет ни единичных, ни нулевых элементов. Тогда, как и прежде, вводим в сеть дополнительную связь, найдя в столбце, соответствующем нейрону 3, первую сверху транзитивную связь и положив ее вес равным единице. Эта связь порождает динамический путь возбуждения 3 -> Вых4. Все изменения отражаем в матрице S.

    Построение трассы решения R4 закончено. Не приводя промежуточного вида матрицы S, дадим на рис. 4.22 вид сети, полученной после данного этапа трассировки.

    И, наконец, приступим к трассировке последнего пути возбуждения. Он осуществляется по обобщенному эталону, требующему решения R5, A2B1B2C1C2C3C4C5 -> R5. За решением R5 закреплен нейрон выходного слоя Вых5.

    На основе текущего вида матрицы S построим матрицу S5[B1, B2, A2, C1, C2, C3, C4, C5 -> Вых5], исключая из S "ненужные" строки и столбцы и сохраняя транзитивные связи. Затем нам придется исключить из рассмотрения нейрон 4, для которого количество единиц в строке меньше значения m4 = 4. Получившаяся матрица S5 представлена на рис. 4.23.

    (рис 4.22) Нейросеть после обучения четырем эталонам(рис 4.23) Матрица следования для обучения пятому эталону

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

    Исключаем из рассмотрения нейроны 5 и 7, так как в соответствующих им строках отсутствуют единицы при отличных от нуля значениях m. Однако видно, что после их исключения придется исключить по той же причине нейроны 12 и 13. Получившаяся матрица представлена на рис. 4.24.

    (рис 4.24) Шаг преобразования матрицы следования

    Исключаем из рассмотрения "невозбужденный" вход, соответствующий нейрону 8. Выделяем столбцы, соответствующие "возбужденным" входам, и в их совокупности находим строку, содержащую наибольшее число единиц при отсутствии единиц в других столбцах. Такая строка соответствует нейрону 14. Исключаем из рассмотрения нейрон 6 как передавший свое возбуждение нейрону 14, присваиваем нейрону 14 признак "возбужден". Матрица S5 принимает вид как на рис. 4.25.

    (рис 4.25) Шаг преобразования матрицы следования

    Выделяем столбцы входов, соответствующие "возбужденным" нейронам, и в их совокупности находим строку, содержащую максимальное число нулей (строк с единицами больше нет). Такая строка соответствует нейрону выходного слоя Вых5. Меняем нули на единицы. Исключаем нейроны В1 и 14 из рассмотрения. Отражаем введенные изменения в матрице S. Новый вид матрицы S5 приведен на рис. 4.26.

    (рис 4.26) Шаг преобразования матрицы следования

    Выделяем множество столбцов, соответствующих входам матрицы. В этих столбцах не находим ни строк, содержащих единицы, ни строк, содержащих нули. Тогда в каждом столбце заносим единицы на места транзитивных связей, то есть вводим связи В2 -> Вых5 и А2 -> Вых5, а веса этих связей полагаем равными единице.

    Трассировка (обучение сети по обобщенным эталонам ) закончена. Окончательный ее вид представлен на рис. 4.27, где, напоминаем, веса, принявшие значение 1, соответствуют жирным стрелкам.

    (рис 4.27) Обученная нейросеть

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    4.3. Приведение нейросети после трассировки

    Зафиксируем передаточную функцию, например

    $$\begin{array}{l} V:= \sum_j \omega_j V_j \\ V_i := if\: V > h\: then \: V else \: 0\end{array}$$

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

    Рассмотренный выше пример нехарактерен. В нем каждый эталон приводил, при данной передаточной функции, к одинаковой величине возбуждения нейронов выходного слоя. Но, например, при распознавании знаков алфавита величины возбуждения нейронов выходного слоя, в ответ на предъявление различных эталонов, могут быть различными. Так, в первом примере лекции 2 для записи буквы О потребовалось возбуждение шести нейронов-рецепторов, а для записи буквы А – восьми рецепторов. Очевидно, эталон латинской I "засветит" на входном слое (на клетчатке) меньшее число нейронов, чем, скажем, буква Q, но значительно большее число, чем необходимо для записи запятой. Значит, при рассматриваемых простейших видах передаточной функции величины возбуждения на выходе будут существенно различаться.

    Тогда закрадывается подозрение: а не приведет ли некоторое незначительное искажение ситуации А, логично требующее все же решения RA, в сторону ситуации В, то есть принятия решения RB?

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

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

    $$k_j = \frac{U_j}{V_j}.$$

    Однако значение Vj находим не по обобщенному эталону, а по каждой конкретной ситуации, входящей в состав обобщенного эталона. Например, ситуация {A1, B1, C1} образует реальный эталон в составе обобщенного эталона {A1, B1, C1, C2, C3, C4, C5}. По нему (другие ситуации аналогичны) находится величина возбуждения VВых1 нейрона Вых1. Значит,

    $$k_{Вых1} = \frac{U}{ V_{Вых1}}$$

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

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

    Вернуться к учебному плану