Сделай Сам Свою Работу на 5

Применение линейных сетей





Задача классификации векторов

Покажем, как линейные сети могут быть применены для решения задач классификации. Если используется процедура обучения train, то параметры сети настраиваются
с учетом суммарного значения функции ошибки. Это отличается от процедуры адаптации adapt, для работы которой характерна настройка параметров с учетом ошибки при представлении каждого вектора входа. Затем обучение применяется к скорректированной
сети, вычисляются выходы, сравниваются с соответствующими целями и вновь вычисляется ошибка обучения. Если достигнута допустимая погрешность или превышено максимальное число циклов (эпох) обучения, то процедура настройки прекращается. Алгоритм обучения и настройки сходится, если задача классификации разрешима.

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

(5.9)

Определим линейную сеть с начальными значениями веса и смещения, используемыми по умолчанию, т. е. нулевыми; зададим допустимую погрешность обучения, равную 0.1:



p = [2 1 –2 –1;2 –2 2 1];

t = [0 1 0 1];

net = newlin( [–2 2; –2 2],1);

% Инициализация линейной сети с двумя входами и одним выходом

net.trainParam.goal= 0.1;

[net, tr] = train(net,p,t);

TRAINWB, Epoch 0/100, MSE 0.5/0.1.

TRAINWB, Epoch 25/100, MSE 0.181122/0.1.

TRAINWB, Epoch 50/100, MSE 0.111233/0.1.

TRAINWB, Epoch 64/100, MSE 0.0999066/0.1.

TRAINWB, Performance goal met.

Пороговое значение функции качества достигается за 64 цикла обучения, а соответствующие параметры сети принимают значения

weights = net.iw{1,1}

bias = net.b(1)

weights = –0.061482 –0.21938

bias = [0.5899]

Выполним моделирование созданной сети с векторами входа из обучающего множества и вычислим ошибки сети:

A = sim(net, p)

err = t – sim(net,P)

A = 0.028173 0.96718 0.2741 0.432

err = –0.028173 0.03282 –0.2741 0.568

Заметим, что погрешности сети весьма значительны. Попытка задать большую точность в данном случае не приводит к цели, поскольку возможности линейной сети ограничены. Демонстрационный пример demolin4 иллюстрирует проблему линейной зависимости векторов, которая свойственна и этому случаю.

Обучение линейной нейронной сети иллюстрируется демонстрационной программой demolin2, которая возвращает значения весов и погрешность в процессе обучения. В связи с рассматриваемой проблемой классификации можно также обратиться к демонстрационной программе nnd10lc, в которой рассмотрена классическая задача классификации объектов при действии шумов.



Фильтрация сигнала

На рис. 5.7 представлена структурная схема цифрового фильтра, отличительной
особенностью которого является то, что он включает динамический компонент – линию задержки (ЛЗ) и 1 слой линейной нейронной сети.

Рис. 5.7

Последовательность значений входного сигнала {p(k)} поступает на ЛЗ, состоящую
из N–1 блока запаздывания; выход ЛЗ – N-мерный вектор pd, составленный из значений входа в моменты времени k, k–1, …, kN–1.

Выход линейного нейронного слоя и фильтра в целом описывается следующим динамическим соотношением:

(5.10)

Рассмотрим конкретный пример цифрового фильтра, представленный на рис. 5.8.

Рис. 5.8

Предположим, что входной сигнал принимает значения в диапазоне от 0 до 10, и сформируем линейную сеть с одним входом и одним выходом, используя М-функцию newlin:

net = newlin([0,10],1);

Введем ЛЗ с двумя тактами запаздывания:

net.inputWeights{1,1}.delays = [0 1 2];

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

net.IW{1,1} = [7 8 9];

net.b{1} = [0];

зададим начальные условия для динамических блоков линии задержки:

pi ={1 2}

Последовательность их задания слева направо соответствует блокам запаздывания, расположенным на рисунке сверху вниз. Этим завершается формирование сети.

Теперь определим входной сигнал в виде следующей последовательности значений:



p = {3 4 5 6}

и промоделируем эту сеть:

[a,pf] = sim(net,p,pi);

a = [46] [70] [94] [118]

pf = [5] [6].

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

T = {10 20 30 40};

Выполним настройку параметров, используя процедуру адаптации adapt и 10 циклов обучения:

net.adaptParam.passes = 10;

[net,y,E pf,af] = adapt(net,p,T,pi); % Процедура адаптации

Выведем полученные значения весов, смещения и выходного сигнала:

