Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

Архитектура

Сеть Элмана – это, как правило, двухслойная сеть с обратной связью от выхода ко входу первого слоя (рис. 8.1).

Рис. 8.1

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

В соответствии со структурной схемой сети Элмана сформируем динамическое описание ее рекуррентного слоя в виде уравнений состояния

(8.1)

Эта рекуррентная матричная форма уравнений состояния лишний раз подчеркивает название изучаемых нейронных сетей.

Второй, линейный слой является безынерционным и описывается соотношениями

(8.2)

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

Далее рассматриваются выборки из набора двух синусоид с амплитудами 1.0 и 2.0:

p1 = sin(1:20);

p2 = sin(1:20)*2;

Целевыми выходами такой сети являются векторы

t1 = ones(1,20);

t2 = ones(1,20)*2;

Сформируем набор векторов входа и целевых выходов:

p = [p1 p2 p1 p2];

t = [t1 t2 t1 t2];

Сформируем обучающую последовательность в виде массивов ячеек:

Pseq = con2seq(p);

Tseq = con2seq(t);

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

В ППП NNT для создания сети Элмана предусмотрена М-функция newelm. Решаемая задача требует, чтобы сеть Элмана на каждом шаге наблюдения значений выборки могла выявить единственный ее параметр – амплитуду синусоиды. Это означает, что сеть должна иметь 1 вход и 1 выход:

R = 1; % Число элементов входа

S2 = 1;% Число нейронов выходного слоя

Рекуррентный слой может иметь любое число нейронов, и чем сложнее задача, тем большее количество нейронов требуется. Остановимся на 10 нейронах рекуррентного слоя:

S1 = 10; % Число нейронов рекуррентного слоя

Элементы входа для данной задачи изменяются в диапазоне от –2 до 2. Для обучения используется метод градиентного спуска с возмущением и адаптацией параметра скорости настройки, реализованный в виде М-функции traingdx:

net = newelm([–2 2],[S1 S2],{'tansig','purelin'},'traingdx');

Сеть использует следующие функции адаптации, инициализации, обучения и оценки качества:

adaptFcn: 'adaptwb'

initFcn: 'initlay'

performFcn: 'mse'

trainFcn: 'traingdx'

Слои сети Элмана имеют следующие характеристики:

net.layers{1}

ans =

dimensions: 10

distanceFcn: 'dist'

distances: [1010 double]

initFcn: 'initnw'

netInputFcn: 'netsum'

positions: [0 1 2 3 4 5 6 7 8 9]

size: 10

topologyFcn: 'hextop'

transferFcn: 'tansig'

userdata: [11 struct]

net.layers{2}

ans =

dimensions: 1

distanceFcn: 'dist'

distances: 0

initFcn: 'initnw'

netInputFcn: 'netsum'

positions: 0

size: 1

topologyFcn: 'hextop'

transferFcn: 'purelin'

userdata: [11 struct]

Скрытый слой использует функцию активации tansig, которая для сети Элмана принимается по умолчанию; инициализация весов и смещений реализуется методомNW(Nguen–Widrow) с помощью М-функцииinitnw. Второй слой использует линейную функцию активации purelin.

По умолчанию для настройки весов и смещений используется функция learngdm, а для оценки качества обучения – функцияmse.