这个例子展示了如何使用长期短期记忆(LSTM)神经网络估计一个线性系统,比较该方法传递函数估计。
在本例中,您调查的能力一个LTSM网络捕获底层的动力学建模系统。要做到这一点,你训练一个LSTM网络的输入和输出信号的线性传递函数,和测量的准确性网络响应一个阶跃变化。
这个示例使用四阶传递函数与混合快和慢动力学和温和的阻尼。温和的阻尼导致系统动力学抑制在较长时间内,显示了一个LSTM网络的能力来捕获混合动力没有一些重要的反应动力学阻尼。构造传递函数通过指定系统的极点和零点。
fourthOrderMdl = zpk(4(9 + 5我;9-5i; 2 + 50我;2-50i), 5 e5);[stepResponse, stepTime] = (fourthOrderMdl)步;
情节的阶跃响应传递函数。
情节(stepTime stepResponse)网格在轴紧标题(“四阶混合阶跃响应”)
波德图展示了系统的带宽,这是作为第一个测量频率的增益下降低于70.8%,或约3 dB,直流值。
bodeplot (fourthOrderMdl)
fb =带宽(fourthOrderMdl)
fb = 62.8858
构造一个数据集的输入和输出信号,你可以用它来训练一个LSTM网络。为输入,生成一个随机的高斯信号。模拟响应的传递函数fourthOrderMdl
这个输入得到输出信号。
指定属性随机高斯噪声信号训练。
signalType =“该公司”;%高斯signalLength = 5000;%的点信号fs = 100;%采样频率signalAmplitude = 1;%最大信号幅度
使用生成高斯噪声信号idinput
和规模的结果。
开始= idinput (signalLength signalType);开始= (signalAmplitude / max(开始))*开始的;
生成时间信号采样率的基础上。
采用= 0:1 / fs:长度/ fs-1 / fs(开始);
使用lsim
函数生成的反应系统和存储的结果yrgs
。转置模拟输出,对应于LSTM数据结构,不需要行向量和列向量。
yrgs = lsim (fourthOrderMdl开始,采用);yrgs = yrgs ';
类似地,创建一个短验证信号在网络训练使用。
signalType xval = idinput (100);yval = lsim (fourthOrderMdl xval,采用(1:10 0));
以下网络体系结构是由使用贝叶斯优化常规的贝叶斯优化成本函数使用独立的验证数据(参见附带的bayesianOptimizationForLSTM.mlx
的详细信息)。尽管多个架构工作,这种优化提供最高效计算。优化过程也表明,随着传递函数的复杂性增加应用LSTM其他线性传递函数时,网络的体系结构并没有明显变化。相反,网络时代需要火车的数量增加。隐藏的数量单位所需的系统建模与动态花多长时间潮湿。在这种情况下有两个截然不同的部分回应:高频率响应和低频率响应。更多的隐藏单位需要捕捉低频率响应。如果低数量的单位选择高频响应仍建模。然而,低频率响应的估计恶化。
创建网络体系结构。
numResponses = 1;featureDimension = 1;numHiddenUnits = 100;maxEpochs = 1000;miniBatchSize = 200;Networklayers = [sequenceInputLayer (featureDimension)…lstmLayer (numHiddenUnits)…lstmLayer (numHiddenUnits)…fullyConnectedLayer (numResponses)…regressionLayer];
最初的成功网络学习速率的影响。使用一个初始学习速率太高导致高梯度,这导致更长的训练时间。更长的训练时间会导致网络的完全连接层的饱和度。网络使饱和时,输出发散和网络输出南
价值。因此,使用默认值为0.01,这是一个相对较低的初始学习速率。这个结果在一个单调减少残余和损失曲线。使用分段产量表防止优化算法陷入局部最小值的优化程序。
选择= trainingOptions (“亚当”,…“MaxEpochs”maxEpochs,…“MiniBatchSize”miniBatchSize,…“GradientThreshold”10…“洗牌”,“一次”,…“阴谋”,“训练进步”,…“ExecutionEnvironment”,“图形”,…“LearnRateSchedule”,“分段”,…“LearnRateDropPeriod”,100,…“详细”0,…“ValidationData”,{xval '} {yval}]);loadNetwork = true;%设置为true来训练网络使用一个平行的池。如果loadNetwork负载(“fourthOrderMdlnet”,“fourthOrderNet”)其他的poolobj = parpool;fourthOrderNet = trainNetwork(开始、yrgs Networklayers,选项);删除(poolobj)保存(“fourthOrderMdlnet”,“fourthOrderNet”,“开始”,“yrgs”);结束
网络表现良好如果成功捕获系统的动态行为。评估网络性能通过测量网络的能力来准确预测系统阶跃输入响应。
构造一个阶跃输入。
stepTime = 2;%在几秒钟内stepAmplitude = 0.1;stepDuration = 4;%在几秒钟内%建立步骤和系统输出的信号。时间= (0:1 / fs: stepDuration) ';stepSignal = [0 (sum(时间< = stepTime) 1); stepAmplitude *的(和(时间> stepTime), 1)];systemResponse = lsim (fourthOrderMdl、stepSignal、时间);%的转置输入和输出信号为网络的输入。stepSignal = stepSignal ';systemResponse = systemResponse ';
使用网络训练评估系统响应。比较系统和估计反应在一个阴谋。
fourthOrderMixedNetStep =预测(fourthOrderNet stepSignal);图的标题(“阶跃响应估计”)图(时间、systemResponse“k”、时间fourthOrderMixedNetStep)网格在传奇(“系统”,“估计”)标题(“四阶一步”)
情节显示了两个适合的问题。首先,网络的初始状态不固定,导致瞬态行为的信号。第二,网络的预测有一个轻微的偏移量。
初始化网络状态正确的初始条件,你必须更新网络状态对应于系统的状态的测试信号。
你可以调整网络的初始状态进行比较的估计响应系统的实际响应系统的初始条件。使用不同网络的初始状态估计与实际响应的初始状态为抵消系统中正确的估计。
随着网络执行评估使用阶跃输入从0到1,美国LSTM网络(细胞和LSTM层的隐状态)转向正确的初始条件。可视化,提取网络的细胞和隐藏的状态在每一个时间步使用predictAndUpdateState
函数。
只使用细胞和隐藏状态值前一步,这发生在2秒。定义一个时间标记2秒,并提取到这个标记的值。
stepMarker =时间< = 2;yhat = 0 (sum (stepMarker), 1);hiddenState = 0(金额(stepMarker), 200);% 200 LSTM单位cellState = 0(金额(stepMarker), 200);为ntime = 1: sum (stepMarker) [fourthOrderNet, yhat (ntime)] = predictAndUpdateState (fourthOrderNet, stepSignal (ntime) ');hiddenState (ntime:) = fourthOrderNet.Layers .HiddenState (2, 1);cellState (ntime:) = fourthOrderNet.Layers .CellState (2, 1);结束
接下来,情节隐藏和细胞状态在此期间前一步,确认他们收敛到固定值。
图次要情节(2,1,1)情节(时间(1:200)hiddenState(1∶:))网格在轴紧标题(“隐蔽的状态”次要情节(2,1,2)情节(时间(1:200)cellState(1∶:))网格在轴紧标题(“细胞状态”)
初始化网络零输入信号的状态,选择一个输入信号的零和选择的信号足够长时间,这样网络达到稳定状态。
initializationSignalDuration = 10;%在几秒钟内initializationValue = 0;initializationSignal = initializationValue * 1 (1, initializationSignalDuration * fs);fourthOrderNet = predictAndUpdateState (fourthOrderNet initializationSignal);
即使有正确的初始条件给定一个网络时零信号,输出不为零。这是由于一个错误的偏见术语,该算法在训练过程中学习。
图zeroMapping =预测(fourthOrderNet initializationSignal);情节(zeroMapping)轴紧
现在网络是正确地初始化,再次使用网络来预测阶跃响应和策划的结果。初始扰动消失了。
fourthOrderMixedNetStep =预测(fourthOrderNet stepSignal);图的标题(“阶跃响应估计”)图(时间、systemResponse“k”,…时间、fourthOrderMixedNetStep“b”网格)在传奇(“系统”,“估计”)标题(“四阶一步——调整状态”)
即使在网络初始状态设置为弥补测试信号的初始条件,一个小抵消仍可见的预测反应。这是由于错误的偏见术语LSTM网络在训练学习。你可以修复使用相同的初始化信号,抵消了用于更新网络状态。初始化信号将网络映射到零。零和网络之间的偏移估计偏差的误差项由网络学习。求和偏差项计算在每一层接近偏差检测的响应。调整网络的偏见词汇在网络输出,然而,比调整个人偏见容易在网络的每一层。
偏见=意味着(预测(fourthOrderNet initializationSignal));fourthOrderMixedNetStep = fourthOrderMixedNetStep-bias;图的标题(“阶跃响应估计”)图(时间、systemResponse“k”、时间、fourthOrderMixedNetStep“b -”)传说(“系统”,“估计”)标题(“四阶一步——调整抵消”)
所有的信号用来训练网络的最大振幅1和0.1阶跃函数的振幅。现在,调查网络这些范围之外的行为。
引入一个时间的转变,调整的时间步骤。一步的设置时间3秒,1秒的时间比在训练集。情节产生的网络输出和注意,正确输出延迟了1秒。
stepTime = 3;%在几秒钟内stepAmplitude = 0.1;stepDuration = 5;%在几秒钟内(stepSignal、systemResponse、时间)= generateStepResponse (fourthOrderMdl、stepTime stepAmplitude, stepDuration);fourthOrderMixedNetStep =预测(fourthOrderNet stepSignal);偏见= fourthOrderMixedNetStep (1) - initializationValue;fourthOrderMixedNetStep = fourthOrderMixedNetStep-bias;图绘制(时间、systemResponse“k”、时间、fourthOrderMixedNetStep“b”网格)在轴紧
接下来,阶跃函数的振幅增加调查网络行为作为系统输入训练数据的范围之外的。测量漂移之外的训练数据范围,你可以测量的概率密度函数,高斯噪声信号的振幅。在柱状图可视化振幅。
图直方图(开始,“归一化”,“pdf”网格)在
组根据阶跃函数的振幅分布的百分比。情节错误率作为一个百分比的函数。
pValues = (60:2:98, 90:1:98 99:0.1:99.9 99.99);stepAmps = prctile(开始,pValues);%振幅stepTime = 3;%在几秒钟内stepDuration = 5;%在几秒钟内stepMSE = 0(长度(stepAmps), 1);fourthOrderMixedNetStep =细胞(长度(stepAmps), 1);步骤=细胞(长度(stepAmps), 1);为nAmps = 1:长度(stepAmps)%四阶混合(stepSignal、systemResponse、时间)= generateStepResponse (fourthOrderMdl、stepTime stepAmps (nAmps) stepDuration);fourthOrderMixedNetStep {nAmps} =预测(fourthOrderNet stepSignal);偏见= fourthOrderMixedNetStep {nAmps} (1) - initializationValue;fourthOrderMixedNetStep {nAmps} = fourthOrderMixedNetStep {nAmps}偏见;stepMSE (nAmps) =√总和(systemResponse-fourthOrderMixedNetStep {nAmps}) ^ 2));步骤{nAmps 1} = systemResponse;结束图绘制(pValues stepMSE,“波”)标题(的预测误差的函数偏离培训Rrange”网格)在轴紧
次要情节(2,1,1)情节(时间、步骤{1}“k”、时间、fourthOrderMixedNetStep {1},“b”网格)在轴紧标题(“最佳表现”)包含(“时间”)ylabel (系统响应的次要情节(2,1,2)情节({}结束时间、步骤,“k”、时间、fourthOrderMixedNetStep{}结束,“b”网格)在轴紧标题(表现最差的)包含(“时间”)ylabel (系统响应的)
随着阶跃响应的振幅在训练集的范围之外,LSTM试图估计响应的平均值。
这些结果显示使用训练数据的重要性在同一范围的数据将被用于预测。否则,预测结果是不可靠的。
调查系统带宽的影响隐藏单位的数量选择LSTM网络建模的四阶mixed-dynamics与四个不同的网络传递函数:
与5隐藏的单位和一个小型网络LSTM层
媒介网络10隐藏单元和一个LSTM层
与100隐藏单位和一个完整的网络LSTM层
深层网络2 LSTM层(每100个隐藏单位)
加载训练网络。
负载(“variousHiddenUnitNets.mat”)
生成一个信号。
stepTime = 2;%在几秒钟内stepAmplitude = 0.1;stepDuration = 4;%在几秒钟内%信号构造步骤。时间= (0:1 / fs: stepDuration) ';stepSignal = [0 (sum(时间< = stepTime) 1); stepAmplitude *的(和(时间> stepTime), 1)];systemResponse = lsim (fourthOrderMdl、stepSignal、时间);%的转置输入和输出信号为网络的输入。stepSignal = stepSignal ';systemResponse = systemResponse ';
估计使用各种训练网络的系统响应。
smallNetStep =预测(smallNet stepSignal) -smallNetZeroMapping(结束);medNetStep =预测(medNet stepSignal) -medNetZeroMapping(结束);fullnetStep =预测(fullNet, stepSignal)——fullNetZeroMapping(结束);doubleNetStep =预测(doubleNet, stepSignal)——doubleNetZeroMapping(结束);
情节估计响应。
图的标题(“阶跃响应估计”)图(时间、systemResponse“k”,…时间、doubleNetStep‘g’,…时间、fullnetStep“r”,…时间、medNetStep“c”,…时间、smallNetStep“b”网格)在传奇({“系统”,“双网”,“充分净”,“地中海净”,“小净”},“位置”,“西北”)标题(“四阶一步”)
注意所有网络捕获的高频动态响应。然而,情节的移动平均反应为了比较缓慢的不同系统的动力学。LSTM捕获能力的长期动力学(低频动力学)的线性系统直接相关的动力系统和LSTM隐藏单位的数量。LSTM层的数量是没有直接关系的长期行为,而是增加了灵活性调整估计从第一层。
图的标题(“慢动力学组件”)图(时间、movmean (systemResponse, 50),“k”)举行在情节(时间、movmean (doubleNetStep, 50),‘g’)图(时间、movmean (fullnetStep, 50),“r”)图(时间、movmean (medNetStep, 50),“c”)图(时间、movmean (smallNetStep, 50),“b”网格)在传奇(“系统”,“双网”,“充分净”,“地中海净”,“小净”,“位置”,“西北”)标题(“四阶一步”)
随机噪声添加到系统输出探索噪声LSTM性能的影响。为此,添加白噪声水平的1%,5%和10%测量系统响应。使用的数据训练LSTM网络。用相同的噪声数据集,估计线性模型使用特遣部队
。模拟这些模型,并使用模拟响应性能比较的基线。
像以前一样使用相同的阶跃函数:
stepTime = 2;%在几秒钟内stepAmplitude = 0.1;stepDuration = 4;%在几秒钟内(stepSignal、systemResponse、时间)= generateStepResponse (fourthOrderMdl、stepTime stepAmplitude, stepDuration);
负荷训练网络和估计系统响应。
负载(“noisyDataNetworks.mat”)netNoise1Step = predictAndAdjust (netNoise1、stepSignal initializationSignal, initializationValue);netNoise5Step = predictAndAdjust (netNoise5 stepSignal、initializationSignal initializationValue);netNoise10Step = predictAndAdjust (netNoise10 stepSignal、initializationSignal initializationValue);
一个传递函数估计量(特遣部队
)用于估计函数在上述噪音水平比较的弹性网络噪声(参见附带的noiseLevelModels.m
更多的细节)。
负载(“noisyDataTFs.mat”)tfStepNoise1 = lsim (tfNoise1、stepSignal、时间);tfStepNoise5 = lsim (tfNoise5、stepSignal、时间);tfStepNoise10 = lsim (tfNoise10、stepSignal、时间);
情节生成的反应。
图绘制(时间、systemResponse“k”,…时间、netNoise1Step…时间、netNoise5Step…时间,netNoise10Step)网格在传奇(系统响应的,“1%噪声”,“5%噪声”,“10%噪声”)标题(“深LSTM嘈杂的数据”)
现在,情节估计传输功能。
图绘制(时间、systemResponse“k”,…时间、tfStepNoise1…时间、tfStepNoise5…时间,tfStepNoise10)网格在传奇(系统响应的,“1%噪声”,“5%噪声”,“10%噪声”)标题(的传递函数拟合数据)
计算均方误差,以更好地评估不同模型的性能在不同的噪声水平。
msefun = @ (y, yhat)意味着(倍根号((y-yhat) ^ 2) /长度(y));% LSTM错误lstmMSE (1) = msefun (systemResponse netNoise1Step);lstmMSE (2) = msefun (systemResponse netNoise5Step);lstmMSE (3) = msefun (systemResponse netNoise10Step);%传递函数错误tfMSE (1) = msefun (systemResponse tfStepNoise1 ');tfMSE (2) = msefun (systemResponse tfStepNoise5 ');tfMSE (3) = msefun (systemResponse tfStepNoise10 ');mseTbl = array2table ([lstmMSE tfMSE),“VariableNames”,{“LSTMMSE”,“TFMSE”})
mseTbl =3×2表LSTMMSE TFMSE __________ __________ e-05 1.0115 8.8621 3.6831 5.1791 9.9064 2.5577 e-07 e-05 e-06 e-05 e-05
噪声也有类似的影响在LSTM和传输函数估计的结果。
函数(stepSignal、systemResponse、时间)= generateStepResponse(模型、stepTime stepAmp signalDuration)%为给定的生成一个阶跃响应模型。%%检查模型类型modelType =类(模型);如果输入参数个数< 2 stepTime = 1;结束如果输入参数个数< 3 stepAmp = 1;结束如果输入参数个数< 4 signalDuration = 10;结束%建设步信号如果模型。Ts = = 0 = 1飞行;时间= (0:Ts: signalDuration) ';其他的时间= (0:model.Ts: signalDuration) ';结束stepSignal = [0 (sum(时间< = stepTime) 1); stepAmp *的(和(时间> stepTime), 1)];开关modelType情况下{“助教”,“zpk”}systemResponse = lsim(模型、stepSignal时间);情况下“idpoly”systemResponse = sim(模型、stepSignal时间);否则错误(“模型不支持通过”金宝app)结束stepSignal = stepSignal ';systemResponse = systemResponse ';结束