主要内容

设计时间序列NARX反馈神经网络

要查看将NARX网络应用于开环形式、闭环形式和开/闭环多步预测的示例,请参见多步神经网络预测

到目前为止讨论的所有特定的动态网络要么是只在输入层具有动态的聚焦网络,要么是前馈网络。带外源输入的非线性自回归网络(NARX)是一种循环的动态网络,其反馈连接包围了网络的几层。NARX模型基于时间序列建模中常用的线性ARX模型。

NARX模型的定义方程是

y t f y t 1 y t 2 ... y t n y u t 1 u t 2 ... u t n u

相关输出信号的下一个值在哪里yt)是输出信号的先前值和独立(外生)输入信号的先前值的回归。您可以通过使用前馈神经网络来近似函数来实现NARX模型f.所得到的网络图如下所示,其中一个两层前馈网络用于近似。此实现还允许使用矢量ARX模型,其中的输入和输出可以是多维的。

NARX网络有很多应用。它可以用作一个预测器,来预测输入信号的下一个值。它也可以用于非线性滤波,其中目标输出是输入信号的无噪声版本。NARX网络的应用在另一个重要的应用中,即非线性动态系统的建模。

在展示NARX网络的训练之前,需要解释一个在训练中有用的重要配置。您可以将NARX网络的输出视为您正在尝试建模的某些非线性动态系统的输出的估计值。输出作为标准NARX架构的一部分反馈给前馈神经网络的输入,如下图左图所示。因为真实的输出在网络训练期间是可用的,所以你可以创建一个串并联体系结构(参见[NaPa91]),其中使用真实输出,而不是反馈估计输出,如下图所示。这有两个好处。首先是前馈网络的输入更加准确。其次,得到的网络具有纯前馈架构,静态反向传播可用于训练。

下面展示了使用串并联架构训练NARX网络来建模动态系统。

NARX网络的例子是中描述的磁悬浮系统使用NARMA-L2控制器块.下图中最下面的图是施加在电磁铁上的电压,最上面的图是永磁体的位置。以0.01秒的采样间隔采集数据,形成两个时间序列。

目标是为这个磁悬浮系统开发一个NARX模型。

首先,加载训练数据。对于输入和输出都使用有两个延迟的抽头延迟线,因此训练从第三个数据点开始。串并联网络有两个输入ut)序列及yt)序列。

负载magdataY = 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);情节(e)

你可以看到误差非常小。然而,由于串并联结构,这些误差只适用于提前一步的预测。更严格的测试是将网络重新排列成原始的并行形式(闭环),然后在许多时间步骤中执行迭代预测。现在展示了并行操作。

有一个工具箱函数(closeloop)用于将NARX(和其他)网络从用于训练的串并联结构(开环)转换为用于多步超前预测的并行结构(闭环)。下面的命令说明了如何将刚刚训练的网络转换为并行形式:

Narx_net_closed = closeloop(narx_net);

要查看两个网络之间的差异,可以使用view命令:

视图(narx_net)

视图(narx_net_closed)

所有的训练都是在开循环(也称为串联-并行体系结构)中完成的,包括验证和测试步骤。典型的工作流程是在开环中完全创建网络,只有当它经过训练(包括验证和测试步骤)时,才会转换为闭环进行多步预测。同样,RGUI中的值是根据开环训练结果计算的。

现在可以使用闭环(并行)配置执行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);阴谋(1:TS, cell2mat (t1),“b”1: TS, cell2mat (yp1),“r”

图中说明了迭代预测。蓝线为磁体的实际位置,红线为NARX神经网络预测的位置。尽管该网络预测的时间提前了900步,但预测是非常准确的。

为了使并行响应(迭代预测)准确,重要的是对网络进行训练,使串并联配置(提前一步预测)中的误差非常小。

方法还可以创建并行(闭环)NARX网络narxnet命令,第四个输入参数设置为“关闭”,并直接训练这个网络。通常训练时间较长,结果不如串并联训练得到的效果好。

每次训练神经网络时,由于不同的初始权重和偏差值以及将数据分为训练集、验证集和测试集的不同划分,可以产生不同的解决方案。因此,针对同一问题训练的不同神经网络可以对相同的输入给出不同的输出。为了确保找到一个具有良好准确性的神经网络,需要重新训练几次。

如果需要更高的精度,还有其他几种技术可以改进初始解。金宝搏官方网站有关更多信息,请参见改进浅神经网络泛化,避免过拟合

多个外部变量

磁悬浮的例子展示了如何在一段时间内用单一的外部输入值对时间序列建模。但NARX网络将适用于具有多个外部输入元素的问题,并预测具有多个元素的序列。在这些情况下,输入和目标由表示时间的行单元格数组组成,但每个单元格元素都是N-by-1向量N输入或目标信号的元素。

例如,这是一个由2个元素外部变量组成的数据集,预测一个1个元素系列。

[X,T] = ph_dataset;

外部输入X格式化为2元向量的行单元阵列,每个向量表示酸和碱溶液流量。目标表示随时间变化的溶液pH值。

使用该函数,您可以将自己的多元素序列数据从矩阵形式重新格式化为神经网络时间序列形式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网络应用于开环形式、闭环形式和开/闭环多步预测的示例,请参见多步神经网络预测