Главная страница
Культура
Искусство
Языки
Языкознание
Вычислительная техника
Информатика
Финансы
Экономика
Биология
Сельское хозяйство
Психология
Ветеринария
Медицина
Юриспруденция
Право
Физика
История
Экология
Промышленность
Энергетика
Этика
Связь
Автоматика
Математика
Электротехника
Философия
Религия
Логика
Химия
Социология
Политология
Геология

Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин



Скачать 14.83 Mb.
Название В. Г. Потемкин
Анкор Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Дата 26.04.2017
Размер 14.83 Mb.
Формат файла doc
Имя файла Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Тип Книга
#3790
страница 20 из 50
1   ...   16   17   18   19   20   21   22   23   ...   50

6. Радиальные базисные сети


Радиальные базисные нейронные сети состоят из большего количества нейронов, чем стандартные сети с прямой передачей сигналов и обучением методом обратного распространения ошибки, но на их создание требуется значительно меньше времени. Эти сети особенно эффективны, когда доступно большое количество обучающих векторов [7].

Ниже, кроме сетей общего вида, обсуждаются 2 специальных типа радиальных базисных сетей: сети GRNN (Generalized Regression Neural Networks) для решения задач обобщенной регрессии и сети PNN (Probabilistic Neural Networks) для решения вероятностных задач [43].

Для создания радиальных сетей общего вида предназначены М-функции newrbe
и newrb, а обобщенных регрессионных и вероятностных – М-функции newgrnn и newpnn соответственно.

По команде help radbasis можно получить следующую информацию об М-функциях, входящих в состав ППП Neural Network Toolbox и относящихся к построению радиальных базисных сетей:


Radial basis networks

Радиальные базисные сети

New networks
Формирование сети

newrb
Создание радиальной базисной сети

newrbe
Создание радиальной базисной сети с нулевой ошибкой

newgrnn
Создание обобщенной регрессионной сети

newpnn
Создание вероятностной сети

Using networks
Работа с сетью

sim
Моделирование сети

Weight functions
Функции взвешивания

dist
Евклидово расстояние

dotprod
Скалярное произведение

normprod
Нормированное скалярное произведение

Net input functions

Функции накопления

netprod

Произведение взвешенных входов

netsum

Сумма взвешенных входов

Transfer functions
Функции активации

compet
Конкурирующая функция активации

purelin
Функция активации с жесткими ограничениями

radbas
Радиальная базисная функция активации

Performance
Функции оценки качества сети

mse
Среднеквадратичная погрешность

Signals
Преобразование данных

ind2vec
Преобразование индексного вектора в матрицу связности

vec2ind
Преобразование матрицы связности в индексный вектор

Demonstrations
Демонстрационные примеры

demorb1
Радиальные базисные сети

demorb3
Пример неперекрывающихся функций активации

demorb4
Пример перекрывающихся функций активации

demogrn1
Сеть GRNN и аппроксимация функций

demopnn1
Сеть PNN и классификация векторов

Модель нейрона и архитектура сети


На рис. 6.1 показана радиальная базисная сеть с R входами. Функция активации
для радиального базисного нейрона имеет вид:

(6.1)

Вход функции активации определяется как модуль разности вектора весов w и вектора входа p, умноженный на смещение b.

Рис. 6.1

График функции активации представлен на рис. 6.2.

Рис. 6.2

Эта функция имеет максимум, равный 1, когда вход равен 0. Когда расстояние между векторами w и p уменьшается, выход радиальной базисной функции увеличивается.
Таким образом, радиальный базисный нейрон действует как индикатор, который формирует значение 1, когда вход p идентичен вектору весов w. Смещение b позволяет корректировать чувствительность нейрона radbas. Например, если нейрон имел смещение 0.1,
то его выходом будет 0.5 для любого вектора входа p и вектора веса w при расстоянии между векторами, равном 8.333, или 0.833/b.

Радиальная базисная сеть состоит из двух слоев: скрытого радиального базисного слоя, имеющего S1 нейронов, и выходного линейного слоя, имеющего S2 нейронов (рис. 6.3).

Рис. 6.3

Входами блока ||dist|| на этом рисунке являются вектор входа p и матрица весов IW1,1, а выходом – вектор, состоящий из S1 элементов, которые определяются расстояниями между i-м вектором входа p и i-й вектор-строкой iIW1,1 матрицы весов. Такую вектор-строку будем называть вектором весов i-го нейрона. Выход блока ||dist|| умножается поэлементно на вектор смещения b1 и формирует вход функции активации. Тогда выход первого слоя может быть записан в следующей форме:

