Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornye_IIS2007.doc
Скачиваний:
36
Добавлен:
10.11.2018
Размер:
281.6 Кб
Скачать

Лабораторная работа 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-сети выполнять аппроксимацию функций.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]