Проектирование временных рядов NARX Обратная связь Нейронные сети

Чтобы увидеть примеры использования сетей NARX, применяемых в разомкнутый контур форме, системе с обратной связью и многостадийном предсказании без обратной связи, см. Multistep Neural Network Prediction.

Все конкретные динамические сети, обсуждавшиеся до сих пор, были либо сфокусированы на сетях, с динамикой только на вход слоя, либо сети прямого распространения. Нелинейная авторегрессивная сеть с экзогенными входами (NARX) является рекуррентной динамической сетью с соединениями обратной связи, охватывающими несколько слоев сети. Модель NARX основана на линейной модели ARX, которая обычно используется в моделировании timeseries.

Определяющее уравнение для модели NARX

y(t)=f(y(t1),y(t2),,y(tny),u(t1),u(t2),,u(tnu))

где следующее значение зависимого выходного сигнала y (t) регрессировано на предыдущих значениях выходного сигнала и предыдущих значениях независимого (экзогенного) входного сигнала. Можно реализовать модель NARX с помощью нейронной сети с feedforward, чтобы аппроксимировать f функции. Схема получившейся сети показана ниже, где для приближения используется 2-х слойная сеть прямого распространения. Эта реализация также допускает векторную модель ARX, где вход и выход могут быть многомерными.

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

Прежде чем показывать обучение сети NARX, важное строение, которая полезна в обучении, нуждается в объяснении. Можно считать выход сети NARX оценкой выхода некоторой нелинейной динамической системы, которую вы пытаетесь смоделировать. Выход подается назад на вход нейронной сети с feedforward как часть стандартной архитектуры NARX, как показано на левом рисунке ниже. Поскольку истинный выход доступен во время обучения сети, можно создать последовательную параллельную архитектуру (см. [NaPa91]), в которой истинный выход используется вместо обратной передачи предполагаемого выхода, как показано на правом рисунке ниже. Это имеет два преимущества. Первый заключается в том, что вход в сеть прямого распространения является более точным. Второе заключается в том, что получившаяся сеть имеет чистую архитектуру прямого распространения, и для обучения может использоваться статическое обратное распространение.

Ниже показано использование последовательной параллельной архитектуры для настройки сети NARX для моделирования динамической системы.

Примером сети NARX является система магнитной левитации, описанная начиная с использования блока NARMA-L2 Controller. Нижний график на следующем рисунке показывает напряжение, приложенное к электромагниту, а верхний график показывает положение постоянного магнита. Данные собирали с интервалом дискретизации 0,01 секунды, чтобы сформировать два временных рядов.

Цель состоит в том, чтобы разработать модель NARX для этой магнитной системы левитации.

Во-первых, загрузите обучающие данные. Используйте выделенные линии задержки с двумя задержками как для входа, так и для выхода, поэтому обучение начинается с третьей точки данных. Существует два входа в последовательно-параллельную сеть, u (t) последовательность и y (t) последовательность.

load magdata
y = con2seq(y);
u = con2seq(u);

Создайте последовательно параллельную сеть NARX с помощью функции narxnet. Используйте 10 нейронов в скрытом слое и используйте trainlm для функции обучения, а затем подготовьте данные с preparets:

d1 = [1:2];
d2 = [1:2];
narx_net = narxnet(d1,d2,10);
narx_net.divideFcn = '';
narx_net.trainParam.min_grad = 1e-10;
[p,Pi,Ai,t] = preparets(narx_net,u,{},y);

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

narx_net = train(narx_net,p,t,Pi);

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

yp = sim(narx_net,p,Pi);
e = cell2mat(yp)-cell2mat(t);
plot(e)

Можно увидеть, что ошибки очень маленькие. Однако из-за последовательного параллельного строения это ошибки только для предсказания с одним шагом вперед. Более строгим тестом было бы переставить сеть в исходную параллельную форму (замкнутый цикл), а затем выполнить итерационное предсказание на многих временных шагах. Теперь показана параллельная операция.

