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

Логическое программирование нейронной сети

Показывать лекцию целиком

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

8.1. ПРОЛОГ-программа

Следуя различными путями дедуктивного и индуктивного мышления, осуществляя различные парадигмы обучения, человек стремился автоматизировать логику мышления, немыслимую без формализации. Продуктом этой деятельности явились такие языки логического вывода, как ЛИСП и ПРОЛОГ. Язык ПРОЛОГ следует считать венцом усилий по автоматизации логического вывода, эффективно описывающего, в частности, экспертные системы.

ПРОЛОГ представляет базу знаний как совокупность фактов и правил (вывода). Процедурная структура позволяет включать конструкции любых других алгоритмических языков. То есть он является логической надстройкой, сублимирующей лишь операции логического вывода. Формулируется цель логического вывода, и если она не противоречива, выявляются факты, из которых эта цель следует.

И сознавая, что Природа создала единственное средство мышления — мозг, мы снова и снова пристально раздумываем, как же реализовать то, что гениально воплощено в языке логического программирования ПРОЛОГ?

$$\dots$$ Представьте себе село, затерянное в далекой таежной глуши. Навечно изолированные от Большой Жизни, его обитатели долгими зимними вечерами, в перерывах благотворного интеллектуального напряжения игры "Тигра идет", в сумраке демократических потугов вооружившись мозолистыми кулаками, выясняют степень взаимного родства.

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

Рассмотрим упрощенную задачу в виде ПРОЛОГ-программы, содержащую все характерные элементы решения проблемы удовлетворения (сложной) цели на основе лишь фрагмента базы знаний (БЗ), содержащего факты и правила.

Фактыклозы (отдельные предикаты-высказывания принято называть клозами ), которые не содержат правых частей, правилаклозы, которые содержат правые части; одноименные факты и правила объединяются в процедуры.

База знаний

Процедура "мужчина":

мужчина (иван)

мужчина (василий)

мужчина (петр)

мужчина (федор)

мужчина (юрий)

Процедура "женщина":

женщина (марья)

женщина (ирина)

женщина (ольга)

женщина (елена)

Процедура "родитель":

родитель (марья, иван) (Читать: "Марья — родитель Ивана")

родитель (иван, елена)

родитель (марья, василий)

родитель (федор, марья)

родитель (петр, ирина)

родитель (петр, иван)

родитель (федор, юрий)

Процедура "мать":

мать (X, Y): — женщина (X), родитель (X, Y)

Процедура "отец":

отец (X, Y): — мужчина (X), родитель (X, Y)

Процедура "брат":

брат (X, Y): — мужчина (X), родитель (P,X), родитель (P, Y), X<>Y

Процедура "сестра":

сестра (X, Y): — женщина (X), родитель (P, X), родитель (P, Y), X<>Y

Процедура "дядя":

дядя (X,Y): — брат (X, P), родитель (P, Y)

Пусть задана некоторая сложная (т.е. опирающаяся не на факт, а требующая вывода) цель, с которой мы обратились в эту БЗ, например:

дядя (X, Y) (запись цели образует фрейм ),

и ее решение (вывод) заключается в нахождении всех пар переменных (имен объектов) X и Y, для которых справедливо утверждение " X является дядей Y ".

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

То есть для решения данной задачи необходимо действовать следующим образом.

Находим первый (а он и единственный) предикат цели дядя (X, Y) . Находим в БЗ процедуру с этим именем и заменяем найденный предикат правой частью этой процедуры. Получим трансформированную цельфрейм

брат (X, P), родитель (P, Y).

К первому предикату этого фрейма применяем аналогичные действия, получаем фрейм

мужчина (X), родитель (Q, X), родитель (Q, P), X<>P, родитель (P,Y)

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

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

родитель (Q, иван), родитель (Q, P), иван <>P, родитель (P,Y).

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

родитель (марья, Р), иван <> P, родитель (P, Y).

Вновь входим в процедуру "родитель" (третий уровень ветвления), находим клоз родитель (марья, иван) . Трансформируем цель — получаем новый фрейм:

иван <> иван, родитель (иван, Y).

Получаем противоречие, т.е. не проходит унификация.

Ищем на данном шаге ветвления другой вариант связывания, находим следующий клоз:

родитель (марья, василий).

Трансформируем цель:

иван <> василий, родитель (василий, Y) -> родитель (василий, Y).

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

Возвращаемся на шаг ветвления назад. (Реализуем стратегию поиска с ветвлением и возвращением назад — "backtraking".) На втором уровне ветвления пробуем клоз, в котором иван указан как сын: родитель (петр, иван) . Цель трансформируется в следующий фрейм:

родитель (петр, Р), иван <> P, родитель (P, Y).

Вновь (на третьем уровне ветвления) обращаемся к процедуре "родитель" и выбираем первый клоз, в котором петр указан как отец — родитель (петр, ирина).

Цель трансформируется:

иван <> ирина, родитель (ирина, Y) -> родитель (ирина, Y).

Входим в процедуру "родитель", но не находим там клоза, в котором ирина указана как родитель (не проходит унификация ).

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

Цель принимает вид фрейма