a{1}=radbas(net.prod(dist(net.IW{1,1},p),net.b{1})))

Использовать столь сложную запись при применении ППП Neural Network Toolbox не потребуется, поскольку все операции, связанные с созданием радиальной базисной сети, оформлены в виде специальных М-функций newrbe и newrb.

Для того чтобы понять поведение сети, необходимо проследить прохождение вектора входа p. При задании вектора входа каждый нейрон радиального базисного слоя выдаст значение в соответствии с тем, как близок вектор входа к вектору весов каждого нейрона. Таким образом, радиальные базисные нейроны с векторами весов, значительно отличающимися от вектора входа p, будут иметь выходы, близкие к 0, и их влияние на выходы линейных нейронов будет незначительно. Напротив, радиальный базисный нейрон с вектором весов, близким к вектору входа p, выдаст значение, близкое к 1, и это значение будет передано на линейный нейрон с весом, соответствующим выходному слою. Таким образом, если только 1 радиальный базисный нейрон имеет выход 1, а все другие имеют выходы, равные или очень близкие к 0, то выход линейного слоя будет равен весу активного выходного нейрона. Однако это исключительный случай, обычно выход формируют несколько нейронов с разными значениями весов.

Создание сети


Для построения радиальных базисных сетей предназначены М-функции newrbe
и newrb. Первая позволяет построить радиальную базисную сеть с нулевой ошибкой, вторая позволяет управлять количеством нейронов скрытого слоя.

Радиальная базисная сеть с нулевой ошибкой


Для построения радиальных базисных сетей с нулевой ошибкой предназначена функция newrbe, которая вызывается следующим образом:

net = newrbe(P,T,SPREAD)

Входными аргументами функции newrbe являются массивы входных векторов P
и целей T, а также параметр влияния SPREAD. Она возвращает радиальную базисную сеть с такими весами и смещениями, что ее выходы точно равны целям T. Функция newrbe создает столько нейронов радиального базисного слоя, сколько имеется входных векторов в массиве P и устанавливает веса первого слоя равными P'. При этом смещения устанавливаются равными 0.8326/SPREAD. Это означает, что уровень перекрытия радиальных базисных функций равен 0.5 и все входы в диапазоне SPREAD считаются значимыми. Ясно, что чем больший диапазон входных значений должен быть принят во внимание, тем большее значение параметра влияния SPREAD должно быть установлено. Это наиболее наглядно проявляется при решении задач аппроксимации функций, в чем можно убедиться, обратившись к демонстрационной программе demorb1.

Веса второго слоя IW21 (IW{2,1} – в обозначениях системы MATLAB) и смещений b2 (b{2}) могут быть найдены путем моделирования выходов первого слоя a1 (A{1}) и последующего решения системы линейных алгебраических уравнений (СЛАУ):

[W{2,1} b{2}] * [A{1}; ones] = T

Поскольку известны входы второго слоя A{1} и цели T, а слой линеен, то для вычисления весов и смещений второго слоя достаточно воспользоваться решателем СЛАУ

Wb = T / [P; ones(1, size(P,2))]

Здесь матрица Wb содержит веса и смещения (смещения – в последнем столбце). Сумма квадратов погрешностей сети будет всегда равна 0, так как имеем задачу с Q уравнениями (пары вход/цель) и каждый нейрон имеет Q + 1 переменных (Q весов по числу радиальных базисных нейронов и одно смещение). СЛАУ с Q уравнениями и более чем Q переменными имеет свободные переменные и характеризуется бесконечным числом решений с нулевой погрешностью.

Рассмотрим пример обучения и моделирования следующей радиальной базисной сети:

P = –1:.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,'*r','MarkerSize',4,'LineWidth',2)

hold on

% Создание сети

net = newrbe(P,T); % Создание радиальной базисной сети

Warning: Rank deficient, rank = 13 tol = 2.2386e–014.

net.layers{1}.size % Число нейронов в скрытом слое

ans = 21

% Моделирование сети

V = sim(net,P); % Векторы входа из обучающего множества

plot(P,V,'ob','MarkerSize',5, 'LineWidth',2)

p = [–0.75 –0.25 0.25 0.75];

v = sim(net,p); % Новый вектор входа

plot(p,v,'+k','MarkerSize',10, 'LineWidth',2)

Результаты моделирования представлены на рис. 6.4.

Рис. 6.4

