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

       

"Железнодорожная рулетка"


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

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

Построение обученной нейросети. Рассмотрим увлекательную детскую игру - "железнодорожную рулетку", - основанную на так хорошо знакомой вам задаче о встрече. Помните: "Из пунктов А и В навстречу друг другу…" и т.д.?


Рис. 9.1.  Железнодорожная рулетка

Начальник станции Кукуевка (старший) и начальник станции Пырловка одновременно выпускают навстречу друг другу два паровоза (рис. 9.1) со скоростью либо 60, либо 80 км/ч. Длина перегона составляет 4 км. Небольшой нюанс заключается в том, что пути перегона то сходятся в один, на протяжении одного километра, то расходятся. И тогда, в зависимости от точки встречи, со станции Кукуевка надо выслать на соответствующий километр либо линейного - даму с приветственным платочком, либо линейного с подстилочной соломкой.

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

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

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

Произведем предварительные расчеты, чтобы представить себе все варианты будущего поведения нашей системы принятия решений - для ее обучения. Представим (рис. 9.2) графически структуру логического функционирования создаваемой системы принятия решений.



  1. Кукуевский паровоз имеет скорость 60 км/ч (Событие А1). Пырловский паровоз имеет скорость 60 км/ч (Событие В1). Одновременное выполнение этих событий обозначим А1&В1. Тогда точка встречи находится как раз посредине перегона, что, скорее всего, требует помощи линейного с соломкой. Но возможно и везение за счет неточного определения скоростей. Тогда на всякий случай потребуется дама с платочком. Принимаемое решение, заключающееся в отправлении обоих линейных на границу второго и третьего километров, назовем решением R1. С ним связаны расходы на единовременное пособие М1.


    Рис. 9.2.  Система принятия решений

  2. Кукуевский паровоз имеет скорость 60 км/ч (Событие А1), но пырловский паровоз имеет скорость 80 км/ч (Событие В2). (Выполняется условие А1&В2.) Тогда их точка встречи находится на втором километре пути, и, следовательно, требует решения R2: "Отправить даму с платочком на второй километр!" В активе указанной дамы появляется сумма М2 условных единиц.
  3. Кукуевский паровоз имеет скорость 80 км/ч (Событие А2), пырловский паровоз имеет скорость 60 км/ч (Событие В1). (Выполняется условие А2&В1.) Тогда их точка встречи находится на третьем километре пути, что требует сочувственного вмешательства линейного с соломкой (решение R3), с оплатой труда в М3 условных единиц.
  4. Кукуевский и пырловский паровозы имеют скорость 80 км/ч (Событие А2&В2), что ввиду высокой скорости перемещения линейных требует решения R4 с затратами М4.




А теперь оживим эту структуру, заставим ее действовать, как, по-видимому, на логическом уровне действуют структуры нашего мозга.

Представим себе, что на месте каждого овала (потом - кружочка, на рис. 9.2 справа) действует нейроподобный элемент (просто нейрон). Нейроны входного слоя - рецепторы - приходят в возбужденное состояние (подобно сетчатке глаза) в соответствии с той ситуацией, которую мы задаем на входе системы. Например, мы хотим испытать ситуацию А1&В2. Тогда мы полагаем величины возбуждения нейронов А1 и В2 равными единице и записываем VA1 = VB2 = 1. При этом мы не забываем позаботиться о том, чтобы величины возбуждений нейронов А2 и В1 остались равными нулю.

Подчеркнем тот факт, что возбуждение нейронов-рецепторов осуществляется в результате ввода информации.

Для других нейронов, "принимающих" возбуждение в соответствии со стрелками, введем передаточную функцию, в результате выполнения которой формируется величина V возбуждения каждого нейрона. Для нашего случая, недолго думая (ибо существует большой произвол в выборе вида передаточной функции, на любой вкус), определим вид такой функции:



где i - индекс нейрона, "передающего" свое возбуждение данному нейрону, h - порог.