родитель (Q, василий), родитель (Q, P), василий <> Р, родитель (P, Y).

Теперь на втором уровне ветвления находим первый (и единственный) клоз, в котором василий указан как сын. Цель трансформируется в соответствии с новым связыванием переменных, обусловленным найденным клозом родитель (марья, василий):

родитель (марья, Р), василий <> P, родитель (P, Y).

На третьем уровне ветвления находим первый клоз, где марья — родитель: родитель (марья, иван). Связываем тем самым переменные, цель трансформируется

василий <> иван, родитель (иван, Y) -> родитель (иван, Y).

Находим в процедуре "родитель" первый клоз, в котором иван указан как родитель — родитель (иван, елена) . Цель выродилась, значит

дядя (X, Y) = дядя (василий, елена) — одно из решений задачи.

Продолжив перебор так, словно на данном шаге унификация не прошла, можно найти остальные решения: дядя (юрий, иван), дядя (юрий, василий).

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

Однако представляется, что нейросетевая технология, основанная на естественном параллелизме, может оказаться эффективной.

8.2. Нейросеть для решения задачи логического вывода

Рассмотрим предварительно один аспект обучения нейросети методом трассировки.

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

Впоследствии (лекции 5 и 6) мы заявили, что нас не смущает отсутствие некоторых связей в "готовых" сетях. Мы их введем как "проводочки", если сочтем это целесообразным.

Таким образом, несовершенство нейросети не стало для нас преградой. А если предположить, как при "схемотехническом" подходе, что первоначально в сети вообще никаких связей нет, ее матрица следования пуста, а нам предстоит создать эту сеть полностью? Логично, что в ней будут присутствовать только те связи, которые обеспечивают ее обучение. То есть мы сразу можем строить обученную нейросеть — нейросеть, синапсические связи в которой имеют единичный (максимальный) вес.

Составим (рис. 8.1) нейросеть, соответствующую фрагменту беспредельной базы знаний о жителях далекого таежного села.

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

Фактографическая нейросеть отражает факты, содержащиеся в БЗ. Понятийная нейросеть отражает правила вывода, оперируя понятиями – процедурами БЗ.

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

Сформируем начальный вид фактографической нейросети (рис. 8.1).

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

Для реализации правил построим понятийную нейросеть , фрагмент которой показан на рис. 8.2 .

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

Пусть задана та же сложная цель

дядя (X, Y).

Для нее необходимо сформировать все пары переменных X и Y, для которых справедливо утверждение "Х является дядей Y".

(рис 8.1) Начальный вид фактографической нейросети

Выберем следующую передаточную функцию:

Порог h подбирается экспериментально, в данном случае, кажется, целесообразно положить h = 0,4 .

(рис 8.2) Понятийная нейросеть

Чтобы максимально возбудить нейрон выходного слоя, ответственный за дядю, необходимо подать высокий сигнал возбуждения на рецепторы, передающие возбуждение этому нейрону, выполнив все варианты непротиворечивого связывания переменных X, Q, P, Y.

Таким образом, надо реализовать ту же схему перебора с возвратом, что была рассмотрена ранее, — схему backtracking 'а.

Проследим по шагам необходимые действия:

  • Полагаем Х = иван."
  • В процедуре Родитель находим Q = мария."
  • В той же процедуре находим Р = василий."
  • Однако, в той же процедуре не находим указаний на то, что Василий является чьим-то родителем."
  • Возвращаемся на шаг назад, пытаясь изменить связывание переменной Р, но не находим нового варианта связывания."
  • Возвращаемся еще на шаг и т.д. – повторяем весь ход рассуждений, рассмотренных в подразделе 8.1 ."
  • После нахождения пары (василий, елена) следует развить фактографическую сеть, дополнив ее выходной слой нейроном в соответствии с понятием дядя и установив связи с ним от василия и елены.

    Это может быть сделано двумя способами.

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

    Как работать с этой сетью?

    (рис 8.3) База Знаний Антрополога–Исследователя

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

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

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

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

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

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

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

    Но мы ловим себя на лукавом мудрствовании $$\dots$$ "Зачем так сложно?" — спросит рядовой гражданин, к каковому следует отнести жителя далекого села. — "Какое мне дело до намеков твоих? Ты давай напрямик, факты давай!.."

    Действительно, зачем нам знать и делать вывод о том, что Юрий — дядя Ивана, потому что он — брат Марьи? Мы можем эти два факта задать независимо, предварительно рассчитав по понятийной нейросети.

    Тогда фрагмент БЗ, которую мы назвали Базой Знаний Участкового Уполномоченного, представлен на рис. 8.4, и мы можем вздохнуть облегченно!

    И не надо никакой коры! Строго, по-военному и как в анкете: посылка — следствие! Не надо сомнений, размышлений, ревизий и прочего вольнодумствия!

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

    (рис 8.4) База Знаний Участкового Уполномоченного

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

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

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

    Тогда нейросеть обретает возможность широкого развития. Ведь если население села пополнилось родившимся младенцем, то правильность построенного правила (гипотезы) может быть успешно проверена!

    $$\dots$$ Да, мы вправе выбирать способ мышления как принцип жизни — для ее облегчения $$\dots$$

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