Здесь отмечены значения входов Р, целевых выходов Т, а также результаты обработки нового вектора р. Количество используемых нейронов в скрытом слое в данном случае равно 21, что соответствует длине обучающего множества.

Таким образом, в результате обучения функция newrbe создает радиальную базисную сеть с нулевой погрешностью на обучающем множестве. Единственное условие, которое требуется выполнить, состоит в том, чтобы значение параметра SPREAD было достаточно большим, чтобы активные области базисных функций перекрывались, чтобы покрыть весь диапазон входных значений. Это позволяет обеспечить необходимую гладкость аппроксимирующих кривых и препятствует возникновению явления переобучения. Однако значение SPREAD не должно быть настолько большим, чтобы радиальная базисная функция объявляла одинаково значимыми все значения входа.

Недостаток функции newrbe заключается в том, что она формирует сеть с числом нейронов в скрытом слое, равным числу элементов обучающего множества. Поэтому
с помощью этой функции нельзя получить приемлемого решения в случае больших размеров обучающего множества, что характерно для реальных приложений.

Итерационная процедура формирования сети


Функция newrb создает радиальную базисную сеть, используя итеративную процедуру, которая добавляет по одному нейрону на каждом шаге. Нейроны добавляются к скрытому слою до тех пор, пока сумма квадратов ошибок не станет меньше заданного значения или не будет использовано максимальное количество нейронов. Эта функция вызывается с помощью команды

net = newrb(P,T,GOAL,SPREAD)

Входами функции newrb являются массивы входных и целевых векторов P и T, а также параметры GOAL (допустимая среднеквадратичная ошибка сети), SPREAD (параметр влияния), а выходом – описание радиальной базисной сети. Значение параметра SPREAD должно быть достаточно большим, чтобы покрыть весь диапазон значений входов, но
не настолько, чтобы эти значения были одинаково значимыми.

Применим функцию newrb для создания радиальной базисной сети из предыдущго примера.

P = –1:.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,'*r','MarkerSize',4,'LineWidth',2)

hold on

% Создание сети

GOAL = 0.01; % Допустимое значение функционала ошибки

net = newrb(P,T,GOAL); % Создание радиальной базисной сети

net.layers{1}.size % Число нейронов в скрытом слое

ans = 6

% Моделирование сети

V = sim(net,P); % Векторы входа из обучающего множества

plot(P,V,'ob','MarkerSize',5, 'LineWidth',2)

p = [–0.75 –0.25 0.25 0.75];

v = sim(net,p); % Новый вектор входа

plot(p,v,'+k','MarkerSize',10, 'LineWidth',2)

Соответствующий график представлен на рис. 6.5, а.



а



б

Рис. 6.5

Здесь отмечены значения входов Р, целевых выходов Т, а также результаты обработки нового вектора р. Количество используемых нейронов в скрытом слое в данном случае равно шести, что соответствует значению функционала ошибки 0.01. На рис. 6.5, б показана зависимость количества требуемых нейронов скрытого слоя от точности обучения. Из этого графика следует, что для значений функционала ошибки менее 1е–9 требуется максимальное количество нейронов, совпадающее с числом нейронов радиальной базисной сети с нулевой погрешностью.

Если сравнивать сети с прямой передачей сигнала и радиальные базисные сети, то следует заметить, что при решении одних и тех же задач они имеют определенные преимущества друг перед другом. Так, радиальные базисные сети с нулевой погрешностью имеют значительно больше нейронов, чем сравнимая сеть с прямой передачей сигнала и сигмоидальными функциями активации в скрытом слое. Это обусловлено тем, что сигмоидальные функции активации перекрывают большие диапазоны значений входа, чем радиальные базисные функции. С другой стороны, проектирование радиальной базисной сети требует значительно меньшего времени, а при ограниченной точности обучения
может потребовать и меньшего количества используемых нейронов.

Примеры радиальных базисных сетей


Демонстрационный пример demorb1 иллюстрирует применение радиальной базисной сети для решения задачи аппроксимации функции от одной переменной.

Представим функцию f(x) следующим разложением:

, (6.2)

где i(x) – радиальная базисная функция.

Тогда идея аппроксимации может быть представлена графически следующим образом. Рассмотрим взвешенную сумму трех радиальных базисных функций, заданных
на интервале [–3 3].

p = –3:.1:3;

a1 = radbas(p);

a2 = radbas(p–1.5);

a3 = radbas(p+2);

