一维卷积是对一维输入数据应用滑动卷积来学习特征,其主要作用是对序列数据做局部特征提取。基于提取的特征可以进一步构建分类或回归网络。一维卷积的操作涉及卷积大小、步长以及填充形式和填充值。本文对一维卷积操作进行介绍,包括一维扩展卷积和一维因果卷积,以及 MATLAB 对一维卷积的支持情况。在最后通过一个实例演示如何在 MATLAB 中将一维卷积和 LSTM 结合构建分类网络,实现基于传感器数据的故障诊断。
1. 一维卷积
一维卷积操作过程如图1所示。图1中显示的卷积核的大小为 3(1×3的向量),滑动的步长(stride)为 2,采用 0 值填充(padding),填充可以在序列的最左侧,或者两侧填充,这需要根据具体需求决定。
图1 .一维卷积基本操作
基本的一维卷积操作过程中,卷积核的中心位置对齐输入序列的每个位置,卷积核沿着输入序列滑动,并在输入序列的每个位置计算加权和(步长等于 1)。默认设置下,卷积操作会在输入序列的两端进行填充(padding),输出结果的长度可以由以下公式计算:
其中:l 表示输出序列长度,i 表示输入序列长度;p 表示填充数据的总长度;f 表示卷积核长度;s 表示步长;floor 表示计算结果的下取整。
2. 一维因果卷积
因果卷积是一类特殊的一维卷积。基本的卷积操作会考虑输入位置的上下文信息,其不仅考虑位置之前的数据,还要考虑之后的数据。而因果卷积在处理输入序列的每个位置时,只依赖于当前及之前的位置信息,这在应对时间序列输入时,避免了信息泄露,即未来的信息不回影响过去的数据。因果卷积的卷积核最右侧位置对齐输入序列的开始位置,并根据步长滑动卷积核,因此输入序列通常会在开始部分进行填充。
图2 一维因果卷积操作过程
在实际应用中,一维卷积往往面对的是多个传感器输入序列,即多通道(每个通道对应一个传感器序列)输入,卷积核自身带有“厚度”,同时与所有通道上的数据做卷积后输出结果,因而一个卷积核合并多个通道的数据形成一个局部特征数据,如图3所示。
图3 一维多通道卷积
3. MATLAB 中的一维卷积
MATLAB 提供了一维卷积层 convolution1dLayer 实现对输入序列的卷积操作。其有多个属性用来设置卷积操作的过程,例如 FilterSize 用于定义卷积核的大小,NumFilters 定义卷积核的数量(卷积输出的通道数), Stride定义步长,等等。
convolution1dLayer 的属性 Padding 有两个值:same 和 causal。same 实现了一维卷积标准操作,在输入序列的两侧做填充,输出序列的长度等于ceil(输入序列长度/Stride),ceil是MATLAB的内置上取整函数。causal 实现因果卷积,只在输入序列左侧做填充。对于时间序列数据,causal 只关注当前位置即之前位置上的数据。
MATLAB 的 convolution1dLayer 也支持扩张卷积。扩展卷积(也称为空洞卷积,Dilated Convolution)是一种卷积操作,旨在增加卷积核的感受野,而不增加计算复杂度。通过在卷积核元素之间插入空洞(即零),扩展卷积可以在不增加参数数量的情况下捕获更大范围的输入信息。MATLAB 通过 convolution1dLayer 的属性 DilationFactor (膨胀系数)设置扩张卷积(也称空洞卷积),其数值的大小决定了卷积核元素之间空洞的大小。当 DilationFactor 的值为 1 时,卷积核元素之间不插入任何零值,与普通卷积相同。DilationFactor 值为 2 表示在卷积核元素之间插入 1 个零,为 3 表示插入 2 个零,依此类推。扩张卷积通过插入 0 值的方式扩大感受野,而参数数量并没有增加,进而可以提高计算效率。
针对时间序列数据,扩展卷积与因果卷积配合使用构建时间卷积网络 (Temporal Convolutional Network, TCN)。在MATLAB中,通过设置 convolution1dLayer 的 Padding 属性值为 causal,同时设置 DilationFactor 的值可以构建时间卷积网络。而此时对输入序列做左侧填充的大小为:(FilterSize - 1) .* DilationFactor。扩展卷积操作扩大了卷积层的输出位置的感受野,随着卷积层的增加,输出位置的感受野不断扩大。图4显示了在不增加参数数量(卷积核大小)的情况下,扩展卷积的膨胀系数(DilationFactor)呈指数增加,每个输出位置的感受野不断扩大。这使得网络能够捕获更大范围的局部信息。
图4 时间卷积网络的输出位置的感受野
4. 实现基于传感器数据的故障诊断
卷积网络的计算比循环网络更快,因为卷积操作可以通过单一运算来处理输入。相反,循环操作必须对输入的时间步进行迭代,进而其计算比较耗时。然而,循环网络时间步迭代使其能够捕获数据在时间上的依赖关系,可以学习到时间步之间的长期相关性,而卷积操作只是提取数据在局部的特征,并没有考虑时间上的关系。对于动态系统,往往存在着时间步之间的关系,识别这些关系对于诊断故障和预测寿命是非常重要的。因此,将一维卷积和循环网络联合使用。通过卷积提取输入序列的局部特征,减少序列长度,降低计算量;再通过循环网络捕获输入序列时间上的依赖关系,提高网络精度。这种结合在减少计算量的同时,也可以保证模型的精度。
本文将卷积网络和循环网络联合使用构建分类模型,实现基于传感器数据的故障诊断。利用上文提到的时间卷积网络提取输入数据的局部特征,并将由这些局部特征组成的新的序列数据输入 LSTM 网络捕获时间上的依赖关系,最后通过全连接网路输出故障类型,网络结构如图 5 所示。
图5 TCN LSTM的分类网络
图 5 显示的是使用 Deep Network Designer app 构建分类网络,其中一维卷积层 convolution1dLayer 采用扩展卷积核因果卷积。通过逐层增加 DilationFactor 的值来扩大感受野;并且每个卷积层的 Padding 参数都设置为 causal。lstmLayer 的隐藏单元向量维度设置为 64,outputMode 设置为 sequence,因此,lstmLayer 层的输出是一个隐藏状态向量序列,并且序列中的每个向量的维度为 64。在 lstmLayer 之后使用 globalMaxPooling1dLayer 层对输出结果在时间方向上做最大值池化,进而其输出结果为一个 64 维的向量。最后我们使用两个全连接层做线性变化,最终输出为 3 维的向量对应于故障种类。
使用在传感器数据的深度学习模型应用(一) – Transformer提到的数据集,该数据集,并直接在原始信号数据上做模型训练。原始信号数据是具有 146484 采样点一维数据。数据集进步划分为训练集和测试集,如下所示:
训练集(上)和测试集(下)
进一步将训练集再划分为训练集和验证集,并在模型训练过程中进行验证,以提高模型的泛化能力。
训练集(上)和验证集(下)
模型训练过程,MATLAB 提供了超参数选项实现模型的进一步调优,而超参数选项是通过 trainingOptions 函数设置的,包括初始学习速率、学习速率衰减策略、minibatch 大小、训练执行环境(GPU、CPU)、训练周期等等。经过 100 个 Epoch 训练后,模型的精度以及在测试集上的测试结果如图 6 所示:
图6 模型训结果(上)和测试集精度(heatmap)(下)
5. 总结
本文通过引入一维卷积对原始传感器数据进行直接处理,实现了模型训练过程的特征提取,节省了数据前处理中的特征提取工作。在卷积层提取的特征数据上应用LSTM层捕获数据的动态特征。这种网络结构充分发挥了各自网络层特点,进而实现基于动态数据的故障诊断。本文目的是为读者在序列数据分析方面提供一种思路,所使用的代码可以通过下方二维码扫码下载。文中的模型设计和训练还有可以优化地方,仅为读者提供参考,也欢迎大家做进一步模型结构调整和精度提升。
关注
2554文章
51700浏览量
758540免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com