Ряд времени проектирования нейронные сети обратной связи NARX

Чтобы видеть примеры использования сетей NARX, применяемых в форме разомкнутого цикла, форме с обратной связью и открытом / замкнутом цикле многоступенчатый прогноз, см. Многоступенчатый Прогноз Нейронной сети.

Все определенные динамические сети, обсужденные до сих пор, или были фокусируемыми сетями с динамикой только на входном слое или сетях feedforward. Нелинейная авторегрессивная сеть с внешними входными параметрами (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. Схему получившейся сети показывают ниже, где 2D слой сеть feedforward используется в приближении. Эта реализация также допускает векторную модель ARX, где ввод и вывод может быть многомерным.

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

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

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

Примером сети NARX является система магнитной левитации, описал начало в Использовании диспетчер NARMA-L2 Блок. Нижний график в следующем рисунке показывает, что напряжение применилось к электромагниту, и главный график показывает положение постоянного магнита. Данные были собраны в интервале выборки 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(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- 1 вектор для N элементы входа или целевого сигнала.

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

[X,T] = ph_dataset;

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

Можно переформатировать собственные многоэлементные серийные данные от матричной формы до формы 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, применяемых в форме разомкнутого цикла, форме с обратной связью и открытом / замкнутом цикле многоступенчатый прогноз, см. Многоступенчатый Прогноз Нейронной сети.

Для просмотра документации необходимо авторизоваться на сайте