- •Методические указания по лабораторным работам
- •Каскадная сеть прямой передачи cf в рабочем пространстве matlab.
- •Линейный слой lind в рабочем пространстве matlab.
- •Динамическая нейронная сеть
- •Задание.
- •Линейные сети
- •Задание.
- •Персептроны в рабочем пространстве matlab
- •Сети прямой передачи в рабочем пространстве matlab
- •Лабораторная работа 7 Сети Хопфилда
- •Лабораторная работа 8 Радиальные нейронные сети
- •Лабораторная работа 9 Самоорганизующиеся карты Кохонена
- •Список используемой литературы:
Лабораторная работа 8 Радиальные нейронные сети
(Radial Basis Function Neural Networks – RBF NN)
Основным применением нейронных сетей с радиальной функцией (RBF-сетей) является аппроксимация функций. Такие сети имеют два слоя:
1) скрытый слой нейронов с радиально-симметричной функцией. Это специальный класс функций, характерное свойство которых заключается в том, что отклик функции монотонно убывает с удалением от центральной точки. Типичный пример такой функции – функция Гаусса, имеющая следующее аналитическое представление:
График данной функции изображен ниже:
Радиальная функция имеет максимум, равный 1, когда аргумент функции (n) равен нулю. В слое с радиально-симметричной функцией вычисляется расстояние между вектором весов (w) и входным вектором (p). Размерность обоих векторов равна количеству входов рассматриваемого слоя – R. Затем величина расстояния (между w и p) умножается на параметр b (который позволяет задать чувствительность радиального нейрона). Полученное значение и есть аргумент радиальной функции.
Как только расстояние между w и p уменьшается, происходит увеличение значения радиальной функции. Таким образом, радиальный нейрон производит единицу каждый раз, когда вход p идентичен вектору весов w.
Для вычисления радиальной функции используется функция radbas.
Синтаксис:
A = radbas(N)
Входные аргументы:
N – вектор расстояний размера Sx1 для каждого нейрона S.
Выходные аргументы:
A – вектор значений радиальной функции для каждого нейрона S.
Пример:
n = -5:0.1:5;
a = radbas(n);
plot(n,a)
В результате создается график радиальной функции:
2) выходной линейный слой. Данный слой содержит нейроны с линейными функциями. Значение такой функции равно значению ее аргумента. Также каждый нейрон имеет параметр b, который определяет чувствительность нейрона к входным данным.
Т.о., RBF-сеть, состоящая из S1 нейронов в первом слое и S2 нейронов во втором слое, схематично представлена на рисунке ниже:
Для создания радиальной нейронной сети используется функция newrb, которая добавляет нейроны в скрытый радиальный слой до тех пор, пока нейронная сеть не удовлетворяет заданному значению ошибки.
Синтаксис:
net = newrb(P,T,GOAL,SPREAD,MN,DF)
Входные аргументы:
P – массив размера RxQ входных векторов, где R – количество входов, Q – количество входных векторов;
T – массив размера SxQ целевых векторов, где R – количество выходов, Q – количество целевых векторов;
GOAL – целевая среднеквадратичная ошибка, по умолчанию равна 0;
SPREAD – константа радиальной функции, по умолчанию равна 1;
MN – максимальное число нейронов, по умолчанию равно Q;
DF – количество нейронов, которые необходимо добавлять после каждого вывода ошибки, по умолчанию равно 25.
Выходные аргументы:
net – объект класса network object.
Пример:
Установим входные значения P и связанных с ними выходных значений T (количество значений – 21), а также построим график для этих значений с использованием функций plot, xlabel, ylabel:
P = -1 : 0.1 : 1;
T = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 ...
.1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 ...
.3072 .3960 .3449 .1816 -.0312 -.2189 -.3201];
plot(P,T,'+');
xlabel('Входной вектор P');
ylabel('Целевой вектор T');
Для того чтобы найти функцию, проходящую через эти точки, используем следующую команду:
net = newrb(P, T, 0.02, 1);
В результате создается двухслойная радиальная нейронная сеть, которая аппроксимирует данные, заданные векторами P и T. Для сети установлена среднеквадратичная ошибка, равная 0.02, а также параметр spread, равный единице.
В процессе обучения автоматически составляется график ошибки сети в зависимости от номера эпохи. Чтобы увидеть, насколько точно RBF-сеть аппроксимирует данные, необходимо протестировать сеть и вывести график выходных откликов сети:
plot(P,T,'+');
xlabel('Input');
X = -1:.01:1;
Y = sim(net,X);
hold on;
plot(X,Y);
hold off;
legend({'Target','Output'})
Задание.
1. Задать последовательности входов и целей. Например:
P = [1 2 3 4 5 6 7 8 9 10 11 12];
T = [2 4.1 5.9 3.6 1.7 7.3 6.1 9.2 3.8 1.2 4.9 6.3];
2. Создать радиальную нейронную сеть на основе заданных векторов со среднеквадратической ошибкой, равной 0.01. Также установить параметр spread равным единице.
3. Построить графики сигналов выхода сети и целевых значений:
plot(P,T,'+');
X = 1:.01:12;
Y = sim(net,X);
hold on;
plot(X,Y);
hold off;
4. Промоделировать обученную сеть при различных значениях параметра spread (например, при 0.3, 0.9, 2, 10, 50 и 100) и построить графики при каждом значении, чтобы сделать вывод о влиянии значения данного параметра на способность RBF-сети выполнять аппроксимацию функций.