wts = net.IW{1,1}, bias = net.b{1}, y

wts = 0.5059 3.1053 5.7046

bias = 1.5993

y = [11.856] [20.774] [29.668] [39.004]

Если продолжить процедуру настройки, то можно еще точнее приблизить выходной сигнал к желаемому:

net.adaptParam.passes = 500;

[net,y,E,pf,af] = adapt(net,p,T,pi);

y

y = [10.004] [20.002] [29.999] [39.998]

Таким образом, линейные динамические нейронные сети могут быть адаптированы для решения задач фильтрации временных сигналов. Для сетей такого класса часто
используется название ADALINE (ADaptive LInear NEtwork) – адаптируемые линейные сети. Рассмотрим другие применения этих сетей.

Предсказание сигнала

Попробуем применить сеть ADALINE для предсказания значений детерминированного процесса p(t). Обратимся к рис. 5.9.

Рис. 5.9

Некоторый сигнал поступает на линию задержки так, что на ее выходе формируются 2 сигнала: p(t–1), p(t–2). Настройка сети реализуется с помощью М-функции adapt, которая изменяет параметры сети на каждом шаге с целью минимизировать погрешность
e(t) = a(t) – p(t). Если эта погрешность нулевая, то выход сети a(t) точно равен p(t) и сеть выполняет предсказание должным образом.

Ниже приведен сценарий, который предназначен для решения задачи предсказания сигнала на 1 шаг вперед. Входной детерминированный процесс получен в результате прохождения ступенчатого сигнала через колебательное звено.

Поскольку для формирования входа применено динамическое звено второго порядка, то в сети ADALINE будет использована ЛЗ с двумя блоками. Запишем следующий сценарий для решения задачи предсказания сигнала:

clear

sys = ss(tf(1,[1 1 1])); % Формирование колебательного звена

 

% Получение реакции на ступенчатое входное воздействие

time = 0:0.2:10;

[y,time] = step(sys,0:0.2:10);

 

% Формирование обучающего множества

p = y(1:length(time)–2)';

t = y(3:length(time))';

time = time(1:length(time)–2);

 

% Формирование нейронной сети

net = newlin([–1 1],1,[1 2]);

P = num2cell(p);

T = num2cell(t);

 

% Настройка нейронной сети

pi = {0 0};

net.adaptParam.passes = 5;

[net,Y,E,Pf,Af] = adapt(net,P,T,pi);

Y1 = cat(1,Y{:}); % Преобразование массива ячеек в массив double

% Построение графиков

plot(time,Y1,'b:',time,p,'r–'), xlabel('Время, с'), ylabel('Процессы')

title('Обучение нейронной сети')

 

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

x = sim(net,P);

x1 = cat(1,x{:});

plot(time,x1,'b')

Найденные значения весов и смещения равны

net.IW{1,1}, net.b

ans = 0.33427 0.31816

ans = [0.35853]

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

а б

Рис. 5.10

Как видно из этих рисунков, приемлемое для данной постановки задачи количество циклов обучения равно пяти; результаты моделирования показывают, что при длительности процесса 10 с диапазон успешного предсказания находится в пределах 1.8–10 с.

Подавление шумов

Задача подавления шумов возникает в следующей ситуации. Когда пилот говорит
в микрофон, шум двигателя в кабине добавляется к голосовому сигналу и пассажиры слышат речь с искажениями. Требуется восстановить речь пилота, удалив из нее звуки шумов двигателя. Для решения этой задачи построим адаптивный фильтр, полагая, что
в нашем распоряжении имеются записи шумов двигателя (рис. 5.11).

Рис. 5.11

Используя адаптируемую нейронную сеть ADALINE, построим такой фильтр, который позволит удалить шум n из зашумленного сигнала m. Рассмотрим подробнее структурную схему, представленную на рис. 5.11. Голос пилота v смешан с помехой от шумов двигателя, которая формируется фильтром шума по известным записям сигнала n.
Зашумленный сигнал m моделирует искаженную речь пилота. Задача состоит в том, чтобы с помощью адаптивного фильтра сформировать такую модель шума а, которая при вычитании из зашумленного сигнала позволила бы выделить речь пилота.

Адаптивный фильтр, построенный на базе линейной нейронной сети ADALINE, должен быть настроен так, чтобы убирать шум двигателя. Заметим, что такая адаптивная фильтрация предпочтительнее классического фильтра, в котором шум не вычитается,
а отфильтровывается от сигнала m.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.