Культура
Искусство
Языки
Языкознание
Вычислительная техника
Информатика
Финансы
Экономика
Биология
Сельское хозяйство
Психология
Ветеринария
Медицина
Юриспруденция
Право
Физика
История
Экология
Промышленность
Энергетика
Этика
Связь
Автоматика
Математика
Электротехника
Философия
Религия
Логика
Химия
Социология
Политология
Геология
|
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин
|
Название |
В. Г. Потемкин
|
Анкор |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Дата |
26.04.2017 |
Размер |
14.83 Mb. |
Формат файла |
|
Имя файла |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Тип |
Книга
#3790
|
страница |
27 из 50 |
|
9. Применение нейронных сетей
В настоящее время многие задачи, имеющие важное практическое значение и которые не имели приемлемого решения в прошлом, могут быть решены с использованием нейронных сетей. Ниже рассматривается решение таких задач, связанных с аппроксимацией и фильтрацией сигналов, моделированием динамических систем, распознаванием образов и проектированием систем управления.
9.1. Аппроксимация и фильтрация сигналов
9.1.1. Предсказание стационарного сигнала
Постановка задачи
Задан гармонический сигнал с круговой частотой 4 1/с (2 Гц) и длительностью 5 с. Дискретный сигнал T получен в результате квантования исходного сигнала по времени
с частотой 40 Гц (такт дискретности 0.025 с):
time = 0:0.025:5;
T = sin(time*4*pi);
stairs(time,T);
axis([0 5 –1 1]), xlabel(‘time, с’), ylabel(‘T’)
На рис. 9.1 показан график дискретного сигнала Т.
Рис. 9.1
Требуется предсказать значение сигнала yk на выходе сети в момент времени tk,
используя 5 последних значений сигнала Т в качестве входа, т. е.
(9.1)
где yk = sin(4tk) = sin(4kh), tk= t0 : h: tf = 0 : 0.025 : 5.
В математическом смысле это задача экстраполяции сигнала на 1 шаг вперед.
С позиции теории нейронных сетей это задача настройки параметров и обучения сети. Сформируем обучающее множество следующим образом. Входная последовательность Р1 определена на интервале от 0 до 1 c и имеет длину Q1, а каждый вектор входа состоит из пяти компонент, соответствующих запаздывающим значениям сигнала T; целевой вектор Т1 сформирован из значений сигнала Т, начиная с шестого; контрольное подмножество T2 формируется из значений сигнала Т на интервале от 3 до 5 с:
Q = length(T);
h = 0.025;
Q1 = 1/h;
P1 = zeros(5,Q1);
P1(1,1:Q1) = T(1,1:Q1);
P1(2,2:Q1) = T(1,1:(Q1–1));
P1(3,3:Q1) = T(1,1:(Q1–2));
P1(4,4:Q1) = T(1,1:(Q1–3));
P1(5,5:Q1) = T(1,1:(Q1–4));
T1 = T(1,6:(Q1+5));
T2 = T(1,3/h:Q);
Синтез сети
Поскольку сигнал стационарный и соотношения между прошлыми и будущими значениями остаются неизменными, можно воспользоваться линейной моделью нейронной сети, рассчитывая веса на основе прямого решения системы линейных уравнений. Такой подход реализует М-функция newlind. Она вычисляет веса и смещение, которые минимизируют среднеквадратичную ошибку предсказания, которые зависят от длины обучающей последовательности Q1. Сеть для решения этой задачи должна состоять из одного нейрона с пятью входами (рис. 9.2).
net = newlind(P1,T1);
Рис. 9.2
Графики зависимостей значений весовых коэффициентов wi и смещения b показаны на рис. 9.3, а и б соответственно.
а
|
б
|
Рис. 9.3
Значения этих величин стабилизируются после 0.5 с, когда исчерпывается 1 период синусоиды.
На рис. 9.4 представлена зависимость среднеквадратичной ошибки, которая характеризует погрешность экстраполяции в зависимости от длины обучающей последовательности.
Рис. 9.4
Проверка сети
Выполним проверку сети, используя входную последовательность обучающего подмножества и сравнивая выход сети с фактическим значением сигнала T (рис. 9.5):
Q1 = 40;
a = sim(net,P1(:,1:Q1));
t1 = 6:Q1+5;
plot(time(t1),a,'*r', time(1:Q1+5),T(1,1:Q1+5))
xlabel('Time, c');
Рис. 9.5
Как следует из анализа этого рисунка, нейронная сеть достаточно точно отслеживает входной сигнал.
Теперь проверим работу сети, используя контрольное множество T2. Определим длину входной последовательности N1, равную 20, и построим график реакции сети (рис. 9.6):
N1 = 20;
Tt = T2(1,1:N1);
P2(1,:) = Tt(1,:);
P2(2,2:end) = Tt(1,1:end–1);
P2(3,3:end) = Tt(1,1:end–2);
P2(4,4:end) = Tt(1,1:end–3);
P2(5,5:end) = Tt(1,1:end–4);
a = sim(net,P2);
figure(3), clf
h1 = plot(time(1:size(P2, 2)–5), a(1:end–5), '*'); hold on
h2 = plot(time(1:size(P2, 2)–5), Tt(6:end), 'r');
Рис. 9.6
Вычислим погрешность сети, используя информацию из описания графических
объектов Line с дескрипторами h1 и h2:
y1 = get(h1,'YData'); y2 = get(h2,'YData');
minlength = min(length(y1), length(y2));
e = y1(1:minlength) – y2(1:minlength);
nre = sqrt(mse(e));
График погрешности экстраполяции в функции от длины обучающего сигнала и в зависимости от количества точек экстраполяции в качестве параметра показан на рис. 9.7.
Рис. 9.7
Из анализа этого графика следует, что при малом числе экстраполируемых точек 6, 8 и длительности обучающей последовательности более 0.1 с погрешности малы. С ростом числа экстраполируемых точек 10, 20, 30 требуется большая длина обучающей последовательности, и при длине, превышающей 20 тактов (0.5 с), погрешность не зависит от числа точек экстраполяции и монотонно убывает с увеличением длины обучающего множества.
Читатель может обратиться к демонстрационному примеру applin1, где исследуется подобная задача.
9.1.2. Слежение за нестационарным сигналом
Рассмотрим задачу отслеживания нестационарного гармонического сигнала, что может представлять реальный интерес на практике.
Задана дискретная выборка T из гармонического сигнала длительностью 6 с, частота которого удваивается по истечении 4 с. Частота квантования для интервала времени от 0 до 4 с составляет 20 Гц, а для интервала от 4.05 до 6 с – 40 Гц.
time1 = 0:0.05:4;
time2 = 4.05:0.025:6;
time = [time1 time2];
T = [sin(time1*4*pi) sin(time2*8*pi)];
Поскольку при синтезе сети будут использоваться адаптивные алгоритмы настройки, сформируем обучающую последовательность {P, T} в виде массива ячеек, при этом последовательность входов Р должна совпадать с последовательностью целевых выходов Т, поскольку рассматривается задача слежения:
T = con2seq(T);
P = T;
plot(time, cat(2,T{:}))
График гармонического сигнала показан на рис. 9.8.
Рис. 9.8
Для решения поставленной задачи используется однослойная линейная сеть, которая предсказывает текущее значение сигнала по пяти предшествующим значениям.
Инициализация сети
Сеть состоит только из одного нейрона, так как требуется только одно значение
выходного сигнала T, которое генерируется на каждом шаге (рис. 9.9).
Рис. 9.9
Для создания такой сети предназначена М-функция newlin; параметр скорости
настройки выберем равным 0.1:
lr = 0.1;
delays = [1 2 3 4 5];
net = newlin(minmax(cat(2,P{:})),1,delays,lr);
[net,a,e] = adapt(net,P,T);
Сформированная нейронная сеть имеет следующие весовые коэффициенты и смещение:
net.IW{1}
net.b
ans = 0.39421 0.10682 –0.15592 –0.31476 –0.34523
ans = –4.5457e–006
Проверка сети
Построим график выходного сигнала и сравним его с целевым сигналом (рис. 9.10):
y = sim(net,P);
plot(time,cat(2,y{:}), time,cat(2,T{:}),'.') % Рис.9.10
axis([0 6 –1.5 1.5])
Рис. 9.10
Построим также график сигнала ошибки (рис. 9.11):
plot(time,cat(2,e{:}))
Рис. 9.11
Как следует из этого графика, для настройки на слежение нейронной сети требуется около 30 тактов (1.5 с) и далее до 4-й секунды сигнал отслеживается с высокой точностью. Затем целевой сигнал мгновенно изменяет частоту и нейронная сеть настраивается на новый сигнал за те же 30 тактов, но теперь это составляет 0.75 с. Это обусловлено тем, что частота съема увеличилась вдвое.
Таким образом, линейная нейронная сеть успешно справляется с задачей слежения за гармоническим сигналом, если частота квантования синхронизирована с частотой наблюдаемых сигналов. Для настройки на новую частоту требуется всего 30 измерений; для типичных сигналов, возникающих в приложениях, обработка сообщений может производиться с частотой 20 кГц, при такой частоте 30 тактов настройки занимают 1.5 мс.
Читатель может обратиться к демонстрационному примеру applin2, где исследуется подобная задача.
9.1.3. Моделирование стационарного фильтра
Одно из полезных применений нейронных сетей – это создание моделей динамических систем по наблюдаемым входным и выходным сигналам и их применение для последующего моделирования таких систем. Первая часть этой задачи, связанная с построением модели, известна также как задача идентификации. Если реальная система линейная или близка к линейной,
то линейная нейронная сеть может моделировать ее с очень малой погрешностью.
Постановка задачи
Допустим, что на вход фильтра подается входной сигнал вида r(t) = sin(10*sin(t)*t), заданный массивом значений R с тактом квантования 0.025 с на интервале 5 с:
time = 0:0.025:5;
R = sin(sin(time).*time*10);
plot(time,R)
axis([0 5 –1 1]);
График этого сигнала показан на рис. 9.12.
Рис. 9.12
Рассматривается линейный стационарный фильтр, описываемый следующим рекуррентным соотношением:
(9.2)
Это фильтр второго порядка, функционирование которого в системе MATLAB описывается следующей М-функцией:
Y = filter([1 0.5 –1.5],1,R);
plot(time,T)
axis([0 5 –2 2]);
График сигнала выхода этого фильтра показан на рис. 9.13.
Рис. 9.13
Задача нейронной сети – сформировать такую линейную модель, которая в процессе обучения определяет параметры фильтра, а затем использует их для моделирования при произвольных значениях входа.
Определим следующую обучающую последовательность: в качестве целевого выхода T примем массив Y, а входную последовательность P зададим на основе текущего и двух предшествующих значений входа R:
T = Y;
Q = size(R,2);
P = zeros(3,Q);
P(1,1:Q) = R(1,1:Q);
P(2,2:Q) = R(1,1:(Q–1));
P(3,3:Q) = R(1,1:(Q–2));
Синтез сети
Нейронная сеть должна иметь только 1 нейрон, потому что динамическая система имеет только 1 выход. Нейрон должен иметь 3 входа, чтобы получить текущий и 2 запаздывающих значения входного сигнала. М-функция newlind позволяет выполнить синтез такой нейронной сети:
net = newlind(P,T);
net.IW{1}, net.b
ans = 1.0000 0.5000 –1.5000
ans = –7.4394e–017
Нетрудно убедиться, что сеть точно определяет параметры фильтра.
Проверка сети
Для проверки функционирования сети подадим входную последовательность Р
и сравним с целевой последовательностью T (рис. 9.14):
a = sim(net,P);
plot(time,T, 'Color', [0 0.8 0.8], 'LineWidth',3),hold on
plot(time,a, 'k'), grid on
axis([0 5 –2 2]); % Рис.9.14
Рис. 9.14
Сеть выполняет поставленную задачу. Погрешность моделирования показана на рис. 9.15
и находится в пределах точности компьютера при вычислениях с плавающей точкой:
e = T–a; plot(time, e)
Рис. 9.15
Построенная линейная нейронная сеть может быть использована для идентификации и моделирования динамических систем, причем для линейных систем погрешности близки к 0.
Для нелинейных систем такой подход при достаточно малых амплитудах входного сигнала обеспечивает линеаризацию с минимальной среднеквадратичной ошибкой. Если нелинейная система переместится в другую рабочую точку, то изменятся и параметры нейронной сети. Для того чтобы получить линеаризованную модель за короткое время, частота замеров должна быть достаточно высокой, а на вход нелинейной системы необходимо подать пробный сигнал в виде случайного процесса небольшой амплитуды. Это ускорит адаптацию сети, поскольку большее количество измерений, характеризующих динамику системы, будет представлено на коротком интервале времени. Учет в случае нелинейных систем большего числа запаздывающих входов позволяет минимизировать ошибку при моделировании нелинейной системы. Если система характеризуется существенной нелинейностью, то более подходящими будут сети с обучением методом обратного распространения ошибки или радиальные базисные сети.
Читатель может обратиться к демонстрационному примеру applin3, где рассмотрена подобная задача.
9.1.4. Моделирование нестационарного фильтра
В отличие от описанного выше стационарного фильтра рассмотрим задачу идентификации и моделирования нестационарной системы.
Постановка задачи
Допустим, что на вход фильтра подается входной сигнал вида r(t) = sin(8sin(4t)*t),
заданный массивом значений R с тактом квантования 0.005 с на интервале 6 с:
time1 = 0:0.005:4;
time2 = 4.005:0.005:6;
time = [time1 time2];
R = sin(sin(time*4).*time*8);
plot(time,R)
axis([0 6 –1.1 1.1]);
График этого сигнала показан на рис. 9.16.
Рис. 9.16
Нестационарный линейный фильтр описывается следующими рекуррентными
соотношениями:
(9.3)
Этот фильтр может быть представлен в системе MATLAB следующим образом:
steps1 = length(time1);
[Y1,state] = filter([1 –0.5],1,R(1:steps1));
steps2 = length(time2);
Y2 = filter([0.9 –0.6],1,R((1:steps2) + steps1),state);
Y = [Y1 Y2];
plot(time,Y)
График сигнала на выходе этого фильтра показан на рис. 9.17.
Рис. 9.17
Определим такую обучающую последовательность: в качестве целевого выхода T примем массив Y, а входную последовательность P зададим на основе текущего и предшествующего значений входа R. Для использования алгоритмов адаптации представим обучающие последовательности в виде массивов ячеек:
T = con2seq(Y);
P = con2seq(R);
Инициализация сети
Сеть создается с помощью функции newlin, которая генерирует веса и смещение
для линейного нейрона с двумя входами. На входе сети используется линия задержки
на 1 такт; параметр скорости настройки принят равным 0.5.
lr = 0.5;
delays = [0 1];
net = newlin(minmax(cat(2,P{:})),1,delays,lr);
[net,a,e] = adapt(net,P,T);
Сформированная нейронная сеть имеет следующие весовые коэффициенты и смещение:
net.IW{1}, net.b
ans = 0.9 –0.6
ans = –3.14e–013
Нетрудно убедиться, что они соответствуют коэффициентам второго фильтра.
Проверка сети
Построим график погрешности сети (рис. 9.18):
plot(time, cat(2,e{:}))
Рис. 9.18
Из анализа этого графика следует, что сети требуется 2.5 с для настройки на реакцию первого фильтра и немногим более 0.2 с для настройки на реакцию второго фильтра. Это объясняется тем, что фактические настройки параметров сети стационарны и соответствуют значениям параметров второго фильтра.
Читатель может обратиться к демонстрационному примеру applin4, где исследуется подобная задача.
|
|
|