МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПЕНЗА 2007

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА
Методические указания
к выполнению лабораторных работ
ПЕНЗА 2007
Даны указания к выполнению лабораторных работ по курсу «Системы
искусственного интеллекта» по следующей тематике: разработка экспертных
систем в среде Visual Prolog и на языке CLIPS, системы естественноязыкового общения, нейронные сети, обучение нейронной сети выполнению
заданной операции, разработка программы распознавания изображений с
использованием нейронных сетей.
Методические
указания
подготовлены
на
кафедре
«Системы
автоматизированного проектирования» и предназначены для студентов
специальности 010503 (351500).
Ил. 16, табл. 1, библиогр. 10 назв.
Составитель: Гудков П.А.
Рецензент: кандидат технических наук, доцент кафедры «Вычислительные
машины и системы» ПГТА Бершадская Е.Г.
2
Лабораторная работа №1
РАЗРАБОТКА ЭКСПЕРТНОЙ СИСТЕМЫ
В СРЕДЕ VISUAL PROLOG
Цель
работы:
искусственного
ознакомиться
интеллекта.
с
Изучить
примерами
прикладных
основные принципы
систем
разработки
экспертных систем в среде Visual Prolog. Создать на основе примера свою
экспертную систему применительно к выбранной предметной области.
Общие сведения
Экспертные системы (ЭС) – это системы искусственного интеллекта
(интеллектуальные
системы),
предназначенные
для
решения
плохоформализованных и слабоструктурированных задач в определенных
проблемных областях на основе заложенных в них знаний специалистовэкспертов. В настоящее время ЭС внедряются в различные виды
человеческой деятельности, где использование точных математических
методов и моделей затруднительно или вообще невозможно. К ним
относятся: медицина, обучение, поддержка принятия решений и управление
в сложных ситуациях, различные деловые приложения и т.д.
Основными компонентами ЭС являются рабочая память, называемая
также базой данных (БД), база знаний (БЗ), блоки поиска решения,
объяснения, извлечения и накопления знаний, обучения и организации
взаимодействия с пользователем. Рабочая память, БЗ и блок поиска решений
образуют ядро ЭС.
База данных (рабочая память) предназначена для хранения исходных и
промежуточных данных решаемой в текущий момент задачи. Этот термин
совпадает по названию, но не по смыслу с термином, используемым в
информационно-поисковых системах (ИПС) и системах управления базами
данных (СУБД) для обозначения всех данных (в первую очередь
долгосрочных), хранимых в системе.
3
База знаний в ЭС предназначена для хранения долгосрочных данных,
описывающих рассматриваемую предметную область (а не текущих данных),
и правил, описывающих целесообразные преобразования данных этой
области.
Для конструирования ЭС используются различные инструментальные
средства: универсальные языки программирования, языки искусственного
интеллекта, инструментальные системы и среды и системы-оболочки.
Системы-оболочки являются наиболее простым средством формализации
(автоформализации) экспертных знаний, практически не требующие участия
посредников в лице инженера по знаниям или программиста при их
использовании. Инженер по знаниям только помогает эксперту выбрать
наиболее подходящую для его проблемной области оболочку.
Рассматриваемая в данной работе экспертная система функционирует
следующим образом. Например, при работе с предметной областью «Бытовая
техника»,
определяется
предикат
technique_is(string),
позволяющий
идентифицировать бытовую технику, которая более всего удовлетворяет
указанным пользователем признакам. При этом БЗ экспертной системы
задается перечислением свойств объектов, которые у них имеются или же
отсутствуют:
technique_is("CD-плейер"):it_is("аудио"),
positive("работает с","CD-дисками"),
negative("имеет","динамик").
Предикаты positive и negative необходимы для того, чтобы запросить у
пользователя ответ о наличии у объекта какого-то свойства и сохранить этот
ответ в рабочей памяти:
positive(X,Y):xpositive(X,Y),!.
positive(X,Y):not(xnegative(X,Y)),
ask(X,Y,Answer),
remember(X,Y,Answer),
Answer = yes.
negative(X,Y):4
xnegative(X,Y),!.
negative(X,Y):not(xpositive(X,Y)),
ask(X,Y,Answer),
remember(X,Y,Answer),
Answer = no.
ask(X,Y,yes):write(X," ",Y,"? "),
readln(Reply),
frontchar(Reply,'y',_),!.
ask(_,_,no).
remember(X,Y,yes):assertz(xpositive(X,Y)).
remember(X,Y,no):assertz(xnegative(X,Y)).
Порядок выполнения работы
1. Изучить пример экспертной системы (файл ch16e01.pro).
2. Разработать на основе изученного примера экспертную систему для
требуемой предметной области согласно заданию.
3. Получить распечатки примеров работы программы.
4. Оформить отчет.
Содержание отчета
1. Вариант задания, включающий описание предметной области.
2. Исходный текст разработанной программы.
3. Графическое представление алгоритма работы программы.
4. Распечатки экрана с результатами работы программы.
5. Выводы по работе.
Контрольные вопросы
1. Основные компоненты экспертной системы.
2. Для чего необходимы БД и БЗ?
3. Каков алгоритм работы созданной системы?
Литература
5
1. Попов Э. В. Экспертные системы: Решение неформализованных задач
в диалоге с ЭВМ. – М.: Наука, 1987.
2. Уотермен Д. Руководство по экспертным системам. Пер. с англ. – М.:
Мир, 1989.
3. Гаврилова Т. А., Хорошевский В. Ф. Базы знаний интеллектуальных
систем. – СПб.: Питер, 2001.
4. Марселлус Д. Программирование экспертных систем на ТурбоПрологе:
пер. с англ. – М.: Финансы и статистика, 1994.
Лабораторная работа №2
СИСТЕМЫ ЕСТЕСТВЕННО-ЯЗЫКОВОГО ОБЩЕНИЯ
Цель работы: изучить возможности естественно-языкового интерфейса
(ЕЯИ) и получить практические навыки в реализации систем ЕЯИ.
Модифицировать пример GEOBASE в соответствии с заданной предметной
областью.
Общие сведения
Программа GEOBASE принимает запросы, сделанные на естественном
языке, если пользователь спрашивает о географии Соединенных Штатов. Эта
программа является базой данных, ведущей диалог на естественном языке, и
одним из первых примеров широкомасштабного применения технологии
естественного языка.
Структура GEOBASE основана на идее просмотра ключевых слов.
Фактически вместо ключевых слов программа ищет некие образцы более
высокого уровня, которые содержат информацию о специфике вопроса (т.е. о
том, что именно спрашивается) и о его форме. Эти образцы находятся
посредством передачи запросу шаблонов. Каждый образец имеет свою
структуру, встроенную в один из шаблонов. Когда шаблон совпадает с
образцом, производится анализ структуры вопроса.
6
Шаблон подобен вырезанной перфокарте с ячейками. Если он
налагается на соответствующую ему форму, ячейки заполняются полезной
информацией. Если же такого соответствия нет, ячейки либо заполняются
"мусором", либо остаются пустыми.
Каждый
шаблон
является
правилом
Пролога,
и
процесс
отождествления на этом языке соответствует физическому наложению
реального шаблона на печатную форму. Если правило не срабатывает,
значит, шаблон не был использован с той формой (типом вопроса), для
которой он был создан. Срабатывание правила свидетельствует о том, что
форма вопроса понятна, так как каждое правило соответствует только
одному типу вопроса. Аргументы, экземпляры которых создаются в этих
правилах, эквивалентны ячейкам, заполняемым в настоящем шаблоне, и
точно определяют смысл вопроса.
Вся операция выполнения запроса в GEOBASE может быть разбита на
три части:
1. Синтаксический
анализ
–
программа
выясняет,
что
именно
пользователь хочет узнать посредством нахождения и заполнения
шаблона, который соответствует вопросу.
2. Создание подходящего запроса с использованием свойства Пролога
комбинировать образцы.
3. Выбор данных по этому запросу с помощью средств Пролога как
обработчика базы данных.
Система GEOBASE содержит следующую информацию:
· Данные о штатах: общая площадь; численность населения; столица;
штаты, граничащие с данным; реки; города; самая высокая и низкая
географические точки.
· Данные о реках: длина реки.
· Данные о городах: численность населения.
7
Пользователь может осуществлять выборку всей информации или ее
части путем постановки правильно сформулированных вопросов на
естественном языке. Приведем несколько примеров запросов, которые
система GEOBASE может обработать:
· Штаты (states)
· Перечислить города в Калифорнии (give me the cities in California)
· Какой самый большой город в Калифорнии? (what is the biggest city in
California?)
· Какова самая длинная река в США? (what is the longest river in the
USA?)
· Какие реки имеют длину более 1000 км? (which rivers are longer than 1
thousand kilometers?)
· Каково название штата с наименьшей географической высотой? (what
is the name of the state with the lowest point?)
· С какими штатами граничит Алабама? (which states border Alabama?)
· Какие реки не протекают через Техас? (which rivers do not run through
Texas?)
· Какие реки протекают через штаты, граничащие со штатом, столицей
которого является Остин? (which rivers run through states that border the
state with the capital Austin?)
В основу организации базы данных, где хранится географическая
информация, положены семь типов главных фактов. Любой факт или любое
отношение обычно имеет множество аргументов, и существует множество
экземпляров каждого факта. Главные факты: штат, город, река, граница, гора,
дорога, озеро. Пример одного из фактов о штатах:
state("washington","wa","olympia",41.132e6,68.139e3,42,
"seattle","spokane","tacoma","bellevue")
8
Вся информация, относящаяся к штату, компонуется в этот один факт
со
многими
аргументами.
Города,
указанные
в
конце,
являются
крупнейшими по численности населения.
Факт по городу выглядит следующим образом:
city("california","ca","san francisco",678974)
Другие географически значимые факты – реки, озера и горы:
river("rio grande",3033,["colorado","new mexico","texas"])
lake("ontario",19684,["new york"])
mountain("alaska","ak","browne tower",4429)
В этих фактах используются списки, если имеется переменное число
вхождений сущностей, присоединяющихся к объекту, который описывает
факт, например штаты, границы которых проходят по реке или озеру.
Имеется и факт, используемый для установления самых высоких и
самых низких географических точек в каждом штате:
highlow("wisconsin","wi","timms hill",595,"lake michigan",177)
Граница является предикатом, который задает для каждого штата
список граничащих с ним штатов:
border("alabama","al",["tennessee","georgia","florida",
"mississippi"])
Наконец, имеются факты о важнейших дорогах. Благодаря этому
отношению номер маршрута ассоциируется со списком штатов, через
которые проходит данная дорога.
road("15",["montana","idaho","utah","arizona","nevada",
"california"])
Пользователь делает запрос, который программа преобразует в список
символов. Первый большой модуль осуществляет операцию фильтрования,
устраняя из этого списка посторонние (лишние) для данного вопроса
лексемы. Для этого система использует предикат filter. Он также удаляет
лишние грамматические элементы, такие, как запятые, точки и кавычки.
Отфильтрованный список слов обрабатывается программой, которая
называется синтаксическим анализатором. Именно она выполняет просмотр
9
и поиск шаблонов. Программа синтаксического анализа должна установить
основные связи, составляющие сущность вопроса. Она должна также
определить другие виды структурной информации в вопросе, которые
позволяют использовать основные связи для сбора данных с целью
получения ответа на вопрос. В результате этого процесса получается шаблон
с
реализованными
(конкретизированными)
аргументами.
Шаблон
представляет собой единичный сложный объект данных, который передается
на следующую стадию обработки.
Фактически
шаблон
является
нормализированной
формой
первоначального запроса. Структура была воспринята правильно, а лишняя
или случайная информация игнорировалась. После преобразования вопроса в
эту форму синтаксическим анализатором система использует функцию под
названием eval для получения доступа к базе данных и выдаче ответов.
Для каждой связи, которая представляется важной для получения
ответа на вопрос, существует низкоуровневая функция доступа, которая
заново комбинирует информацию в базе данных, чтобы программа могла
быть написана так, как будто эта связь присутствует в явной форме.
Например, если нам нужно узнать названия рек длиной более 1000 км, в базе
данных необходимо иметь подобные факты:
length-of-river(columbia,453).
length-of-river(hudson,257).
Для экономии низкоуровневые функции доступа написаны так, что для
программы данные как будто существуют в такой форме в момент, когда
программа фактически обращается к ним, хотя на самом деле они хранятся в
другой, более компактной форме. Единственные явные данные по рекам,
которыми располагает GEOBASE, хранятся в форме
river("columbia",1953,["washington","oregon"]).
Всякий раз при вызове функции eval она генерирует один возможный
ответ. Шаблон, ассоциированный с начальным запросом, используется для
управления процессом. Эта функция применяется в предложении findall для
10
того, чтобы все ответы могли быть собраны вместе в случае, если вопрос
допускает несколько вариантов ответов. Остальные части предиката удаляют
избыточные данные на выходе, затем компонуют его и распечатывают
выходные данные.
На рис. 2.1 показана блок-схема с основными информационными
потоками в системе.
Начало
Получение запроса
Фильтр
Синтаксический
анализатор
Процессор запросов
Низкоуровневые
функции реляционного
доступа
Неформализованная форма
вопроса, содержащая связи и
информацию о его структуре
Компоновка
Ответ
Конкретизация
связей
Рис. 2.1. Информационные потоки в программе GEOBASE
В схематической форме код для высокоуровневого функционирования
программы будет выглядеть следующим образом:
loop:write("Query: "),readln(STR),STR >< "",
scan(STR,LIST),
% Возвращает список символов
filter(LIST,LIST1),
% Удаляет знаки пунктуации и
посторонние символы
pars(LIST1,E,Q),
% Обрабатывает запрос
findall(A,eval(Q,A),L),
unik(L,L1),
% Удаляет повторяющиеся объекты
(например, Найти реки штатов,
граничащих с Техасом)
write_list(0,L1),
write_unit(E),listlen(L1,N),
write_solutions(N), !, loop.
loop.
11
Ядро
программы
содержится
в
подпрограммах
pars
и
eval.
Синтаксический анализатор pars имеет три аргумента:
pars(Data, E, Q)
Первый аргумент – входная переменная, содержащая отфильтрованный
запрос. Заполненный шаблон, получаемый в результате синтаксического
анализа, связывается с выходной переменной Q, являющейся третьим
аргументом. Второй аргумент не столь важен, и мы не будем его
рассматривать.
Пример 1. Запрос: Какие имеются города? (What cities do you have?)
К тому времени, когда запрос поступает на синтаксический анализ, в
нем уничтожены все лишние слова, и осталось лишь слово "cities" (города).
Это первый аргумент при вызове программы анализа pars. По завершении
выполнения программы выходным переменным будут присвоены следующие
значения:
E = "city"
Q = q_e("city")
Шаблон, который был определен, несложен. Он показывает тип
вопроса, в частности вопроса, где речь идет о сущностях (объектах) без их
уточнения. Аргумент означает, что задан вопрос о сущности (объекте) "city".
Пример 2. Запрос: Какова длина Гудзона? (How long is the Hudson?)
Данные, поступающие в подпрограмму анализа (pars), имеют форму
списка важных слов, а именно:
["long", "hudson"]
По завершении работы программа анализа возвращает такие значения
выходных переменных:
Е = "length"
Q = q_eaec("lengh","of","river","hudson").
Выбранный шаблон определяет вопрос как вопрос о сущности
("length"), об ассоциации ("of") и о другой сущности ("river"), а также
константу ("hudson"), с которой связаны вышеуказанные сущности и
12
ассоциации. Шаблон является нормализованной, внутренней формой данного
вопроса. Мы могли бы задать этот вопрос и другими способами, но в любом
случае результат, выдаваемый программой pars, был бы тем же. Например:
· Как велик Гудзон? (How big is Hudson?)
· Какова длина Гудзона? (What is the length of Hudson?)
Пример 3. Запрос: Какие реки не протекают через Техас? (What rivers
do not run through Texas?)
В этом случае ввод для программы анализа pars будет несколько более
сложным. Могут быть проигнорированы только два слова. Аргумент ввода
имеет вид:
["rivers","not","run","through","texac"]
Выход будет выглядеть следующим образом:
Е = "river"
Q = q_not("river",q_eaec("river","in","state","texas"))
Шаблон,
выбираемый
системой,
является
вложенной
формой,
включающей в себя более простой шаблон. Этот простой шаблон
иллюстрирует основную используемую связь, а шаблон, в состав которого он
входит, показывает, как использовать эту связь для генерации ответов.
Очевидно, мы получим список рек, и каждая река посредством подзапроса
будет проверена на то, протекает ли она действительно в штате Техас.
Отрицательный ответ окажется ответом на первоначальный запрос.
Пример 4. Запрос: Какой самый большой город в штате Вашингтон?
(What is the largest city in Washington?)
Входной аргумент:
["largest","city","in","washington"]
Программа анализа pars установит, что речь идет о городах, но будет
рассматривать форму нормализированного запроса:
Е = "city"
Q = q_max("city",q_eaec("city","in","state","washington"))
13
Здесь также выбираются вложенные шаблоны. Внутренний шаблон
определяет базовую связь, а внешний выражает способ использования этой
связи для генерации ответов.
Имеется два предиката, служащие низкоуровневыми функциями
доступа к базе данных. Обработка на более высоких уровнях происходит с
помощью
этих
функций
и
никогда
не
затрагивает
базу
данных
непосредственно.
Система обладает знаниями о некоторых низкоуровневых сущностях
(объектах): река, город, штат, дорога, озеро и т.п. Функция доступа к
сущности (ent) берет тип объекта в качестве своего первого параметра и
возвращает во втором параметре одно значение, которое эта сущность может
принять. Например, если тип объекта город (city), то последовательные
вызовы ent дадут следующую информацию:
ent(city,albuquerque)
ent(city,arlington)
ent(city,austin)
Это не факты, а правила, и именно они позволяют программе работать
таким образом, как будто она имеет отдельные списки типов объектов,
которые важны для ее функционирования и прежде всего для того, чтобы все
данные имели одинаковую форму.
Правила сущностей выглядят следующим образом:
ent(city,NAME):city(_,_,NAME,_).
ent(state,NAME):state(NAME,_,_,_,_,_,_,_,_,_).
и т.д.
Аналогично тому, как ent может сгенерировать все экземпляры
определенного типа объекта, имеется еще одна схожая функция, db, которая
также может сгенерировать все экземпляры определенного типа связи. Связь
состоит из двух объектов, соединенных другим словом, определяющим эту
связь. Например:
штат с рекой
14
db(state,with,river,STATE,RIVER):river(RIVER,_,LIST),
member(STATE,LIST).
дорога в штате
db(road,in,state,ROAD,STATE):road(ROAD,LIST),
member(STATE,LIST).
Для каждой связи, известной системе, существует отдельное правило
(подобное приведенному). Когда функция доступа к данным о дороге в штате
применяется последовательно, она возвращает такую информацию:
db(road,in,state,1,new york)
db(road,in,state,17,new york)
db(road,in,state,80,new york)
Информация о дорогах в определенных штатах выбирается следующим
образом:
db(road,in,state,ROAD,STATE):road(ROAD,LIST),
member(STATE,LIST).
Каждый раз, когда возвращается предикат road (дорога), выдается
номер дороги и список штатов, через которые она проходит. Предикат
member затем проверяет, входит ли название штата из запроса db в данный
список. Если это так, правило выполняется.
После того как стандартная форма запроса, представленная шаблоном,
установлена программой анализа pars, вызывается подпрограмма eval. Она
имеет два аргумента, первый из которых является заполненным шаблоном,
второй – ответом. Например, предположим, что задан вопрос:
Какова длина Гудзона? (How long is the Hudson?)
Когда синтаксический анализ будет выполнен, вступит в действие
подпрограмма eval:
eval(q_eaec("length","of","river","hudson"),ANSWER)
Далее eval завершит свою работу, и аргумент ANSWER будет связан
следующим образом:
eval(q_eaec("length","of","river","hudson"),257)
15
В некоторых ситуациях на запрос может быть выдано несколько
ответов, что обеспечивается главной программой путем вложения eval в
предложение findall, которое собирает все ответы в список:
findall(A,eval(Q,A),L), где L – список ответов.
Эта функция должна быть определена с помощью ряда правил. Для
наглядности поясним их на тех же примерах, которые использовались при
демонстрации высокоуровневого функционирования подпрограммы анализа
(pars).
Пример 1. Запрос: Какие имеются города? (What cities do you have?)
Программа анализа преобразует этот вопрос в стандартную форму,
представленную заполненным шаблоном:
q_e("city")
Правило eval, запускаемое этим вводом, таково:
eval(q_e(E),ANS):ent(E,ANS).
Иными словами, мы можем вычислить выражение, если найдем в базе
данных что-нибудь наподобие
ent("city",ANS)
Эту задачу выполняет правило сущности (объекта), рассмотренное
выше. При каждом его запуске из базы данных извлекается название одного
города.
Пример 2. Запрос: Какова длина Гудзона? (How long is the Hudson?)
Ниже приводится правило eval, которое будет выполнено:
eval(q_eaec(E1,A,E2,C),ANS):db(E1,A,E2,ANS,C).
db является функцией доступа для получения связей, поэтому в базе
данных должно иметься что-нибудь наподобие
db(length,of,river,ANS,C)
Большинство запросов требует обработки в правилах eval.
Пример вложенного запроса:
16
Какие реки не протекают через Техас? (What rivers do not run through
Texas?)
Программа анализа выдает стандартизированную форму запроса:
q_not("river",q_eaec("river","in","state","texas"))
В данном случае выполняется правило eval:
eval(q_not(E,TREE),ANS):findall(X,eval(TREE,X),L),
ent(E,ANS),
not(member(ANS,L)).
Переменная TREE связывается с целым вопросом q_eaec. Затем вопрос
подвергается оценке внутри предиката findall и выдается список всех рек в
Техасе. Предикат ent генерирует название реки всякий раз, когда вызывается.
Он используется в качестве пробного ответа. Последнее предложение
оценивает ответ и, если река принадлежит к списку рек, протекающих через
Техас, ее название игнорируется. В противном случае оно выдается как ответ
на запрос.
Это пример так называемой стратегии «генерации и проверки»,
применяемой для получения ответов на запросы. Она не сложна, но высокой
скорости выполнения запросов при большом количестве данных не
обеспечивает. В нашем случае скорость вполне приемлема.
Во всех приведенных примерах заполненные шаблоны управляют
доступом к базе данных неявно. Правила eval являются особым случаем, в
них учитываются знания по способам обработки определенных типов
вопросов. Все правила eval принимают шаблоны как аргументы. Шаблоны
представляют собой сложные объекты данных, имеющие свои собственные
аргументы (на более низком уровне). Это именно те аргументы, которые в
конечном итоге появляются в правой части правила eval, и они управляют
выборкой
данных.
Глобальная
архитектура
правила
eval
позволяет
определить, как из разрозненных "кусочков" в конце концов получается
ответ.
17
Порядок выполнения работы
1. Изучить пример системы, использующей ЕЯИ (GEOBASE).
2. Модифицировать систему для работы с требуемой предметной
областью согласно заданию.
3. Отладить программу.
4. Получить распечатки примеров работы программы.
5. Оформить отчет.
Содержание отчета
1. Вариант задания, включающий описание предметной области.
2. Исходный текст разработанной программы.
3. Распечатки экрана с результатами работы программы.
4. Выводы по работе.
Контрольные вопросы
1. Цель применения систем ЕЯИ.
2. Каков алгоритм работы программы GEOBASE?
3. Как происходит выборка информации из базы данных?
4. Для чего используется синтаксический анализатор?
Литература
1. Попов Э. В. Общение с ЭВМ на естественном языке. – М.: Наука, 1986.
2. Попов Э. В. Экспертные системы: Решение неформализованных задач
в диалоге с ЭВМ. – М.: Наука, 1987.
3. Марселлус Д. Программирование экспертных систем на ТурбоПрологе:
пер. с англ. – М.: Финансы и статистика, 1994.
18
Лабораторная работа №3
РАЗРАБОТКА ЭКСПЕРТНОЙ СИСТЕМЫ НА ЯЗЫКЕ CLIPS
Цель работы: ознакомиться с особенностями языка CLIPS, получить
практические навыки разработки экспертных систем, основанных на
использовании продукционной модели представления знаний.
Общие сведения
CLIPS
располагает
тремя
механизмами
представления
знаний:
процедурным, эвристическим и объектно-ориентированным. Рассмотрим
первые два механизма.
Процедурный
механизм
позволяет
пользователю
при
помощи
встроенных в язык функций разрабатывать или конструировать новые
функции, выполняющие некоторые действия или возвращающие какие-либо
значения. В этом смысле CLIPS напоминает такие известные языки
программирования,
как
С,
С++
или
Pascal.
Так,
для
создания
пользовательских функций используется конструктор deffunction, имеющий
следующий синтаксис:
(deffunction имя_функции
[необязательный комментарий]
(список формальных параметров)
(действие_1)
(действие_2)
......
(действие_N))
Например, определим функцию om(x,y), которая возвращает целую
часть частного от деления переменной y на переменную x:
(deffunction om
( ?x ?y)
(div ?y ?x))
Обратите внимание на то, что в CLIPS имя переменной начинается с
символа “ ? “, и что для вызова функции (в данном случае – встроенной
функции деления нацело div) используется префиксная нотация, а также на
19
то, что вся конструкция представляет собой список, состоящий из четырех
полей. Этим CLIPS похож не только на С, но и на LISP.
Эвристический механизм представления знаний в CLIPS реализуется
при помощи правил в форме
ЕСЛИ условие_1 и ... и условие_N выполняются,
ТО
ВЫПОЛНИТЬ действие_1 и ... и действие_N.
Список условий называется левой частью правила (Left-Hand Side или
LHS). Список действий называется правой частью правила (Right-Hand Side
или RHS). Возможность применить конкретное правило определяется тем,
выполняются ли условия, которые сформулированы в его левой части.
Выполнение или невыполнение условий определяется в момент их
сопоставления с так называемыми фактами, которые образуют ни что иное,
как базу данных. В CLIPS такая база данных может представлять некоторую
предметную область, исходное или текущее состояние какой-либо проблемы,
может моделировать в пространстве или во времени поведение какой-либо
системы или любой сущности, которую можно описать посредством
множества записей в виде списков.
Существует несколько способов создания базы данных, один из них –
использование конструктора deffacts. Его синтаксис таков:
(deffacts имя_базы_данных
[необязательный комментарий]
(факт_1)
(факт_2)
.....
(факт_N))
Каждый факт в базе данных представляет собой запись в виде списка.
Список может содержать одно или несколько полей, принимающих
символьные либо числовые значения. Список также может быть пустым.
Если каждое условие в левой части правила находит себя среди фактов
– происходит активизация
правила и выполняются ВСЕ действия,
записанные в его правой части. В противном случае правило не
активизируется.
20
Работа
правила
очень
напоминает
условный
оператор
if-then,
присутствующий во многих процедурных языках программирования.
Принципиальная разница заключается в том, что оператор if-then выполнится
в любом случае, когда до него дойдет очередь в программе. Что касается
правила, то интерпретатор CLIPS еще “подумает”, выполнять его или нет.
Так, при старте программы, содержащей множество фактов и правил,
интерпретатор CLIPS запускает машину логического вывода, которая
выясняет, какие из правил можно активизировать. Это выполняется
циклически, причем каждый цикл состоит из трех шагов:
· сопоставление фактов и правил;
· выбор правила, подлежащего активизации;
· выполнение действий, предписанных правилом.
Таким образом, правила, взаимодействующие с базой данных в виде
фактов, вносят в нее функциональность и образуют вместе с ней базу знаний.
Для создания правила используется конструктор defrule, который имеет
следующий синтаксис:
(defrule имя_правила
[необязательный комментарий]
[необязательное объявление]
(условие_1)
(условие_2)
......
(условие_M)
=>
(действие_1)
(действие_2)
......
(действие_N))
Обратите внимание: левая часть правила отделяется от правой
комбинацией символов “=>”, а количество условий и действий в правиле в
общем случае не совпадает. Для пояснения вышесказанного рассмотрим
несколько примеров.
21
Пример 1
Рассмотрим предметную область, которая представляет участников
некоторой конференции, приехавших из разных городов. На подобных
мероприятиях все участники обычно проходят регистрацию. Пусть эта
процедура представляет собой ввод сведений об участниках в базу данных, в
которой на каждого участника выделяется одна запись (факт), состоящая из
списка с тремя полями. Пусть первое поле имеет символьное значение rep –
сокращение от representative (представитель). В общем случае это значение
может быть любым, а поле может отсутствовать. Во втором поле списка
хранится фамилия участника, а в третьем – город, из которого участник
прибыл. Содержимое фактов базы данных с именем rep может быть,
например, таким:
(deffacts rep
(rep Alejnov Odessa)
(rep Ladak Odessa)
(rep Slobodjanjuk Lvov)
(rep Klitka Lvov)
(rep Bojko Kiev)
(rep Pustovit Odessa)
(rep Spokojnij Odessa)
(rep Shamis Odessa)
(rep Lobovko Kiev)
(rep Zadorozhna Lvov)
(rep Javorskij Lvov))
Используя любой текстовый редактор, создадим и сохраним базу
данных в виде текстового ASCII-файла с именем, повторяющим имя базы
данных (то есть rep). Это позволяет легко редактировать данные, независимо
от каких-либо других программных модулей, добавляя новых участников или
удаляя выбывших.
После
окончания
конференции
организаторы
подводят
итоги,
определяя массу показателей. В частности, пусть требуется определить
количество представителей от каждого города. Алгоритм решения такой
задачи прост. Для каждого города задаем счетчик и последовательно
просматриваем списки в записях файла rep. Если в записи третье поле списка
22
имеет
значение
Kiev,
то
содержимое
соответствующего
счетчика
увеличиваем на единицу. Для других городов – аналогично. Программа на
языке CLIPS, реализующая указанный алгоритм, может быть, например,
такой:
(defglobal ?*odessa* = 0)
(defglobal ?*kiev* = 0)
(defglobal ?*lvov* = 0)
(defrule start
(initial-fact)
=>
(printout t crlf «REPRESENTATIVES» crlf)
(defrule odessa
(rep ? Odessa)
=>
(bind ?*odessa* (+ ?*odessa* 1)))
(defrule kiev
(rep ? Kiev)
=>
(bind ?*kiev* (+ ?*kiev* 1)))
(defrule lvov
(rep ? Lvov)
=>
(bind ?*lvov* (+ ?*lvov* 1)))
(defrule result
(declare (salience -1))
(initial-fact)
=>
(printout t «from Odessa: « ?*odessa* crlf)
(printout t «from Kiev: « ?*kiev* crlf)
(printout t «from Lvov: « ?*lvov* crlf))
В первых трех строках программы при помощи конструктора defglobal
объявляются три глобальные переменные: ?*odessa*, ?*kiev* и ?*lvov*. Эти
переменные являются счетчиками. В CLIPS переменная может быть и
локальной – но тогда она связывается только с тем правилом, в котором
объявляется.
Далее следует правило с именем start, левая часть которого
представляет собой запись (initial-fact). Так обозначается системный
начальный факт, который создается в рабочей памяти интерпретатора CLIPS
23
по команде (reset) до запуска программы на выполнение. Для чего он нужен?
Дело в том, что в CLIPS-программах распространенными правилами
являются такие, которые добавляют факты в базу данных, либо, наоборот,
удаляют их. Типичной является ситуация, когда при старте программы в базе
данных нет фактов, удовлетворяющих хотя бы одному правилу. В этом
случае программа ничего не выполнит. Для того чтобы начать вычисления и
используется системный начальный факт, который, независимо от фактов в
базе данных, активизирует некоторое правило, добавляющее такие факты,
которые, в свою очередь, активизируют правила, условия которых не
выполнялись в начальный момент.
В данной программе (initial-fact) запускает правило start, которое
активизируется независимо от фактов в файле rep и присутствует в
программе только с одной целью – вывести заголовок. Для этого в его правой
части вызывается встроенная функция printout с ключом t, выводящая на
стандартное устройство вывода (монитор) заголовок, заключенный в
кавычки. Комбинация символов crlf является аналогом endl в С++ и служит
для перевода курсора на следующую строку.
Следующие три правила с именами odessa, kiev и lvov можно назвать
ядром программы. В них производится подсчет количества участников –
соответственно, из Одессы, Киева и Львова.
Рассмотрим правило lvov. Оно активизируется в том случае, когда в
базе данных находится факт (rep ? Lvov). Не трудно догадаться, что символ
“ ? “ во втором поле этого списка означает символ универсальной
подстановки и заменяет собой любую фамилию. Отсюда следует, что
правило lvov активизируется столько раз, сколько раз факт (rep ? Lvov)
присутствует в базе данных. При этом столько же раз выполнятся действия,
содержащиеся в правой части правила. Встроенная функция bind – аналог
оператора присваивания. Следовательно, содержимое переменной ?*lvov*
увеличивается на единицу и результат сохраняется в этой же переменной.
Аналогично работают правила odessa и kiev.
24
Действия, которые выполняются в последнем правиле программы,
отражены в его названии. Правая часть правила особых комментариев не
требует, в то время как левая часть заслуживает подробного рассмотрения. В
CLIPS существует несколько стратегий очередности выполнения правил, а
сами правила могут иметь приоритет, который задается встроенной
функцией declare с параметром salience (особенность). Этот параметр может
принимать целочисленные значения от –10000 до +10000. По умолчанию для
всех правил величина salience равна нулю. Если в правиле result не указать
приоритет, оно будет конфликтовать с правилом start за очередность
выполнения, так как у этих правил одинаковая левая часть. Для устранения
конфликта в правиле result приоритет указан явно и со знаком минус, в связи
с чем это правило выполнится последним.
Используя любой текстовый редактор, наберем и сохраним текст
программы
в
расширением
ASCII-файле
.clp
и
с
со
именем
стандартным
represent.
для
Командой
CLIPS-программ
clips
вызовем
интерпретатор CLIPS, командой (load имя_файла) загрузим в интерпретатор
файлы rep и represent.clp, командами (reset) и (run) запустим программу
represent.clp на выполнение.
CLIPS (V6.21 06/15/03)
CLIPS> (load rep)
.........
TRUE
CLIPS> (load represent.clp)
.........
TRUE
CLIPS> (reset)
CLIPS> (run)
REPRESENTATIVES
from Odessa: 5
from Kiev: 2
from Lvov: 4
CLIPS>
Сообщение интерпретатора TRUE означает, что в файле нет
синтаксических
ошибок
и
команда
загрузки
выполнена
корректно.
25
Многоточием представлены другие сообщения интерпретатора, которые в
данном случае опущены.
Как следует из описанных действий, в интерпретаторе CLIPS находятся
два файла. Первый, с именем rep, является базой данных. Второй, с именем
represent.clp, содержит сведения (правила) о том, как эти данные могут быть
использованы. Таким образом, вместе файлы образуют базу знаний, которая
содержит, по крайней мере, два знания. Первое – общий состав участников
конференции. Его можно посмотреть, не выходя из интерпретатора по
команде (facts). Второе знание – количество участников от каждого города.
В рассмотренном примере база знаний состоит из двух программных
модулей.
Однако
ничто
не
мешает
использовать
одну программу,
сохраненную в одном файле. В следующем примере показано, как это
делается. В нем же эвристический механизм представления знаний
используется вместе с процедурным.
Пример 2
Пусть требуется подобрать резистор для участка цепи схемы
электрической принципиальной некоторого радиоэлектронного устройства.
Резистор
характеризуется
сопротивлением,
которое
определяется
по
измеренным или рассчитанным значениям электрического тока, проходящего
через резистор, и падению напряжения на нем. Программа с именем
resistor.clp, решающая эту задачу, может быть, например, такой
(deffacts
(resistor
(resistor
(resistor
resistors; база данных резисторов
Ra 2)
Rb 5)
Rc 7))
(deffunction om; функция om(x,y)
( ?x ?y)
(div ?y ?x))
(defrule input; начальное правило
(initial-fact)
=>
(printout t crlf “Input current value: “)
(bind ?i (read))
26
(printout t “Input strait value: “)
(bind ?u (read))
(assert (numbers ?i ?u)))
(defrule take; подобрать резистор из БД
(numbers ?i ?u)
(resistor ?r =(om ?i ?u))
=>
(printout t crlf “You must take resistor « ?r».” crlf crlf)
(reset)
(halt))
(defrule nothing; если в БД нет подходящего резистора
(numbers ?i ?u)
(resistor ?r ~=(om ?i ?u))
=>
(printout t crlf “There is nothing for You in my database!” crlf
crlf)
(reset)
(halt))
Программа состоит из нескольких частей: базы данных с именем
resistors, объявления пользовательской функции om и трех правил с именами
input, take и nothing.
В базе данных содержатся сведения о резисторах. Они представлены в
виде списков, состоящих из трех полей. Первое поле имеет значение resistor,
которое отражает тип радиодетали. Во втором поле списка содержится тип
резистора. Последнее поле хранит значение сопротивления.
О функции om подробно говорилось ранее. В данном случае она
используется для представления процедурного знания – закона Ома. Правило
input предназначено для ввода исходных данных. Оно активизируется
системным начальным фактом и требует от пользователя ввести ток и
напряжение. Встроенная функция read возвращает значение, введенное со
стандартного устройства ввода (клавиатуры), которое сохраняется в
переменных ?i и ?u.
В правой части правила выполняется еще одно действие. Команда
assert добавляет в рабочую память интерпретатора CLIPS факт (numbers ?i ?u)
для того, чтобы можно было обращаться к локальным переменным ?i и ?u,
связанным с правилом input, из других правил программы.
27
В следующих двух правилах пользователю либо предлагается тип
подходящего резистора (правило take), либо сообщается об отсутствии
такового (правило nothing).
Рассмотрим правило take. Его левая часть состоит из двух условий,
поэтому правило активизируется, если оба условия будут выполнены. Первое
условие выполняется, так как соответствующий факт уже создан правилом
input. Второе условие выполнится, если будет точно соответствовать какомулибо факту (списку) в базе данных. Первое поле условия вопросов не
вызывает. Во втором поле условия находится переменная ?r, которая может
принять значение Ra, либо Rb, либо Rc – в зависимости от содержимого
третьего поля условия. В этом поле осуществляется вызов функции om и
сохраняется возвращаемое функцией значение. Так, если возвращаемое
значение будет равно 7, то условие выполнится, переменная ?r примет
значение Rc, правило активизируется и выведет на экран монитора
предложение выбрать резистор Rc. Если возвращаемое функцией om
значение равно 5, то пользователю будет предложен резистор Rb и т.д.
В левой части правила nothing вроде бы полная аналогия – за
исключением одной маленькой модификации. В третьем поле второго
условия перед вызовом функции om стоит символ “ ~ “, означающий
логическое отрицание. Таким образом, условие выполнится и правило
активизируется, если возвращаемое функцией om значение будет не 2, не 5 и
не 7.
Находясь в интерпретаторе CLIPS, командой (clear) очистим его от
данных предыдущего примера, загрузим файл resistor.clp и запустим
программу на выполнение:
CLIPS> (clear)
CLIPS> (load resistor.clp)
.............
TRUE
CLIPS> (reset)
CLIPS> (run)
Input current value: 3
Input strait value: 15
28
You must take resistor Rb.
CLIPS> (run)
Input current value: 3.5
Input strait value: 5.44
There is nothing for You in my database!
CLIPS>
Таким образом, файл resistor.clp также представляет собой базу знаний,
поскольку содержит и базу данных, и сведения (правила) о том, как данные
могут быть использованы. Эта база располагает, по крайней мере, тремя
знаниями. Первое – общий список резисторов с указанием типа и
сопротивления. Второе – закон Ома. Третье знание – предлагаемый тип
резистора.
Интеллект базы знаний можно существенно повысить добавлением
новых данных и правил. Так, вместо закона Ома можно использовать более
серьезные методики определения сопротивления резистора, например
схемотехническую САПР PSpice. Результаты ее работы можно сохранить в
текстовом файле, а затем вызвать из третьего поля второго условия правила
take.
Другой путь – добавление новых типов резисторов в базу данных.
Например, интересный результат получается при внесении в базу данных
записи (resistor Rd 2). При некоторой доработке правил take и nothing, если
возвращаемое функцией om значение равно 2, правило take отработает два
раза и предложит резисторы Ra и Rd. Затем можно пойти дальше: добавить
правило
(правила),
которое
выберет
из
резисторов
Ra
и
Rd
предпочтительный для некоторых конкретных условий и т.д.
Порядок выполнения работы
1. Изучить теоретическую часть.
2. Запустить «Пример 2» и разобраться, как он работает.
29
3. Разработать на основе примера (файл auto.clp) экспертную систему для
требуемой предметной области согласно заданию.
4. Получить распечатки примеров работы программы.
5. Оформить отчет.
Содержание отчета
1. Вариант задания, включающий описание предметной области.
2. Исходный текст разработанной программы.
3. Графическое представление алгоритма работы программы.
4. Распечатки экрана с результатами работы программы.
5. Выводы по работе.
Контрольные вопросы
1. Основные компоненты экспертных систем.
2. Какая форма записи используется в CLIPS для выражений?
3. Как организована база знаний в CLIPS?
4. Какой механизм используется для вывода новых знаний?
Литература
1. Попов Э. В. Экспертные системы: Решение неформализованных задач
в диалоге с ЭВМ. – М.: Наука, 1987.
2. Уотермен Д. Руководство по экспертным системам. Пер. с англ. – М.:
Мир, 1989.
3. Частиков А. П., Гаврилова Т. А., Белов Д. Л. Разработка экспертных
систем. Среда CLIPS. – СПБ: БХВ-Петербург, 2003.
30
Лабораторная работа №4
НЕЙРОННЫЕ СЕТИ. ОБУЧЕНИЕ НЕЙРОННОЙ СЕТИ
ВЫПОЛНЕНИЮ ЗАДАННОЙ ОПЕРАЦИИ.
Цель работы: ознакомиться с интерфейсом NNTool системы MATLAB,
создать и обучить нейронную сеть выполнению заданной операции.
Общие сведения
GUI-интерфейс для NNTool позволяет, не обращаясь к командному
окну системы MATLAB, выполнять создание, обучение, моделирование, а
также импорт и экспорт нейронных сетей и данных. Конечно, такие
инструменты наиболее эффективны лишь на начальной стадии работы с
пакетом, поскольку имеют определенные ограничения. В частности,
интерфейс NNTool допускает работу только с простейшими однослойными и
двухслойными нейронными сетями, но при этом пользователь выигрывает во
времени и эффективности освоения новых объектов.
Вызов GUI-интерфейса NNTool возможен либо командой nntool из
командной строки, либо из окна запуска приложений Launch Pad с помощью
опции NNTool из раздела Neural Network Toolbox. После вызова на экране
терминала
появляется
окно
Network/Data
Manager
(Управление
сетью/данными).
31
Рис. 4.1
· Help – кнопка вызова окна подсказки Network/Data Manager Help;
· New Data... – кнопка вызова окна формирования данных Create New
Data (рис. 4.2);
· New Network... – кнопка вызова окна создания новой нейронной сети
Create New Network (рис. 4.3);
· Import... – кнопка вызова окна для импорта или загрузки данных
Import or Load to Network/Data Manager (рис. 4.4);
· Export... – кнопка вызова окна для экспорта или записи данных в файл
Export or Save from Network/Data Manager (рис. 4.5).
Кнопки View, Delete становятся активными только после создания и
активизации данных, относящихся к последовательностям входа, цели,
выхода или ошибок сети. Кнопка View позволяет просмотреть, а кнопка
Delete удалить активизированные данные.
32
Кнопки View, Delete, Initialize..., Simulate..., Train..., Adapt...
становятся активными после создания и активизации самой нейронной сети.
Они позволяют просмотреть, удалить, инициализировать, промоделировать,
обучить или адаптировать нейронную сеть и будут описаны ниже.
Прежде
всего,
рассмотрим
назначение
и
способы
работы
с
перечисленными выше окнами. Окно Network/Data Manager Help. Это окно
подсказки описывает правила работы с диспетчером Network/Data Manager
при создании нейронной сети.
Чтобы создать нейронную сеть, необходимо выполнить следующие
операции:
· Сформировать последовательности входов и целей (кнопка New Data),
либо загрузить их из рабочей области системы MATLAB или из файла
(кнопка Import).
· Создать новую нейронную сеть (кнопка New Network), либо загрузить
ее из рабочей области системы MATLAB или из файла (кнопка
Import).
· Выбрать тип нейронной сети и нажать кнопку Train…, чтобы открыть
окно для задания параметров процедуры обучения.
· Открыть окно Network для просмотра, инициализации, моделирования,
обучения и адаптации сети.
Окно Create New Data. Это окно показано на рис. 4.2 и включает 2
области редактирования текста для записи имени вводимых данных (область
Name) и ввода самих данных (область Value), а также 6 кнопок для указания
типа вводимых данных.
33
Рис. 4.2
Различают следующие типы данных:
· Inputs (Входы) – последовательность значений входов;
· Targets (Цели) – последовательность значений цели;
· Input Delay States (Состояния ЛЗ входа) – начальные условия линии
задержки на входе;
· Layer Delay States (Состояния ЛЗ слоя) – начальные условия линии
задержки в слое;
· Outputs (Выходы) – последовательность значений выхода сети;
· Errors (Ошибки) – разность значений целей и выходов.
Как правило, пользователь задает только последовательности входа и
цели, т.е. типы данных Inputs и Targets. При этом следует помнить, что при
адаптации нейронной сети данные должны быть представлены в виде
массива ячеек.
Окно Create New Network. Это окно показано на рис. 4.3 и включает
поля для задания параметров создаваемой сети. В зависимости от типа сети
количество полей и их названия изменяются.
34
Рис. 4.3
Обратимся к описанию полей:
· Network Name (Имя сети) – стандартное имя сети, присваиваемое GUIинтерфейсом NNTool; в процессе создания новых сетей порядковый
номер будет изменяться автоматически.
· Туре (Тип сети) – список сетей, доступных для работы с интерфейсом
NNTool. Для удобства этот список повторен в нижеследующей
таблице. Интерфейс NNTool позволяет создавать нейронные сети
только с одним или двумя слоями.
Таблица 4.1
№
п/п Тип сети
1 Competitive
Cascadeforward
2 backprop
Название сети
Конкурирующая сеть
Каскадная сеть с прямым
распространением сигнала и
обратным распространением
ошибки
Число
Обучаемые
слоев
параметры
1 IW{1, 1}, b{1}
2
IW{1, 1}, b{1},
LW{2, 1},
IW{2, l}, b{2}
35
Elman
3 backprop
4
5
6
7
8
9
Feed-forward
backprop
Time delay
backprop
Generalized
regression
Hopfield
Linear layer
(design)
Linear layer
(train)
10 LVQ
11 Perceptron
Сеть Элмана с обратным
распространением ошибки
Сеть с прямым распространением
сигнала и обратным
распространением ошибки
Сеть с запаздыванием и обратным
распространением ошибки
2
IW{1, 1}, b{1},
LW{2, l}, b{2},
LW{1, 1}
Обобщенная регрессионная сеть
Сеть Хопфилда
2
1
IW{1, 1}, b{1},
LW{2, l}, b{2}
IW{1, 1}, b{1},
LW{2, l}, b{2}
IW{1, 1}, b{1},
LW{2, 1}
LW{1, l}, b{1}
Линейный слой (создание)
1
IW{1, 1}, b{1}
Линейный слой (обучение)
Сеть для классификации входных
векторов
Персептрон
1
2
IW{1, 1}, b{1}
IW{1, 1},
LW{2, 1}
IW{1, l}, b{1}
IW{1, 1}, b{1},
LW{2, 1}
IW{1, 1}, b{1},
LW{2, 1}
2
IW{1, l}, b{1},
LW{2, l}, b{2}
1
IW{1, 1}
12 Probabalistic Вероятностная сеть
Radial basis
Радиальная базисная сеть с
13 (exact fit)
нулевой ошибкой
Radial basis
(fewer
Радиальная базисная сеть с
минимальным числом нейронов
14 neurons)
Self-organizing Самоорганизующаяся карта
15 map
Кохонена
2
2
2
1
2
· Input ranges (Диапазоны входа) – допустимые границы входов,
которые
либо
назначаются
пользователем,
либо
определяются
автоматически по имени входной последовательности, выбираемой из
списка Get from Inp… .
· Training function (Функция обучения) – список обучающих функций.
· Adaption
learning
function
(Функции
настройки
для
режима
адаптации) – список функций настроек.
36
· Performance function (Функция качества обучения) – список функций
оценки качества обучения.
· Number of layers (Количество слоев) – количество слоев нейронной
сети.
· Properties for (Свойства) – список слоев: Layer 1 (Слой 1), Layer 2
(Слой 2).
· Number of neurons (Количество нейронов) – количество нейронов в
слое.
· Transfer function (Функция активации) – функция активации слоя.
Окно Import or Load to Network/Data Manager. Это окно показано на
рис. 4.4 и включает 3 поля.
Рис. 4.4
Source (Источник) – поле для выбора источника данных. Это либо
рабочая область системы MATLAB (кнопка выбора Import from MATLAB
Workspace), либо файл (кнопка выбора Load from disk file).
37
Если выбрана первая кнопка, то в поле Select a Variable вы можете
видеть все переменные рабочей области и, выбрав одну из них, например Р1,
можете
определить
ее
в
поле
Destination
(Назначение)
как
последовательность входа Inputs (Входы).
Если выбирается кнопка Load from disk file, то активизируется поле
MAT-file Name и кнопка Browse, что позволяет начать поиск и загрузку
файла из файловой системы.
Окно Export or Save from Network/Data Manager. Это окно показано
на рис. 4.5 и позволяет передать данные из рабочей области GUI-интерфейса
NNTool в рабочую область системы MATLAB или записать их в виде файла
на диске.
Рис. 4.5
В данном случае нами выбрана переменная network1, которая
принадлежит к классу network object и описывает нейронную сеть. После
того как эта переменная экспортирована в рабочую область, можно,
например, построить модель нейронной сети в системе Simulink с помощью
оператора gensim.
Диалоговая панель Network показана на рис. 4.6.
38
Рис. 4.6
Она открывается только в том случае, когда в окне Network/Data
Manager выделена созданная сеть остановятся активными кнопки View,
Initialize, Simulate, Train, Adapt.
Панель имеет 6 закладок:
· View (Просмотреть) – структура сети;
· Initialize (Инициализация) – задание начальных весов и смещений;
· Simulate (Моделирование) – моделирование сети;
· Train (Обучение) – обучение сети;
· Adapt (Адаптация) – адаптация и настройка параметров сети;
· Weights (Веса) – просмотр установленных весов и смещений.
Пример. Нейронная сеть с прямой передачей сигнала.
Создать и обучить нейронную сеть выполнению операции у = х12 + х2,
если заданы последовательности входа Р = [1 0.5 0 1; –2 0 0.5 1] и цели
Т = [–1 0.25 0.5 2].
Сформируем последовательности входов и целей в рабочей области
GUI-интерфейса NNTool, используя окно Create New Data. Выберем
нейронную сеть типа feed-forward backprop с прямой передачей сигнала и с
обратным распространением ошибки. Схема этой сети показана на рис. 4.6.
39
Выполним инициализацию сети, для чего выберем закладку Initialize,
откроется диалоговая панель, показанная на рис. 4.7. Диапазоны значений
исходных данных выберем по входам из ниспадающего меню Get from
input. Для ввода установленных диапазонов и инициализации весов надо
воспользоваться кнопками Set Ranges (Установить диапазоны) и Initialize
Weights (Инициализировать веса). Если требуется вернуться к прежним
диапазонам, то следует выбрать кнопки Revert Ranges (Вернуть диапазоны)
и Revert Weights (Вернуть веса).
Рис. 4.7
Затем выполняется обучение сети, для чего выбирается закладка Train
и открывается диалоговая панель, показанная на рис. 4.8.
40
Рис. 4.8
Панель имеет три закладки:
· Training Info (Информация об обучающих последовательностях)
(рис. 4.8);
· Training Parametrs (Параметры обучения) (рис. 4.9);
· Optional Info (Дополнительная информация) (рис. 4.10).
Рис. 4.9
41
Последняя
закладка
применяется,
когда
в
процессе
обучения
используются контрольные и тестовые последовательности.
Рис. 4.10
Применяя эти закладки, можно установить имена последовательностей
входа и цели, а также параметров процедуры обучения.
Теперь можно приступить к обучению сети (кнопка Train Network).
Рис. 4.11
42
Качество обучения сети с прямой передачей сигнала на выбранной
обучающей последовательности поясняется на рис. 4.11. Практически
нулевая точность достигается за 13 циклов обучения.
Соответствующие веса и смещения можно увидеть, если выбрать
закладку Weights (рис. 4.12).
Рис. 4.12
Для удобства работы можно экспортировать созданную нейронную
сеть в рабочую область системы MATLAB и получить информацию о весах и
смещениях непосредственно в рабочем окне системы:
network1.IW{1, 1}, network1.b{1}
ans = 10.972 11.3085
ans = -5.6542
network1.LW{2, 1}, network1.b{2}
ans = 1.5
ans = 0.5
Результаты обучения можно просмотреть в окне Network/Data
Manager, выбрав кнопку Manager (рис. 4.12). Появляется окно (рис. 4.13);
теперь, активизируя имена последовательностей выхода или ошибок
network1_outputs
и
network1_errors,
можно
просмотреть
результаты,
используя кнопку View. Получаем выходные данные, практически равные
целям, и ошибки порядка 10-15.
43
Рис. 4.13
При моделировании работы нейронной
сети в
Excel следует
использовать следующие формулы для вычисления функций активации
(передаточных функций) нейрона:
· Линейная (PURELIN): y = x
· Логистическая (LOGSIG): y = 1/(1+exp(-x))
· Гиперболический тангенс (TANSIG):
y = (exp(x)-exp(-x))/(exp(x)+exp(-x)) = tanh(x)
При этом математическая модель нейрона описывается следующими
соотношениями:
y = f(w1x1+w2x2+...+wNxN+b)
где wi – вес синапса (в данной работе используется нейронная сеть с
двумя слоями, которые характеризуются матрицами весов, обозначаемыми
IW (Input Weight) и LW (Layer Weight)), b – значение смещения (bias), xi –
44
компонента входного вектора (входной сигнал), y – выходной сигнал
нейрона, N – число входов нейрона, f – нелинейное преобразование (функция
активации).
Порядок выполнения работы
1. Изучить теоретическую часть.
2. Получить у преподавателя вариант задания.
3. Создать и обучить нейронную сеть выполнению заданной операции.
4. Промоделировать созданную нейронную сеть в Excel, используя
соответствующие веса и смещения, полученные в результате обучения.
5. Распечатать полученные результаты.
6. Оформить отчет.
Содержание отчета
1. Вариант задания.
2. Структура используемой нейронной сети.
3. Распечатки экрана Excel с результатами моделирования (в качестве
входных данных использовать также данные, которые не входили в
обучающую выборку).
4. Выводы по работе.
Контрольные вопросы
1. Назначение и преимущества использования нейронных сетей.
2. Какие действия необходимо выполнить для создания нейронной сети?
3. Что такое функция активации нейрона?
Литература
1. Искусственный интеллект. – В 3-х кн. Кн. 2. Модели и методы:
Справочник / под ред. Д. А. Поспелова – М.: Радио и связь, 1990.
2. Галушкин А.И. Теория нейронных сетей. – М.: ИПРЖР, 2000.
3. Горбань А. Н. Обучение нейронных сетей. – М.: СП Параграф, 1990.
45
4. Круглов В. В., Борисов В. В. Искусственные нейронные сети. Теория и
практика. – М.: Горячая линия - Телеком, 2001.
Лабораторная работа №5
РАЗРАБОТКА ПРОГРАММЫ РАСПОЗНАВАНИЯ ИЗОБРАЖЕНИЙ
С ИСПОЛЬЗОВАНИЕМ НЕЙРОННЫХ СЕТЕЙ
Цель работы: приобретение и закрепление знаний, а также получение
практических навыков работы с простейшими нейронными сетями.
Общие сведения
При моделировании нейронных сетей в качестве искусственных
нейронов
обычно
используется
простой
процессорный
элемент,
изображенный на рис. 5.1. На его входы поступает вектор X = (х1, …, хп)
входных сигналов, являющихся выходными сигналами других нейронов, а
также единичный сигнал смещения. Все входные сигналы, включая и сигнал
смещения,
умножаются
на
весовые
коэффициенты своих связей
и
суммируются:
S=
n
åxw + w
=i 1
i
i
(1)
0
где S – суммарный входной сигнал, который поступает на вход блока,
реализующего функцию f активации нейрона;
(
wi i= 1, n
)
– весовые
коэффициенты связей входных сигналов хi, ..., xп , w0 – весовой коэффициент
связи сигнала смещения.
1
w0
x1
w1
xn
..
å
f
y
wn
Рис. 5.1. Процессорный элемент, используемый в нейросетях
46
Приведенная модель искусственного нейрона игнорируют многие
известные свойства биологического прототипа. Например, она не учитывает
временные задержки нейронов, эффекты частотной модуляции, локального
возбуждения и связанные с ними явления подпороговой временной и
пространственной суммации, когда клетка возбуждается не одновременно
пришедшими импульсами, а последовательностями возбуждающих сигналов,
поступающих через короткие промежутки времени. Не учитываются также
периоды абсолютной рефрактерности, во время которых нервные клетки не
могут быть возбуждены, т.е. как бы обладают бесконечно большим порогом
возбуждения, который затем за несколько миллисекунд после прохождения
сигнала снижается до нормального уровня. Этот список отличий, которые
многие
биологи
считают
решающими,
легко
продолжить,
однако
искусственные нейронные сети все же обнаруживают ряд интересных
свойств, характерных для биологических прототипов.
Искусственные нейронные сети, предназначенные для решения
разнообразных конкретных задач, могут содержать от нескольких нейронов
до тысяч и даже миллионов элементов. Однако уже отдельный нейрон
(рис. 5.1) с биполярной функцией активации (на выходе имеется сигнал "1"
или "–1") может быть использован для решения простых задач распознавания
и классификации изображений.
Если выходной сигнал у нейрона принимает только два значения, то
нейрон
можно
использовать
для
классификации
предъявляемых
изображений на два класса.
Пусть имеется множество М изображений, для которых известна
корректная классификация на два класса Х1 = {X11, X12, ..., X1q}, X2 = {X21, X22,
..., Х2р }, X 1 U X 2 = M , X 1 I X 2 = 0 , и пусть первому классу Х1 соответствует
выходной сигнал у = 1, а классу X2 – сигнал у = –1. Если, например,
предъявлено
некоторое
изображение
X a=
(X
e
1
)
,..., X na ,
Xa Î M
и
его
взвешенная сумма входных сигналов превышает нулевое значение:
47
n
S = å xia wi + w0 > 0
i =1
то выходной сигнал у = 1 и, следовательно, входное изображение Хα
принадлежит классу X1. Если S < 0, то y = –1
И
предъявленное изображение
принадлежит второму классу.
Возможно использование отдельного нейрона и для выделения из
множества классов М = {X1 = {X1,..., Х1к}, ..., Хi= {Xi,...,Xiq}, ..., Xp= {Хp1,...,
Хрт}} изображений единственного класса Xi. В этом случае полагают, что
один из двух возможных выходных сигналов нейрона (например, 1)
соответствует классу Xi а второй – всем остальным классам. Поэтому, если
входное изображение Хα приводит к появлению сигнала y = 1, то Хα Є Хi,
если у = –1, то это означает, что предъявленное изображение не
принадлежит выделяемому классу.
Система распознавания на основе единственного нейрона делит все
пространство
возможных
решений
на
две
области
с
помощью
гиперплоскости
x1 w1 + x 2 w2 + ... + x n wn + w0= 0
Для двумерных входных векторов границей между двумя классами
изображений является прямая линия: входные вектора, расположенные выше
этой прямой, принадлежат к одному классу, а ниже – к другому.
Для адаптации, настройки или обучения весов связей нейрона может
использоваться несколько методов. Рассмотрим один из них, получивший
название "правило Хебба". Хебб, исследуя механизмы функционирования
центральной нервной системы, предположил, что обучение происходит
путем усиления связей между нейронами, активность которых совпадает по
времени. Хотя в биологических системах это предположение выполняется
далеко не всегда и не исчерпывает всех видов обучения, однако при
обучении однослойных нейросетей с биполярными сигналами оно весьма
эффективно.
48
В соответствии с правилом Хебба, если предъявленному биполярному
изображению X = (х1, ..., хп) соответствует неправильный выходной сигнал,
то веса wi ( i = 1, n ) связей нейрона адаптируются по формуле
wi (t + 1) = wi (t ) + xi y i = 0, n
где wi(t), wi (t+ 1 ) соответственно вес i-й связи нейрона до и после адаптации;
( )
xi 1, n – компоненты входного изображения; X0 = 1 – сигнал смещения; у –
выходной сигнал нейрона.
В более полной и строгой форме алгоритм настройки весов связей
нейрона с использованием правила Хебба выглядит следующим образом:
Шаг 1. Задается множество М = {(X1, tl), ..., (Хт, tm)} состоящее из пар
{входное изображение X k = (x1k ,..., x nk ), необходимый выходной сигнал
нейрона tk, ( k = 1, m )}. Инициируются веса связей нейрона:
wi = 0, i= 0, n
Шаг 2. Для каждой пары (Xk , t k ), k = 1, m пока не соблюдаются условия
останова, выполняются шаги 3-5.
Шаг 3. Инициируется множество входов нейрона: x 0 = 1, xi = xik , i = 1, n
Шаг 4. Инициируется выходной сигнал нейрона: у = tk .
Шаг 5. Корректируются
веса
связей
нейрона
по
правилу:
wi (new
=
) wi (old ) + xi y,=i 0, n
Шаг 6. Проверка условий останова. Для каждого входного изображения Хk
рассчитывается соответствующий ему выходной сигнал ук:
ìï1, если S k > 0
yk = í
, k = 1, m
ïî- 1, если S k £ 0
где
n
S k = å x k i wi + w0
i =1
Если вектор (у1, ..., у т) рассчитанных выходных сигналов равен
вектору (t1, ..., tm) заданных сигналов нейрона, т. е. каждому
входному изображению соответствует заданный выходной сигнал, то
вычисления прекращаются (переход к шагу 7), если же (у1, ..., ут)
1
m
¹ (t , ..., t ), то переход к шагу 2 алгоритма.
Шаг 7. Останов.
Использование группы из т биполярных или бинарных нейронов А1,
..., Ат (рис. 5.2) позволяет существенно расширить возможности нейронной
49
сети и распознавать до 2т различных изображений. Правда, применение этой
сети для распознавания 2т (или близких к 2т чисел) различных изображений
может приводить к неразрешимым проблемам адаптации весов связей
нейросети.
Поэтому
часто
рекомендуют
использовать
данную
архитектуру для распознавания только т различных изображений, задавая
каждому из них единичный выход только на выходе одного A-элемента
(выходы остальных при этом должны принимать значение "–1").
..
w1j
w11
A1
wj1
w1m
wm1
wjj
..
wmj
wjm
wmm
..
Aj
..
Am
y1
yj
ym
Рис. 5.2. Нейронная сеть из т элементов
Однослойная нейронная сеть с двоичными нейронами, приведенная на
рис. 5.2, может быть обучена с помощью алгоритма на основе правила Хебба.
В этом случае она называется сетью Хебба. Использование других
алгоритмов обучения этой же сети приводит и к изменению названия
нейронной сети. Использование в названии сетей их алгоритмов обучения
характерно для теории нейронных сетей. Для биполярного представления
сигналов возможно обучение нейросети с помощью следующего алгоритма:
Шаг 1. Задается множество М = {(X1, tl), ..., (Хт, tm)} состоящее из пар
{входное изображение X k = (x1k ,..., x nk ), необходимый выходной сигнал
нейрона tk, ( k = 1, m )}. Инициируются веса связей нейрона:
w ji = 0,
j= 1, n, i= 1, m
Шаг 2. Каждая пара (Xk, tk ), проверяется на правильность реакции
нейронной сети на входное изображение. Если полученный
выходной вектор сети (y1k ,..., y nk ) , отличается от заданного
t 1= (t1k ,..., t nk ), то выполняют шаги 3-5.
Шаг 3. Инициируется множество входов нейронов: x0 = 1, x j = x kj , j = 1, n
Шаг 4. Инициируются выходные сигналы нейронов: y i = t ik , i = 0, m
50
Шаг 5. Корректируются
веса
связей
) w ji (old ) + xi y, =j 0, n, =i 0, m
w ji (new
=
нейронов
по
правилу:
Шаг 6. Проверяются условия останова, т. е. правильности функционирования сети при предъявлении каждого входного изображения. Если
условия не выполняются, то переход к шагу 2 алгоритма, иначе –
прекращение вычислений (переход к шагу 7).
Шаг 7. Останов.
Порядок выполнения работы
1. Разработать структуру сети Хебба, способной распознавать четыре
различные буквы Вашего имени или фамилии. При этом обосновать
выбор:
§ числа рецепторных нейронов (число входов сети должно быть не
менее 12);
§ числа выходных нейронов;
§ выбор векторов выходных сигналов.
2. Разработать алгоритм и программу, моделирующую сеть Хебба.
3. Обучить нейронную сеть распознаванию четырех заданных символов.
4. Оформить отчет.
Содержание отчета
1. Набор входных символов и требуемых выходных сигналов.
2. Исходный текст разработанной программы.
3. Выводы по работе.
Контрольные вопросы
1. Что такое искусственный нейрон?
2. В чём заключается обучение нейронной сети?
Литература
1. Искусственный интеллект. – В 3-х кн. Кн. 2. Модели и методы:
Справочник / под ред. Д. А. Поспелова – М.: Радио и связь, 1990.
2. Галушкин А.И. Теория нейронных сетей. – М.: ИПРЖР, 2000.
51
3. Горбань А. Н. Обучение нейронных сетей. – М.: СП Параграф, 1990.
4. Круглов В. В., Борисов В. В. Искусственные нейронные сети. Теория и
практика. – М.: Горячая линия - Телеком, 2001.
52
Содержание
Лабораторная работа №1. Разработка экспертной системы
в среде Visual Prolog............................................................................................. 3
Лабораторная работа №2. Cистемы естественно-языкового
общения ................................................................................................................ 6
Лабораторная работа №3. Разработка экспертной системы
на языке CLIPS ................................................................................................... 19
Лабораторная работа №4. Нейронные сети. Обучение нейронной
сети выполнению заданной операции............................................................... 31
Лабораторная работа №5. Разработка программы распознавания
изображений с использованием нейронных сетей ........................................... 46
53
Download