7.7. Многопрофильная модель релаксационной нейронной сети
Многопрофильная модель релаксационной нейронной сети [8] является лабораторной установкой (ЛУ), предназначенной для создания релаксационных сетей
Хопфилда,
Хемминга,
Двунаправленной ассоциативной памяти и Машины Больцмана с варьируемыми параметрами, создания и редактирования обучающих выборок, обучения сетей различными методами, тестирования сетей.
По желанию пользователя могут устанавливаться следующие параметры релаксационной сети: метод обучения, вид активационной функции, коэффициент обратной связи, начальная температура и скорость охлаждения (для Машины Больцмана).
Программа имеет два режима работы: стандартный режим и режим формирования отчета. Стандартный режим работы позволяет формировать и редактировать обучающие выборки, произвольно устанавливать тип и параметры, проводить обучение и тестирование сети. Режим формирования отчета предполагает наличие заранее созданной обучающей выборки и позволяет протестировать все типы сетей с вариацией всех параметров и всеми возможными видами модификации эталонных данных обучающей выборки.
Работа с ЛУ начинается с окна выбора одного из двух режимов работы: обычный режим или режим формирования отчета. В обычном режиме ЛУ позволяет создавать и модифицировать обучающие выборки, произвольно выставлять тип, параметры РНС, выполнять их обучение и тестирование. Режим формирования отчета предназначен для выполнения лабораторной работы.
Главное окно программы моделирования содержит пять рабочих областей (рис.7.4):
– строка меню;
122
– панель быстрого доступа;
– область отображения
обучающей выборки и результатов тестирования;
– область модификации и тестирования отдельных образов;
– строка состояния.
Рис.7.4. Главное окно программы моделирования
Строка меню предоставляет доступ к большинству функций ЛУ, для большинства пунктов меню предусмотрены комбинации горячих клавиш.
Все функции сгруппированы в пяти разделах. Элемент меню "Файл" предоставляет доступ к стандартным функциям работы с файлами обучающих выборок.
Элемент "Настройки" осуществляет вызов окна настроек, в которых можно задать параметры обучающих выборок и моделируемых сетей.
Элемент меню "Тестируемый образ" предоставляет доступ к функциям модификации тестовых образов и тестирования сети с использованием модифицированных образов.
123
8. ПРИМЕРЫ МОДЕЛИРОВАНИЯ НЕЙРОННЫХ
СЕТЕЙ В СРЕДЕ MATLAB
8.1. Моделирование многослойных нейронных сетей для
аппроксимации функций sin(x) и cos(x)
Листинг программы моделирования многослойной нейронной сети в среде MATLAB
5
приведён ниже.
%Задание интервала значений для функций sin(x) и cos(x).
X = [-3.14*5:0. 01:3.14*5];
%Формирование значений функций в этом интервале
Ys = sin(X);
Yc = cos(X);
%Создание многослойных нейронных сетей для аппроксимации
nets = newff(minmax(X),[13,1,1],{'tansig','tansig','tansig'},'traingd');
netc = newff(minmax(X),[13,3,1],{'tansig','tansig','tansig'},'traingd');
%Тренировка сети и получение результатов работы сети
nets.trainParam.epochs = 1000;
netc.trainParam.epochs = 1000;
[nets,trs] = train(nets,X,Ys);
[netc,trc] = train(netc,X,Yc);
Yns=sim(nets,X);
Ync=sim(netc,X);
%Построение графика функций sin(x)
5
Справочник по Matlab http://radiomaster.ru/cad/matlab/index.php
124
figure('NumberTitle','off','Name','Функция Sin(x)','ToolBar','none','MenuBar','none'); plot(X,Ys,'-k','LineWidth',1);hold on; plot(X,Yns,'--k','LineWidth',2);hold on; Xin=[-8.53 -7.34 -6.21 -5.15 -4.91 -3.82 -2.76 -1.63 -0.53 0.45 1.34 2.22 ... 3.15 4.01 5.95 6.85 7.77 8.66]; Yout=sim(nets,Xin); plot(Xin,Yout,'ok','MarkerSize',7,'LineWidth',1); %Построение графика функций cos(x) figure('NumberTitle','off','Name','Функция Cos(x)','ToolBar','none','MenuBar','none'); plot(X,Yc,'-k','LineWidth',1);hold on; plot(X,Ync,'--k','LineWidth',2);hold on; Yout=sim(netc,Xin); plot(Xin,Yout,'ok','MarkerSize',7,'LineWidth',1); Для обучения НС использовалось три функции:
– traingd – функция обучения НС с использованием алгоритма градиентного спуска GD.
– trainlm – функция обучения НС с использованием алгоритма
Левенберга-Марквардта LM.
– trainbr – функция обучения НС с использованием алгоритма
Левенберга-Марквардта, дополненная регуляцией по Байесу BR.
Для аппроксимации функций sin(x), cos(x), в зависимости от применяемой функции обучения НС,
подобрано разное количество нейронов, приведённых в табл. 8.1.
125
Таблица 8.1
Функции обучения нейронной сети
Минимальное количество нейронов аппроксимации функций sin(x) cos(x)
1-й слой
2-ой слой
3-й слой
1-й слой
2-ой слой
3-й слой traingd
13 1
1 13 3
1 trainlm
7 1
1 7
1 1 trainbr
7 1
1 7
1 1
При увеличении количества нейронов с функциями обучения trainlm и trainbr до такого же количества, как и с traingd, качество аппроксимации функций sin(x) и cos(x) улучшается.
При использовании функций обучения trainlm и trainbr результаты получаются более точные, чем при использовании функции traingd.
Наилучшей функцией обучения оказалась функция trainlm, так как её среднеквадратичная ошибка уменьшается быстрее, чем в traingd и trainbr.
При использовании trainlm (как и trainbr), требуется меньшее количество нейронов для аппроксимации функций sin(x) и cos(x).
Использование функций trainlm и trainbr уменьшает количество необходимых итераций (эпох) для обучения сети, что сокращает время обучения.
Оптимальная структура многослойной НС для функции sin(x) имеет структуру с 15 нейронами во входном слое, с 5 нейронами в скрытом слое и одним нейроном в выходном слое. Сокращённое обозначение структуры
НС (15-5-1). newff (minmax(X), [15, 5, 1], {'tansig','tansig','tansig'},'trainlm').
126
Рис.8.1. График зависимости среднеквадратичной ошибки от количества итераций (traingd 13-1-1)
Оптимальная структура многослойной НС для моделирования функции cos(x) включает 15 входных, 8 скрытых и один выходной нейрон
(15-8-1). newff (minmax(X), [15, 8, 1], {'tansig','tansig','tansig'},'trainlm').
На рис. 8.1 ниже приведён график зависимости среднеквадратичной ошибки от количества итераций (traingd 13-1-1) при аппроксимации функции sin(x).
Основная ошибка аппроксимации наблюдается для функции sin(x) в области от 0,8 до 1 и от минус 1 до минус 0,8. На рис. 8.2 ниже приведён график зависимости среднеквадратичной ошибки от количества итераций
(trainbr 7-1-1) при аппроксимации функции sin(x), но при других параметрах архитектуры НС и обучения.
Наилучшие результаты аппроксимации функции sin(x) были получены с параметрами (trainlm 15-5-1). На рис. 8.3 представлена оптимальная архитектура НС.
127
Рис. 8.2. График зависимости среднеквадратичной ошибки от количества итераций (trainbr 7-1-1)
Рис.8.3 Нейронная сеть аппроксимации функции sin(x) (trainlm 15-5-1)
128
Рис. 8.4. График зависимости среднеквадратичной ошибки от количества итераций (trainlm 13-3-1)
Рис.8.5. График зависимости среднеквадратичной ошибки от количества итераций (trainlm 7-1-1)
На рис. 8.4 ниже приведён график зависимости среднеквадратичной ошибки от количества итераций (traingd 13 1 1) при аппроксимации функции cos(x). Основная ошибка аппроксимации наблюдается для функции cos(x) в области от 0,8 до 1 и от минус 1 до минус 0,8. На рис. 8.5 ниже приведён график зависимости среднеквадратичной ошибки от количества итераций (trainbr 7-1-1) при аппроксимации функции cos(x), но
129 при других параметрах архитектуры НС и обучения. Наилучшие результаты аппроксимации функции sin(x) были получены с параметрами
(trainlm 15-8-1).
8.2. Моделирование комбинационной логической схемы При создании гибридных интеллектуальных систем
могут быть использованы логические схемы, схемы резервирования и т.п.
Пример моделируемой схемы, реализующей логическое выражение вида ((b & d) v (a & c)) &d = y, приведён на рис. 8.6.
&
&
1
&
1
a c
d d
b y
Рис. 8.6. Фрагмент моделируемой логической схемы
Листинг программы моделируемой схемы представлен ниже.
%Создание сети НС, состоящей из 1 нейрона и четырех входов net=newp ([0 1; 0 1;0 1;0 1],1); %Задание таблицы истинности входных и выходных данных P={[0;0;0;0] [0;0;0;1] [0;0;1;0] [0;0;1;1] [0;1;0;0] [0;1;0;1] [0;1;1;0] ... [0;1;1;1] [1;0;0;0] [1;0;0;1] [1;0;1;0] [1;0;1;1] [1;1;0;0] [1;1;0;1]... [1;1;1;0] [1;1;1;1]}; T={0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0};
130
%Обучение сети
net.trainParam.epochs = 100;
Net = train (net, P, T);
%Проверка правильности полученной НС
Y = sin (net, P)
W = net.iw{1}
B = net.b{1}
При подаче тестового вектора обученная НС выдает ошибочные результаты. Для настройки сети необходимо провести несколько циклов адаптации. После каждого цикла адаптации НС проверяется на наличие ошибок. Если в результате работы НС присутствуют ошибки, производится следующий цикл адаптации и так до тех пор, пока ошибки не будут равны нулю.
net.adaptParam.passes=1;
[net,a,e] = adapt(net,P,T);
%Проверка ошибок
e
Результаты работы программы приведены на рис. 8.7 и рис.8.8. e =
Columns 1 through 9
[0] [0] [0] [0] [0] [0] [0] [0] [0]
Columns 10 through 16
[0] [0] [0] [0] [0] [0] [0]
Y =
Columns 1 through 9
[0] [1] [0] [1] [0] [0] [0] [0] [0]
Columns 10 through 16
[1] [0] [0] [0] [0] [0] [0]
131
W =
[-3,-5,-2,4]
B =
[-1]
Рис. 8.7. Результаты обучения нейронной сети
Рис. 8.8. График зависимости средней абсолютной ошибки обучения от количества итераций
132
Листинг программ реализующих элементарные логические функции
(2И, 2ИЛИ, НЕ) приведён ниже.
Файл LR2_and
%создание и обучение персептрона, реализующего логическую
%функцию 2И, с пороговой активационной функцией,
net=newp([0 1; 0 1],1);
P={[0; 0] [0; 1] [1; 0] [1;1]};
T={0, 0, 0, 1};
net.trainParam.goal=0;
net.trainParam.epochs=20;
net=train(net, P, T);
Y=sim(net, P);
Файл LR2_or
%создание и обучение персептрона, реализующего логическую
%функцию 2ИЛИ, с пороговой активационной функцией
net = newp([0 1; 0 1],1);
P={[0; 0] [0; 1] [1; 0] [1;1]};
T = {0, 1, 1, 1};
net.trainParam.goal=0;
net.trainParam.epochs= 20;
net=train(net, P, T);
Y=sim(net, P);
Файл LR2_not
133
%создание и обучение персептрона, реализующего логическую
%функцию НЕ, с пороговой активационной функцией
net = newp([0 1],1);
P = {0, 1};
T = {1, 0};
net.trainParam.goal=0;
net.trainParam.epochs= 20;
net=train(net, P, T);
Y=sim(net, P);
Анализ результатов аппроксимации позволил отобрать оптимальные параметры многослойной НС:
– для функции sin(x):
newff(minmax(X), [15, 5,1],{'tansig','tansig','tansig'},'trainlm');
– для функции cos(x):
newff(minmax(X),[15,8,1],{'tansig','tansig','tansig'},'trainlm').
При создании нейронной сети для аппроксимации функции на её конфигурацию влияют следующие факторы:
– Интервал, на котором аппроксимируется функция. Чем больше интервал входных значений, тем больше требуется нейронов для её аппроксимации.
– Вид аппроксимируемой функции влияет на выбор активационных функций нейронной сети каждого слоя.
– Количество нейронов и функции активации для каждого слоя НС подбираются экспериментально.
Для аппроксимации тригонометрических функций sin(x), cos(x) выбрана гиперболическая тангенциальная функция активации tansig, которая позволяет наиболее точно аппроксимировать тригонометрические функции sin(x), cos(x).
134
При моделировании фрагмента комбинационной схемы использовался персептрон с четырьмя входами (a, b, c, d). Входы персептрона могут принимать значения от 0 до 1. Для обучения персептрона потребовалось 11 итераций (эпох). При обучении персептрона получены веса (-3,-5,-2,4) и смещение (-1).
8.3. Моделирование радиально-базисных нейронных сетей для аппроксимации функций sin(x) и cos(x) Радиально-базисная нейронная сеть создается добавлением на каждом шаге нового нейрона в скрытом слое, пока допустимая среднеквадратическая ошибка не станет равна установленному значению или не будет достигнуто максимальное количество нейронов. Радиально-
базисную сеть целесообразно применять, в случае достаточного количества векторов обучающего множества, а также в задачах, которые не требуют высокой точности и допускают снижение точности для ускорения выполнения задачи.
Листинг программы моделирования радиально-базисных нейронных сетей для аппроксимации функций sin(x) и cos(x) приведён ниже.
% Создание радиально-базисных нейронных сетей для аппроксимации % функций sin(x) и cos(x) %Задание интервала, на котором исследуются целевые % функции sin(x) и cos(x) X = [-pi: 0.1: pi]; %Получение значения функций Ys = sin(X); Yc = cos(X); %Создание радиально-базисных нейронные сети %GOAL=0, SPREAD=1
135
nets = newrb(X,Ys,0,1);
netc = newrb(X,Yc,0,1);
% Симуляция
Yns=sim(nets,X);
Ync=sim(netc,X);
%Построение графика аппроксимации
%Построение графика функции sin(x)
figure('NumberTitle','off','Name','Функция
Sin(x)','ToolBar','none','MenuBar','none');
plot(X,Ys,'-k','linewidth',1);hold on;
plot(X,Yns,'-ok','markersize',4,'LineWidth',1); hold on;
title('Sin(x)');
xlabel('X');
ylabel('Y');
Xin=[-pi:0.43:pi];
Yout=sim(nets,Xin);
plot(Xin,Yout,'sk','markersize',8,'LineWidth',2);
%Построение графика функции cos(x)
figure('NumberTitle','off','Name','Функция
Cos(x)','ToolBar','none','MenuBar','none');
plot(X,Yc,'-k','linewidth',1);hold on;
plot(X,Ync,'-ok','markersize',4,'LineWidth',1); hold on;
title('Cos(x)');
xlabel('X');
ylabel('Y');
Xin=[-pi:0.43:pi];
Yout=sim(netc,Xin);
plot(Xin,Yout,'sk','markersize',8,'LineWidth',2);
%Количество нейронов в скрытом слое нейронной сети
136
NumNeuronsSin=nets.layers{1}.size
NumNeuronsCos=netc.layers{1}.size
%Вычисление значения среднеквадратичной ошибки обучения
% нейросети
Es=Ys-Yns;
Es = mse(Es)
Ec=Yc-Ync;
Ec = mse(Ec)
NumNeuronsSin =63
NumNeuronsCos =63
Количество нейронов для аппроксимации функций sin(x), cos(x) оказалось сравнительно большим (63). Это связано с количеством обучающих векторов и значением параметра цели. В нашем случае количество векторов равнялось 63, а цель = 0. В табл.8.2 приведена зависимость количества нейронов, средней ошибки от параметра цели.
Цель (GOAL) – допустимая среднеквадратичная ошибка сети.
Таблица 8.2. Зависимость количества нейронов и средней ошибки от значения цели (Goal)
Цель (Goal)
Количество нейронов
Среднеквадратичная ошибка sin(x) cos(x) sin(x) cos(x)
0 63 63 2.2966*10
-16 8.8417*10
-19 0.01 2
3 0.0045 9.8484*10
-4 0.0001 8
6 6.1257*10
-4 2.4159*10
-5 0.000001 12 10 4.2085*10
-7 1.1312*10
-7 0.00000001 15 12 6.9561*10
-9 3.0663*10
-9 0.0000000001 17 14 3.2617*10
-11 1.1821*10
-11
Анализ таблицы 8.2 показывает, что при уменьшении значения цели количество нейронов в скрытом слое увеличивается, и, следовательно,
137 увеличивается точность аппроксимации. Аппроксимация функции cos(x) в целом требует меньшее количество нейронов в скрытом слое и имеет меньшую среднеквадратичную ошибку обучения, по сравнению с аппроксимацией функции sin(x).
На рис. 8.9-8.12 показаны графики функций sin(x), cos(x) (сплошной линией), графики аппроксимаций этих функций через НС (маркеры
(атрибут ‘o’) указывают на входные вектора обучения НС). Также квадратными маркерами (атрибут ‘s’) отмечены результаты работы НС при поступлении на вход тестового вектора.
Рис. 8.9. График функции sin(x) и аппроксимации с помощью НС
(newrb, goal=0,spread=1, numneurons=63)
138
Рис. 8.10. График зависимости среднеквадратичной ошибки от количества итераций (sin(x), newrb, goal=0,spread=1, numneurons=63)
Рис. 8.11. График функции cos(x) и аппроксимации с помощью НС
(newrb, goal=0,spread=1, numneurons=63)
139
Рис. 8.12. График зависимости среднеквадратичной ошибки от количества итераций (cos(x), newrb, goal=0,spread=1, numneurons=63)
8.4. Моделирование обобщенных регрессионных нейронных сетей (GRNN) для аппроксимации функций sin(x) и cos(x) Обобщённые регрессионные сети являются разновидностью радиальных базисных сетей и
используются для анализа временных рядов, решения задач обобщенной регрессии. Характерной особенностью этих сетей является высокая скорость их обучения. Поэтому GRNN сети целесообразно применять в задачах, где требуется обеспечить минимальное время обучения сети с невысокими требованиями к точности.
Листинг программы моделирования обобщенных регрессионных нейронных сетей для аппроксимации функций sin(x) и cos(x) приведён ниже. %Создание обобщенных регрессионных нейронных сетей для %аппроксимации функций sin(x) и cos(x) %Задание интервала на котором моделируются целевые функции %sin(x) и cos(x)
140
X = [-pi:0.1:pi];
%Получение значения функций
Ys = sin(X);
Yc = cos(X);
%Создание обобщённых регрессионных НС
%SPREAD=1
nets = newgrnn(X,Ys,1);
netc = newgrnn(X,Yc,1);
Percentage Производится симуляция
Yns=sim(nets,X);
Ync=sim(netc,X);
%Построение графика аппроксимации
%Построение графика функции sin(x)
figure('NumberTitle','off','Name','Функция
Sin(x)','ToolBar','none','MenuBar','none');
plot(X,Ys,'-k','linewidth',3);hold on;
plot(X,Yns,'-ok','markersize',8,'LineWidth',1); hold on;
title('Sin(x)');
xlabel('X');
ylabel('Y');
Xin=[-pi:0.82:pi];
Yout=sim(nets,Xin);
plot(Xin,Yout,'sk','markersize',10,'LineWidth',2);
%Построение графика функции cos(x)
figure('NumberTitle','off','Name','Функция
Cos(x)','ToolBar','none','MenuBar','none');
plot(X,Yc,'-k','linewidth',3);hold on;
plot(X,Ync,'-ok','markersize',8,'LineWidth',1); hold on;
title('Cos(x)');
141
xlabel('X');
ylabel('Y');
Xin=[-pi:0.82:pi];
Yout=sim(netc,Xin);
plot(Xin,Yout,'sk','markersize',10,'LineWIdth',2);
%Количество нейронов в скрытом слое созданных НС
NumNeuronsSin=nets.layers{1}.size
NumNeuronsCos=netc.layers{1}.size
%Вычисление значения среднеквадратичной ошибки обучения НС
Es=Ys-Yns;
Es = mse(Es)
Ec=Yc-Ync;
Ec = mse(Ec)
NumNeuronsSin =63
NumNeuronsCos =63
Es = 0.0514
Ec = 0.0573
На рис. 8.13-8.14 показаны графики функций sin(x), cos(x) (черная сплошная линия), графики аппроксимации этих функций (маркеры (‘o’) указывают на входные вектора обучения НС).
Анализ рис. 8.13 и 8.14 демонстрирует низкую точность аппроксимации при большом (63) количестве нейронов. В обобщенной регрессионной нейронной сети количество нейронов равно количеству элементов входного вектора.
142
Рис. 8.13. График функции sin(x) и аппроксимации с помощью НС
(newgrnn, spread=1, numneurons=63)
Рис. 8.14. График функции cos(x) и аппроксимации с помощью НС
(newgrnn, spread=1, numneurons=63)
Точность аппроксимации зависит от значения параметра SPREAD.
Чтобы выполнить точную аппроксимацию следует использовать значение параметра SPREAD меньшее, чем расстояние (шаг) между входными векторами. При шаге между входными векторами 0,1 выбирается значение параметра SPREAD равное 0,09.
143
В результате получены следующие значения:
NumNeuronsSin = 63
NumNeuronsCos = 63
Es =4.0157*10
-5
Ec =4.4414*10
-6
На рис. 8.15 и 8.16 представлены графики аппроксимации функций sin(x), cos(x) с использованием значения параметра SPREAD=0.09 при обучении НС.
Рис. 8.15. График функции sin(x) и аппроксимации с помощью НС
(newgrnn, spread=0.09, numneurons=63)
144
Рис. 8.16. График функции cos(x) и аппроксимации с помощью НС
(newgrnn, spread=0.09, numneurons=63)