首页 > 汽车技术 > 正文

数据驱动的动态系统(Dynamical System)建模(一):深度学习

2022-04-06 19:39:18·  来源:刘海伟 MATLAB  
 
仿真测试以及代码生成

Simulink 中的深度学习推断模块[链接8]支持将我们训练好的模型作为 block 参数, 一起作为被控对象集成到整个电池管理系统中。

图片

图表 7 电池管理系统和电池的系统模型

图中所示的 BMS 的 Simulink 模型可以监控电池状态,确保运行安全,还有一个电池模型用于仿真电池的动态和负荷。上面训练的深度学习 SoC 预测器和其他电池平衡逻辑 Block 一样嵌入在 BMS 中可以闭环仿真,以及后面做代码生成与硬件在环。

图片

图表 8 Simulink 中原生的用于深度学习推断的 Block 和 BMS 中的闭环测试 SoC 预测效果

图片

图表 9 deep learning 模块的 C 代码生成

上面这个示例我们利用衍生特征(通过时间滑窗构建时域依赖的特征,也可以通过不同长度的滑窗构建多尺度的时域特征),将前馈神经网络用于动态系统的建模。

Temporal convolutional network (TCN)

TCN 的主要构成是一个扩展因果卷积层。任何一个时刻的计算输出都是基于多个历史时刻的输入。

它用于构建动态系统的逻辑和前面介绍的衍生特征是类似的,都是考虑了历史的多个时间步的输入,因此也可以用于建模动态系统。

TCN 从之前的时间步构建依赖,通常需要将多个卷积层叠加在一起。为了获得更长期的依赖关系,卷积层的膨胀因子呈指数级增加,如下图所示。

假设第 k 个卷积层的膨胀因子为2ᵏ⁻¹⁾  ,步长为 1,则该网络的考虑到的依赖的时间窗的大小可计算为 R=(f-1)(2-1)+1,其中 f 为过滤器大小,K 为卷积层数。图中对应的 f=2,K=4, 于是 R=16, 也就是当前时刻输出可以考虑到前面 16 个时刻步长输入。

图片

与循环网络(RNN)相比,TCN 的缺点之一是它在推理期间占用更大的内存。计算下一个时间步需要整个原始序列。下图是一个经典的 TCN 模型结构(结合残差网络):[链接4]

for i = 1:numBlocks

    dilationFactor = 2^(i-1);

layers = [

convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding="causal",Name="conv1_"+i)

    layerNormalizationLayer

   spatialDropoutLayer(dropoutFactor)

convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding="causal")

    layerNormalizationLayer

    reluLayer

   spatialDropoutLayer(dropoutFactor)

    additionLayer(2,Name="add_"+i)];

    % Add and connect layers.

    lgraph =addLayers(lgraph,layers);

    lgraph =connectLayers(lgraph,outputName,"conv1_"+i);

图片

一般的 TCN 架构(如[1]中所述)由多个残差块组成,每个残差块包含两组具有相同扩张因子的扩张因果卷积层,然后是归一化层、ReLU 激活层和空间 dropout 层。

网络将每个块的输入加到该块的输出上(当输入和输出之间的通道数量不匹配时,对输入进行 1 × 1 的卷积),并应用最终的激活函数。

循环神经网络: LSTM/Gru

循环网络的结构与前馈神经网络不同,它带有一个指向自身的环,用来表示它可以传递当前时刻处理的信息给下一时刻使用,我们选取 LSTM 来介绍,结构如下,

图片

LSTM 之所以可以用于动态系统建模,是因为 LSTM 和动态系统有类似的特性:对于时刻 t, LSTM 使用当前网络的状态 (ht-1,ct-1) 和当前的输入 xt来计算网络输出 ht,同时更新当前网络的状态 (ht,ct),h也叫输出状态,就是当前时刻 t 的 LSTM 网络的输出,ct 称为 cell state,包含学习来的历史时刻的状态信息。每个时间步 LSTM 都会对 ct进行更新:添加信息或移除信息,主要通过四个门函数(f,g,i,o)来实现,将前面的计算过程示意性的描述一下:

图片

其中,上面方程中的 Wf,g,i,o, Rf,g,i,o, bf,g,i,o是这些门函数各自的可学习参数,主要包括针对输入 x的权重,针对上一时刻输出状态(同时也是当前时刻的输入)ht-1 的权重,以及偏置,这些可学习参数本身是无状态的,被所有时刻共享。训练的过程就是优化这些学习参数的过程。

总结一下:当前时刻的输出 ht不仅依赖于当前的输入xt还依赖于当前的状态 (ht-1,ct-1)。它可以根据训练选择性的记住每一时刻的“重要”信息,并且利用这个信息作为状态,结合当前输入 xt 进行输出状态 ht预测。

电机温度预测示例

接下来我们使用数据结合 LSTM 模型来搭建永磁同步电机(PMSM)的一个代理模型(Surrogate Modeling),用于电机不同位置的温度预测。

类似 Demo [链接5]

图片


理解数据集

数据集来自多片时长不同的数据。从数据中可以看到 PMSM 不同位置温度与电气系统和热系统对应的工况参数的相互影响。

同时环境温度的变化也会对电机不同位置温度以及相应需求扭矩所需的电流电压有影响。

我们使用环境温度、冷却液温度、电压、电流作为输入,输出为不同位置 PMSM 的温度。

图片

数据预处理与特征工程

同样作为一个动态系统,我们通过对初始数据再进行不同尺度滑窗实现衍生特征生成,所有特征结合在一起作为 LSTM 的输入(尽管 LSTM 本身也具有考虑时间依赖关系的特性)。

% create derived features using raw voltages and currents


derivedinputs =computedrivedfeatures(tt_data);


% check the noise in the data


tt_data=[tt_data derivedinputs];


Vnames=tt_data.Properties.VariableNames;


s1=620;s2=2915;s3=4487;s4=8825;


% preprocess exponentially weighted moving average


[t_s1,t_s2,t_s3,t_s4]=preprocmovavg(tt_data,s1,s2,s3,s4,Vnames);


% preprocess exponentially weighted moving variance


[t_v1,t_v2,t_v3,t_v4]=preprocmovvar(tt_data,s1,s2,s3,s4,Vnames);


% attach features to the original table


predictors=[tt_data,t_s1,t_s2,t_s3,t_s4,t_v1,t_v2,t_v3,t_v4,tt_profileid];


responses=[tt(:,9:12) tt_profileid];


VResponsenames=responses.Properties.VariableNames;

准备训练数据和验证数据

holdOuts =[657258]; % define profiles that are withheld from training.


[xtrain,ytrain]= prepareDataTrain(predictors,responses,holdOuts);

我们将使用第 58 条记录作为验证集,其中包括 4.64 小时的数据。

validationdata =58; 


[xvalidation, yvalidation]= prepareDataValidation(predictors,responses,validationdata);


 numResponses = size(ytrain{1},1);


 featureDimension = size(xtrain{1},1);


numHiddenUnits=125;


图片

上面的 DAG 网络可以对许多复杂的系统进行建模。通过上面的结构(左右两支)帮助我们对依赖于时间历史的物理行为动态行为以及含状态的行为进行建模。

查看预测结果

图片

如图所示,红色和蓝色分别代表了实测数据和模型预测结果,右侧图像显示的是他们的残差,可以看到大部分误差在 1% 以内,预测效果比较理想。模型在瞬态变化较快和较慢的工况下都能和实测数据保持一致,说明模型也保持了一定的保真度。

分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号