a = a1 + a2*1 + a3*0.5;

plot(p,a1,p,a2,p,a3*0.5,p,a) % Рис. 6.6

Рис. 6.6

Как следует из анализа рис. 6.6 разложение по радиальным базисным функциям обеспечивает необходимую гладкость. Поэтому их применение для аппроксимации произвольных нелинейных зависимостей вполне оправдано. Разложение вида (6.2) может быть реализовано на двухслойной нейронной сети, первый слой которой состоит из радиальных базисных нейронов, а второй – из единственного нейрона с линейной характеристикой, на котором реализуется суммирование выходов нейронов первого слоя.

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

P = –1:.1:1;

T = [–.9602 –.5770 –.0729 .3771 .6405 .6600 .4609 .1336 ...

.2013 –.4344 –.5000 –.3930 –.1647 .0988 .3072 .3960 ...

.3449 .1816 –.0312 –.2189 –.3201];

GOAL = 0.01; % Допустимое значение функционала ошибки

SPREAD = 1; % Параметр влияния

net = newrb(P,T,GOAL,SPREAD); % Создание сети

net.layers{1}.size % Число нейронов в скрытом слое

ans = 6

Для заданных параметров нейронная сеть состоит из шести нейронов и обеспечивает следующие возможности аппроксимации нелинейных зависимостей после обучения.
Моделируя сформированную нейронную сеть, построим аппроксимационную кривую
на интервале [–1 1] с шагом 0.01 для нелинейной зависимости.

plot(P,T,'+k') % Точки обучающего множества

hold on;

X = –1:.01:1;

Y = sim(net,X); % Моделирование сети

plot(X,Y); % Рис. 6.7

Из анализа рис. 6.7 следует, что при небольшом количестве нейронов скрытого слоя радиальная базисная сеть достаточно хорошо аппроксимирует нелинейную зависимость, заданную обучающим множеством из 21 точки.

Рис. 6.7

В демонстрационных примерах demorb3 и demorb4 исследуется влияние параметра SPREAD на структуру радиальной базисной сети и качество аппроксимации. В демонстрационном примере demorb3 параметр влияния SPREAD установлен равным 0.01. Это означает, что диапазон перекрытия входных значений составляет лишь 0.01, а поскольку обучающие входы заданы с интервалом 0.1, то входные значения функциями активации не перекрываются.

GOAL = 0.01; % Допустимое значение функционала ошибки

SPREAD = 0.01; % Параметр влияния

net = newrb(P,T,GOAL,SPREAD); % Создание сети

net.layers{1}.size % Число нейронов в скрытом слое

ans = 19

Это приводит к тому, что, во-первых, увеличивается количество нейронов скрытого слоя с 6 до 19, а во-вторых, не обеспечивается необходимой гладкости аппроксимируемой функции:

plot(P,T,'+k') % Точки обучающего множества

hold on;

X = –1:.01:1;

Y = sim(net,X); % Моделирование сети

plot(X,Y); % Рис. 6.8

Рис. 6.8

Пример demorb4 иллюстрирует противоположный случай, когда параметр влияния SPREAD выбирается достаточно большим (в данном примере – 12 или больше), то все функции активации перекрываются и каждый базисный нейрон выдает значение, близкое к 1, для всех значений входов. Это приводит к тому, что сеть не реагирует на входные значения. Функция newrb будет пытаться строить сеть, но не сможет обеспечить необходимой точности из-за вычислительных проблем.

GOAL = 0.01; % Допустимое значение функционала ошибки

SPREAD = 12; % Параметр влияния

net = newrb(P,T,GOAL,SPREAD); % Создание сети

net.layers{1}.size % Число нейронов в скрытом слое

ans = 21

В процессе вычислений возникают трудности с обращением матриц, и об этом выдаются предупреждения; количество нейронов скрытого слоя устанавливается равным 21,
а точность аппроксимации оказывается недопустимо низкой:

plot(P,T,'+k') % Точки обучающего множества

hold on;

X = –1:.01:1;

Y = sim(net,X); % Моделирование сети

plot(X,Y); % Рис. 6.9

Рис. 6.9

Вывод из выполненного исследования состоит в том, что параметр влияния SPREAD следует выбирать большим, чем шаг разбиения интервала задания обучающей последовательности, но меньшим размера самого интервала. Для данной задачи это означает, что параметр влияния SPREAD должен быть больше 0.1 и меньше 2.
1   ...   16   17   18   19   20   21   22   23   ...   50
написать администратору сайта