(Напомним: функция ?(x) заменяет отрицательную величину нулем, т.е.



В нашем случае стрелки со всей определенностью указывают направление передачи возбуждений.

Положим h = 1 и рассчитаем величины возбуждения нейронов выходного слоя R1-R4 для ситуации А1&В2:



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



Например, в результате искажения информации начальник станции Кукуевка принял решение считать скорость пырловского паровоза равной не то 60, не то 80 км/ч. Но скорее всего - 60! И подойдя к компьютеру, он по наитию набирает: А1 = 1, В1 = 0,7, В2 = 0,4. На какую ситуацию это указывает, и какое решение наиболее правильно? Считаем:



Мы видим, что максимальной величины возбуждения достиг нейрон R1, определивший главное решение. Но мы вправе учесть и решение R2 с меньшим приоритетом, дав даме с платочком дополнительные указания. И в этом проявится наша мудрость. По известной формуле мы можем оценить математическое ожидание того, на сколько облегчится карман начальника Кукуевской станции:



Мы очень просто сформировали уже обученную нейросеть. Однако критический взгляд читателя замечает явные "проколы" и выражает недоумение. Ведь ранее мы говорили о большем! Что ж, подойдем к этому постепенно…

А что, если бы мы захотели объединить решения R1 и R4, отличающиеся (для нас) только скоростью передвижения линейных? Следуя тому же принципу формирования, мы получили бы сеть как на рис. 9.3.


Рис. 9.3.  Непригодность однослойной нейросети

Легко видеть, что решение R1 максимально возбуждается всегда, когда мы задаем ситуацию, требующую той же величины максимального возбуждения только лишь нейронов R2 и R3. Сеть как бы дает "побочный эффект". Необходим дополнительный инструктаж пользователя. Он заключается в том, что если максимально и одинаково возбудились два нейрона выходного слоя и один из них R1, то "верить" надо второму. Если максимально возбудился только нейрон R1, то он и выдает правильное решение.

В данном случае произошла коллизия при огульной замене операций конъюнкции
и дизъюнкции
одной операцией &. Ведь логический предикат возбуждения решения R1 выглядит как





Именно это и наводит на предположение (гипотезу) о минимальной длине статической цепочки, которая рассматривается в разделе 1.9.


По-видимому, нейросеть будет работать правильно, если ее структура полностью воспроизведет структуру указанного логического выражения. Но для этого нейросеть должна быть двухслойной! Более того, глубокий анализ показывает, что обобщенный эталон А1, А2, В1, В2, приводящий к одному решению (R1), поглотил обобщенные эталоны (например, А1, В2), приводящие к другому решению. О какой же однозначности выводов можно говорить!

Тогда легко восстановить справедливость, построив (обученную!) нейросеть так, как показано на рис. 9.4, введя в рассмотрение т.н. "скрытые" нейроны 1 и 2.


Рис. 9.4.  "Правильная" обученная нейросеть

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

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



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



И вот весь фокус в построении и в обучении нейросети заключается в том, что синапсические веса регулируются, обусловливая пути прохождения возбуждений в сети!

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

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

Итак, по сошедшему вдохновению мы нарисовали некоторый ориентированный ациклический граф (рис. 9.5) и намерены вложить в него смысл нейросети, поставив в соответствие его вершинам-нейронам (кроме предполагаемых рецепторов) все ту же передаточную функцию.


Рис. 9.5.  Нейросеть, предложенная для обучения

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

Продемонстрируем алгоритм трассировки, введя, по сравнению с рассмотренным в лекции 4, некоторые упрощения.

Компьютерная обработка нейросети значительно упрощается, если сеть представлена матрицей следования S (рис. 9.6), где наличие связи обозначается ее весом.




Рис. 9.6.  Матрица следования



  1. Произведем трассировку возбуждений нейронов {A1, B1}
    R1.

    Исключим из матрицы S строки и столбцы, соответствующие не интересующим нас нейронам входного и выходного слоев. Матрица примет вид S1 на рис. 9.7.


    Рис. 9.7.  Матрица следования для трассировки первого решения

    Моделируем прохождение возбуждения следующим образом.

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


    Рис. 9.8.  Шаг преобразования матрицы следования

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


    Рис. 9.9.  Шаг преобразования матрицы следования

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

    Не приводя промежуточного рисунка, отметим, что мы подтвердили высоким весом (единичным) связи А1
    1, В1
    1, 1
    R1.



  2. Произведем трассировку {A1, B2}
    R2.

    Сформируем матрицу S2, исключив из рассмотрения нейроны A2, B1, R1, R3, R4 (рис. 9.10).




    Рис. 9.10.  Матрица следования для трассировки второго решения

    Строка, соответствующая нейрону 1, содержит одну единицу при том, что т1 = 2. Исключаем из рассмотрения и этот нейрон, как не годный к переиспользованию. Матрица S2 принимает вид как на рис. 9.11.


    Рис. 9.11.  Шаг преобразования матрицы следования

    (Для краткости изложения мы не рассматриваем транзитивные связи, легко вводящиеся в матрицу следования. Тогда мы могли бы исключить из рассмотрения нейрон 3, так как нет связи 3
    R2.)

    Присваиваем строкам, соответствующим входам матрицы S2, признак "возбужден". Находим в совокупности соответствующих им столбцов строку, содержащую максимальное число нулей. Это строка, соответствующая нейрону 2. Заменяем в ней нули единицами, что отмечаем в матрице S. Полагаем т2 = 2. Присваиваем нейрону 2 признак "возбужден", а нейроны А1 и В2 исключаем из рассмотрения. Среди оставшихся строк оказывается "пустая" строка, которая соответствуюет нейрону 3, не обладающему признаком "возбужден". Исключаем и ее, вместе с соответствующим столбцом. Матрица S2 принимает вид как на рис. 9.12.


    Рис. 9.12.  Шаг преобразования матрицы следования

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

    Таким образом, в результате трассировки на данном шаге сложились связи с единичными весами A1
    2, B2
    2, 2
    R2.

  3. Повторив схему построений, легко найдем связи с единичными весами A2
    3, B1
    3, 3
    R3, в результате трассировки {A2, B1}
    R3.


  4. А вот трассировка последнего пути возбуждения, {A2, B2}
    R4, преподносит сюрприз, следующий из "слоистости" сети. (Сравните с сетью на рис. 9.4, где в этом смысле допустимы связи через слой.)

    Сформируем матрицу S4, свободную от представительства тех нейронов, в строках которых число единиц меньше соответствующего значения т. Такая матрица показана на рис. 9.13. Но ведь никаких связей в ней нет вообще!




    Рис. 9.13.  Матрица следования для трассировки четвертого решения

    Придется их ввести, да еще с единичными весами. Ведь мы готовы создавать нужную нам сеть, а не обязаны приспосабливаться. Да и что мы можем сделать - только отвергнуть эту сеть и искать новую? Мы видим, что больше трех эталонов эта сеть все равно не способна воспринять. Таким образом, мы вводим дополнительные связи с единичными весами A2
    R4, B2
    R4.

    Окончательно обученная сеть представлена на рис. 9.14, где выделены связи с единичными весами. (Другие "проводочки" мы могли бы перекусить.)




Рис. 9.14.  Обученная нейросеть

Но радоваться рано. Посчитаем с помощью нашей передаточной функции величины возбуждения нейронов для, например, ситуации A1&B2: V1 = 0, V2 = 1, V3 = 0, VR1 = 0, VR2 = 0, VR3 = 0, VR4 = 0. Ни один нейрон выходного слоя не возбудился! То же - для ситуаций A1&B1 и A2&B1. Рассчитаем ситуацию A2&B2: V1 = 0, V2 = 0, V3 = 0, VR1 = 0, VR2 = 0, VR3 = 0, VR4 = 1. Мы видим, что построенная нейросеть распознает единственную ситуацию.

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

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

Рекомендуем "хорошую" передаточную функцию, определяющую величину V возбуждения нейрона:



Рассчитайте и убедитесь, что, например, для h = 1 сеть правильно распознает все эталонные ситуации, обеспечивая равную величину возбуждения нейронов выходного слоя.Так, при ситуации A1&B1 получаем следующие величины возбуждения нейронов: V1 = 2, V2 = V3 = 0, VR1 = 2, VR2 = VR3 = VR4 = 0. Аналогично - для ситуаций A1&B2 и A2&B1. Для ситуации A2&B2 находим V1 = V2 = V3 = 0, VR1 = VR2 = VR3 = 0, VR4 = 2.

Сеть работает прекрасно, гарантируя правильность реакции на недостоверные ситуации, и позволяя находить среднее.

А главное, сколько прекрасных вариантов развития имеет игра, стимулируя наше предвидение! Например, что, если скорость паровозов - величина переменная и случайная, так же как и чередование и длина однопутных участков, и решение следует принимать и корректировать в динамике, в зависимости от длины пройденного пути и значения скорости? Что, если один машинист охвачен идеей суицида, а другой желает уклониться от столкновения? и т.д. (Бедные линейные!)


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