- •Лабораторные работы по курсу “Методы искусственного интеллекта”
- •Библиографический список
- •Общие сведения о мнспр
- •Аппроксимация функций на мнспр
- •Классификация на многослойной нейронной сети прямого распространения
- •Распознавание символов на многослойной нейронной сети прямого распространения.
- •Распознавание образов на Нейронной Сети Хопфилда.
Министерство образования Российской федерации
Московский государственный институт радиотехники,
электроники и автоматики (технический университет)
Кафедра «Проблемы управления»
Лабораторные работы по курсу “Методы искусственного интеллекта”
Москва. 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).