Существует функция тулбокса (closeloop) для преобразования сетей NARX (и других) из последовательно-параллельного строения (разомкнутого контура), которая полезна для обучения, в параллельное строение (замкнутый цикл), которая полезна для многоэтапного предсказания. Следующая команда иллюстрирует, как преобразовать сеть, которую вы только что обучили, в параллельную форму:

narx_net_closed = closeloop(narx_net);

Чтобы увидеть различия между двумя сетями, можно использовать команду view:

view(narx_net)

view(narx_net_closed)

Все обучение проводится в разомкнутом контуре (также называемом последовательно-параллельной архитектурой), включая шаги валидации и тестирования. Типичный рабочий процесс состоит в том, чтобы полностью создать сеть в разомкнутом контуре, и только когда она была обучена (которая включает шаги валидации и тестирования), она преобразуется в замкнутый цикл для многостадийного предсказания. Аналогично, R значения в графический интерфейс пользователя вычисляются на основе результатов обучения без разомкнутого контура.

Теперь можно использовать строение с обратной связью (параллельную), чтобы выполнить итерационное предсказание 900 временных шагов. В этой сети вам нужно загрузить два начальных входа и два начальных выхода в качестве начальных условий. Вы можете использовать preparets функция для подготовки данных. Он будет использовать структуру сети, чтобы определить, как разделить и сдвинуть данные соответствующим образом.

y1 = y(1700:2600);
u1 = u(1700:2600);
[p1,Pi1,Ai1,t1] = preparets(narx_net_closed,u1,{},y1);
yp1 = narx_net_closed(p1,Pi1,Ai1);
TS = size(t1,2);
plot(1:TS,cell2mat(t1),'b',1:TS,cell2mat(yp1),'r')

Рисунок иллюстрирует итерационное предсказание. Синяя линия является фактическим положением магнита, а красная - положением, предсказанным нейронной сетью NARX. Несмотря на то, что сеть предсказывает 900 временных шагов вперед, предсказание очень точно.

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

Можно также создать параллельную (закрытый цикл) сеть NARX, используя narxnet команда с четвертым входным параметром, установленным на 'closed', и обучите эту сеть непосредственно. Как правило, обучение занимает больше времени, и полученная эффективность не так хороша, как полученная при последовательной параллельной подготовке.

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

Существует несколько других методов улучшения начальных решений, если желательна более высокая точность. Для получения дополнительной информации см. «Улучшение обобщения неглубокой нейронной сети» и «Избегайте избыточного оснащения».

Несколько внешних переменных

Пример маглева показал, как смоделировать временные ряды с одним внешним входным значением с течением времени. Но сеть NARX будет работать для проблем с несколькими внешними входными элементами и предсказывать серии с несколькими элементами. В этих случаях вход и цель состоят из массивов ячеек строк, представляющих время, но с каждым элементом камеры N-by-1 вектор для N элементы входного или целевого сигнала.

Например, вот набор данных, который состоит из 2-х элементных внешних переменных, предсказывающих ряд с 1 элементом.

[X,T] = ph_dataset;

Внешние входы X форматированы как строка массив ячеек из 2-элементных векторов, причем каждый вектор представляет поток кислоты и решения основания. Мишени представляют полученный рН решения с течением времени.

Можно переформатировать собственные многоэлементные последовательные данные из матричной формы в форму временного timeseries нейронной сети с функцией con2seq.

Процесс обучения сети протекает так, как это было сделано выше для задачи маглева.

net = narxnet(10);
[x,xi,ai,t] = preparets(net,X,{},T);
net = train(net,x,t,xi,ai);
y = net(x,xi,ai);
e = gsubtract(t,y); 

Чтобы увидеть примеры использования сетей NARX, применяемых в разомкнутый контур форме, системе с обратной связью и многостадийном предсказании без обратной связи, см. Multistep Neural Network Prediction.