Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МИИ лабы 2007.doc
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
629.76 Кб
Скачать

Министерство образования Российской федерации

Московский государственный институт радиотехники,

электроники и автоматики (технический университет)

Кафедра «Проблемы управления»

Лабораторные работы по курсу “Методы искусственного интеллекта”

Москва. 2007 г.

Составители: Д.М. Еремин

Редактор: В.М. Лохин.

Лабораторные работы по курсу «Методы искусственного интеллекта» предназначены для студентов специальностей «Роботы и робототехнические системы» и «Мехатроника».

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

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

Библиографический список

1. Еремин Д.М., Гарцеев И.Б.. Искусственные нейронные сети в интеллектуальных системах управления. Учебное пособие. МИРЭА. 2004 г. Стр. -76.

2. Уссермен Ф. Нейрокомпьютерная техника. - М.: Мир, 1992.

3. Ежов А.А., Шумский С.А. Нейрокомпьютинг и его применения в экономике и бизнесе (серия "Учебники экономико-аналитического института МИФИ" под ред. проф. В.В. Харитонова). М.: МИФИ, 1998. - 70-86 с.

4. Методы робастного, нейро-нечеткого и адаптивного управления: Учебник/ Под ред. Н.Д.Егупова; издание 2-ое, М: Изд-во МГТУ им. Н.Э.Баумана, 2002. 274-348 с.

5. С.Д.Штовба. "Введение в теорию нечетких множеств и нечеткую логику". Интернет учебник. http://matlab.exponenta.ru/fuzzylogic/book1/index.php.

6. В.В. Круглов, М.И. Дли, Р.Ю. Голунов. Нечеткая логика и искусственные нейронные сети.

Лабораторная работа № 1

Аппроксимация функций на многослойной нейронной сети прямого распространения

Цель работы: Ознакомится с основными функциями MATLAB для моделирования, обучения и тестирования МНСПР. Изучение особенностей применения многослойной нейронной сети прямого распространения для аппроксимации функций.

Работа выполняется на программе MATLAB.

Время выполнения работы — 2 учебных часа.

Методика выполнения работы

Общие сведения о мнспр

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

Рис. 1.1. Структура МНСПР Рис. 1.2. Структура нейрона

Нейрон представляется, как последовательное соединение сумматора и функции преобразования . На рис. 1.2. представлена структура j-го нейрона в k-м слое. На его вход поступают сигналы с выходов всех нейронов предыдущего (k–1) слоя , умноженные на соответствующий весовой коэффициент связи (синапс).

Более компактно структуру слоя МНСПР можно представить в матричном виде (как принято в среде MATLAB см. рис. 1.3). Вместо уравнений описания функционирования одного слоя

используется матричная форма n = Wp+b, a = f(n), где

,

На вход поступает вектор примеров x размерностью Rx1, который умножается на матрицу весов W размерностью SxR. После перемножения получаем вектор размерностью Sx1, которому добавляется вектор смещений b той же размерности. Полученный вектор n поступает на входы функций преобразований нейронов первого слоя, количество которых равно S. Остальные слои функционируют аналогично.

Рис. 1.3. Обычное и матричное представление одного слоя НС

МНСПР в программе MATLAB представляется объектом net. Все вычисления в сети производятся в векторно-матричной форме. Для создания МНСПР используется функция

net = newff(PR,[S1 S2 ... SN],{TF1, TF2,...,TFN},BTF,BLF,PF),

где net — имя объекта НС; PR — Rx2 матрица минимальных и максимальных значений для R входов (на основании данной матрицы определяется количество входов НС); Si — число нейронов в i-м слое (для N слоев); TFi — функция преобразования в нейроне в i-м слое (default = 'tansig'); BTF — функция обучения НС (default = 'traingdx'); BLF — функция обучения весов и порогов (default = 'learngdm'); PF — функция расчета ошибки функционирования (default = 'mse').

При выполнении лабораторных работ рекомендуется использовать быстрые алгоритмы обучения: trainlm (Levenberg-Marquardt), trainbfg (quasi-Newton backpropagation), trainrp (resilient backpropagation).

Основными функциями преобразования в нейроне являются следующие: purelin, logsig, tansig (см. рис. 1.4).

a = purelin(n) a = logsig(n) a = tansig(n)

а) б) в)

Рис. 1.4. Типы функций преобразования в нейроне

Входы задаются в виде вектора столбца ', где R – число входов. Веса от входа (первого) к первому слою обозначаются net.IW{1,1}. Веса от слоя к слою обозначаются net.LW, например, от первого ко второму net.LW{2,1}. Смещения в каждом слое обозначаются net.b{i}, где i ­– номер слоя.

Рис. 1.5. Матричная форма трехслойной МНСПР

Пример: Создадим МНСПР с 2 входами, 5 нейронами в 1ом слое, 3 нейронами во 2ом слое и одним выходным нейроном. Тогда для матричного представления переменные, представленные на рис. 1, будут иметь следующие значения R=2, S1=5, S2=3, S3=1, f1 = 'tansig', f2 = 'tansig', f3 = 'purelin'.

net=newff([-2 2; -2 2 ],[5 3 1],{'tansig' 'tansig' 'purelin'}, 'trainlm');

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

net.IW

ans =

[5x2 double]

[]

[]

Для МНСПР возможно связь входа только с первым слоем, что и видно из структуры. Значения весов можно увидеть, выполнив команду

net.IW{1,1}

ans =

-0.8182 -1.3344

-1.2109 0.9919

1.3836 -0.7319

-0.7304 1.3844

-1.5554 -0.1756

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

net.LW

ans =

[] [] []

[3x5 double] [] []

[] [1x3 double] []

Для МНСПР возможно связь только от предыдущего слоя к последующему слою, что и видно из структуры, т.е. непустыми будут матрицы весов net.LW{2,1} и net.LW{3,2}. Значения весов между конкретными слоями можно увидеть, например, выполнив команду

net.LW{3,2}

ans =

0.7515 0.4746 -0.7270

Значение отдельного веса можно посмотреть с помощью команды net.LW{3,2}(1,2)

ans =

0.4746

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

net=newff( minmax(I),[3 1],{'tansig','purelin'}, 'trainlm');

где I — матрица примеров размерностью RxNp, R — число входов НС, Np — число примеров.

Пакетный режим обучения НС с учителем производится с помощью следующей функции:

[net,tr] = train(net,P,T),

где net — имя объекта НС; P — матрица входных примеров (RxNp); T — матрица выходных эталонных значений (LxNp), L —число выходов НС, tr — запись состояния обучения, R — число входов НС, Np — число примеров.

Основные параметры обучения являются:

значение среднеквадратичной ошибки (по умолчанию net.trainParam.goal = 0);

количество шагов обучения (по умолчанию net.trainParam.epochs = 100);

показываемые шаги обучения (по умолчанию net.trainParam.show = 25);

Пример: Создадим МНСПР с одним входом, пятью нейронами в первом слое и одним выходным нейроном, с методом обучения trainlm.

net=newff([0 2*pi; ],[5 1],{'tansig' 'purelin'}, 'trainlm');

Создадим примеры для обучения НС на функцию синуса

x = 0:0.1:2*pi; % входной вектор для обучения (1xNp)

y = sin(x); % выходной вектор для обучения (1xNp)

Обучим НС с точностью 0,00001 не более чем за 500 шагов.

net.trainParam.epochs = 500; % число итераций обучения

net.trainParam.goal = 1e-5; % требуемая точность обучения

net = train(net, x, y); % начать обучение

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

TRAINLM-calcjx, Epoch 0/500, MSE 2.77466/1e-005, Gradient 6.07885/1e-010

TRAINLM-calcjx, Epoch 16/500, MSE 8.50632e-006/1e-005, Gradient 0.00136218/1e-010

TRAINLM, Performance goal met.

Желаемая точность достигается за 16 шагов. Другие методы обучения дают худшие результаты.

Тестирование (функционирование) НС производится с помощью функции

[Y] = sim(net, P),

где net — имя НС; P —матрица входов (RxNp), Y — выходной вектор НС (LxNp).