吴立金,夏 冉,詹红燕,韩新宇
(中国船舶工业综合技术经济研究院,北京 100081)
故障预测[1-2]是一种主动容错技术之,与之相近的概念是故障检测、故障隔离和故障诊断,其区别如表1所示。
表1 故障预测相关概念
深度学习起源于神经网络,是机器学习[4]的一个新领域,通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征。本文提出一种基于深度学习的故障预测方案,利用深度学习算法处理装备状态监测和试验验证获得的海量故障数据,通过故障模型训练、故障特征识别、故障演化规律获取来进行装备故障预测。
基于深度学习的故障模型训练方法,主要分为有监督学习和无监督学习、半监督学习以及强化学习[5]。
1)有监督学习。在有监督学习中,进行模型学习的输入数据称为训练数据,需要输入到模型中进行检测的数据称为测试数据,训练数据具有自己的标签或者结果。
2)无监督学习是指不需要预先学习出模型,并且输入数据没有类别标签,而是通过推测输入数据中蕴含的结构来构造模型。无监督学习用于实时、高速处理情景。
3)强化学习中,数据的获取主要为来自外部环境的反馈,且模型必须对这些反馈数据做出反应。强化学习中反馈来自外部环境,动态调整参数从而达到强化信号的目标,适用于系统控制和机器人领域。
4)半监督混合学习是指样本数据由带标签和不带标签两种组成,先通过带标签的数据学习,再通过对未带标签数据进行知识发现找到隐藏的结构更新完善学习模型。半监督学习解决的问题主要是如何通过少量含有标签与大量不含标签的数据进行模型的训练和学习。
深度学习的计算成本和合适的训练方法造成一定的局限性。
1)基于模型的故障预测技术;主要包括两类:一类是基于失效物理模型,针对电子产品展开;另一类是基于系统的输入输出模型,或者是状态空间模型,典型代表是基于随机滤波理论的故障预测技术,主要方法包括卡尔曼滤波、扩展卡尔曼滤波、粒子滤波等。
2)基于知识的故障预测技术:主要有专家系统和模糊逻辑两种,适合定性推理,可以充分利用专家经验和知识,不适合于定量计算。专家知识的局限性和知识规则化表述的难度对象系统知识获取的瓶颈。
3)基于数据的故障预测技术:以数据为基础,通过数据分析处理方法挖掘隐含信息进行预测,成为了一种实用的故障预测技术[6]。随着机器学习与深度学习理论的发展,基于机器学习的方法成为装备故障预测技术的发展趋势。在复合故障的情况下,各个故障对系统存在交互作用,无法利用模式特征对复合故障进行故障建模与理论分析。深度学习不依赖前期假设,能够自动检测相互作用。常规的预测结果好坏取决于特征工程准备数据的能力,需要相专业知识和技能。深度学习无需对数据正确分布做假设,无需处理原始数据,能够自动学习预测性的特征。
故障预测技术分为静态故障预测和动态故障预测两种。
1)静态预测通过计算被测系统的质量属性以及根据历史故障记录训练好的预测模型,来对被测系统进行故障预测;
2)动态预测指的是对系统当前的运行状态进行监控,采集系统重要参数的信息,根据各个参数的安全阀值来对系统是否出现故障或者是否安全进行预测。
软件故障是突变故障,不适宜动态故障预测。根据软件的历史故障数据和质量属性软件缺陷静态预测。首先分析软件质量属性特征,然后对故障数据平衡化处理,最后形成软件缺陷静态预测模型并对模型进行训练。
基于机器深度学习的故障预测流程为:首先对装备传感器或试验的数据进行收集与处理,然后研究机器深度学习理论形成故障模型,在此基础上对基于机器深度学习故障模型进行训练,对装备故障进行特征识别并计算故障演化规律,如图1所示。
图1 基于深度学习的系统故障动态预测技术
装备故障数据表达各异,形式不统一,不能直接用于故障机器学习,研究故障数据收集与处理方法,使装备故障数据转换为能够被学习算法识别的数据。由于故障的多样性,系统往往需要对多种参数监测,参数的数据量是也不一样的,所以要选取有用的参数数据。对装备传感器获得以及试验数据收集并进行特点分析。
1)数据位判断故障分析,装备数据中包含大量的由传感器检测得到的故障标志和状态标志,此类型的故障信息完全由数据协议中定义好的。该类故障数据由单一量决定故障,并且故障与判据一一对应。
2)数据量越界分析,关键数据有边界限制,但是越界没有标志位,而取值超出上下限则是故障数据,
3)综合判断类分析,有时单个状态量均正常但是系统却处于不良状态的情况,该种类型的故障需要综合判断多个关键参数才能识别。
4)趋势关系类分析。系统的一部分故障参数的历史数据具有明显的趋势;还有一部是测试参数,在控制指令或处于某种状态和事件情况下,数据会随之发生变化。
分析装备数据不同特点,目的是使数据参数化。数据参数化是将不同格式的故障表达形式使用数据进行表示,保证数据格式符合要求,确保数据集中尽量没有无用数据,并且使数据格式符合机器深度学习算法需要的数据输入格式。
最后,对特征选择和提取。特征选择是数据降维的主要方法,从一个数据集的特征空间搜索到最优子集的过程,冗余特征以及不相关特征将被从原始特征集合中去除,从而保留对数据特征起决定区分作用的特征,可以极大地降低样本数据的维度,提高学习模型训练的效率。特征提取通过对原始特征集进行组合变换获取特征子集。
特征选择算法的主要目标是在原始特征空间中寻找特征子空间,常用的搜索算法分为:完全搜索算法、启发式搜索算法、随机搜索算法。完全搜索算法包括广度优先搜索、分支界定搜索、定向搜索、最优优先搜索。完全搜索算法需要对解空间进行暴力搜索,时间复杂度一般比较高,在特征属性比较多的时候一般不适用;启发式搜索算法主要包括序列前向选择、序列后向选择、序列双向选择、序列浮动选择等算法,启发式搜索算法可以省去一些多余的搜索路径,比完全搜索算法具有更高的效率;随机算法包括模拟退火算法、遗传算法等,这些算法过于依赖随机因素,有的实验很难进行重现。在实际的应用中,需要根据不同搜索算法以及特征空间的特点选择合适的搜索算法。
故障数据收集与处理提取能表现故障的特征数据并形成训练样本和识别样本,删除原始数据中的伪信息并归一化处理,使数据满足机器深度学习要求。
深度学习本质是计算观测数据的分层特征,其中高层特征由低层得到。常见的深度学习算法有:
1)深度信念网络(Deep Belief Network,DBN):由多层随机隐变量组成的概率生成式模型,最高的两层之间由无向对称边连接,低层接受来自上一层的自顶向下的有向边。
2)玻尔兹曼机(Boltzmann Machine,BM): 具有对称型连接的网络,它由与神经元相似的单元构成,能够控制随机决策开关的闭合。受限玻尔兹曼机(Restricted Boltzman Machine,RBM): 一种特殊的RBM,它由一个可见单元层和一个隐单元层组成,而且每条边必须连接一个可见单元和一个隐单元,同层单元间无连接。
3)深度神经网络(Deep Neural Network,DNN): 一种具有多个隐层的多层感知器,其权值是全部连接的,并且经常以无监督或有监督的方式初始化。
4)深度自编码器(Deep Autoencoder,DA): 一种“判别式”DNN。它的目标输出是输入数据本身,而不是类别标签,是无监督学习模型。
5)分布式表征(Distributed Representation,DR): 观测数据的内部表达,以众多隐因子之间的相互作用来建模,从其他因子结构学习到的某个因子可以很好地推广到新的结构。分布式表征经常出现在“连接”神经网络中,其中,一个概念由许多单元的行为模式表示,同时,同一个单元通常对许多概念都有贡献。这种多对多的映射提供了数据内部结构表达的鲁棒性,另一个重要的优点是它们促进了概念和关系的泛化。
基于深度学习的故障理论模型研究对现有的机器学习算法分析,对新兴深度信念网络、卷积神经网络、去噪自动编码器的算法进行深入研究,为故障模型训练奠定基础。
深度学习方法的目标在于分层次地学习特征,在每一层学习中高层次的特征是由低层次的特征学习构成的。在多层次的抽象过程中自动学习特征可以使机器学习系统从原始数据中学习到从输入映射到输出的复杂函数,而不再需要人类完全手工提取特征这样一个繁重而困难的过程。
基于深度学习的故障理论模型中,卷积神经网络就是一种深度的监督学习下的机器学习模型,而深度置信网、深度自编码器就是一种无监督学习下的机器学习模型。在故障数据收集与处理的结果和深度学习故障理论模型的基础上,进行有监督的训练和无监督的训练,形成基于深度学习的故障模型训练的可操作流程
根据训练好的故障模型和识别的故障特征,分析该特征的时间序列,对该特征进行时间演化[7]。对识别的多个故障特征进行关联规则分析,表示为模糊Petri网故障传播模型,形成故障特征单特征的时间演化规律和多特征的传播演化规律模型。
1)单特征的时间演化规律。通过监测系统的状态参数,采用时间序列法对故障特征参数进行预测,了解和掌握系统的运行状态及状态的变化,推测其状态的变化趋势,估计故障的传播、发展和系统的劣化趋势。主要步骤是根据历史和实时数据对未来参数值进行预测,使用时间序列,使用基于机器深度学习的故障模型和实时遥测数据Y(k),以及历史遥测数据Y(k-i)来计算模型的输出O(k+1)。单特征的时间演化规律是进行事故预防,实现预防性维修的主要手段。
2)多特征的传播演化规律,以基于机器深度学习的故障识别出的特征为基础,研究故障特征的关联规则和演化规律,建立故障演化动态模型。关联规则是对失效关系中的被影响项和影响项的确定。对于提识别的故障特征中,前项和后项存在关联失效关系,关联规则的前项目为被影响项,后一项为影响项,后项发生失效会引起前项失效。由每个故障特征的关联关系,得到所有故障特征的失效关联关系,就可以建立关联失效模型。
复杂装备其故障往往存在大量不可预测的不确定信息,例如故障的不确定性和传播性特点。分析出关联规则与Petri网理论的结合用于传播演化规律表示,使得故障预测与演化表述更加准确。Petri故障网的建模规则主要遵循方面的规则:一是根据系统的设备之间的关联关系建立网模型,二是根据变迁发生规则来描述系统故障信息的传播过程。Petri故障网的变迁发生规则应该能够反映系统故障信息传播情况,在系统故障传播过程中,有一因一果、一因多果、多因一果、多果多因、竞争模式等多种故障传播模式。
发掘性能参数或故障特征的变化规律,推测故障特征的变化趋势,估计故障的传播、发展和装备性能的变化趋势,进行故障趋势预测与演化分析,达到故障预防的作用。
基于机器学习的软件故障静态预测技术,主要挖掘出具有故障倾向模块的软件度量信息综合特征,尽可能多而准确的发现软件中潜在的缺陷,在开发过程中及时对代码进行可靠性设计和优化调整,提高可靠性和健壮性[8]。基于机器学习的软件缺陷静态预测技术途径如图2所示。
图2 基于深度学习的软件缺陷静态预测技术
软件故障静态预测的基本原理是:如果软件与之前已有软件具有相似的软件质量属性,则说明当前的软件具有相似的故障倾向。所以可用之前开发的软件版本模块的故障记录来进行预测。
1)软件质量特性分析以软件属性度量向量作为输入,主要属性度量包括软件项目的过程度量和产品度量。产品度量包括方法层、类层和包层度量等;过程度量包括人员度量、需求度量、代码变更度量等。
2)构建训练数据集。计算软件的质量属性,标注其是否发生故障的信息记录,将每一个软件对象都转换为特征向量的形式。对数据进行预处理,例如对数据缺失值的处理等。将软件划分成多个模块,选择合适的软件质量属性从各个角度对模块进行质量度量,得到对于每个模块的特征向量,根据模块的历史故障记录,得到的实例特征向量标注样本的类别标签即该模块是否发生故障,并对得到的实例集合进行归一化、消零处理,从而得到最终的训练数据集。
3)利用训练数据集,选用部分或者全部样本建立故障预测模型。对于不同的模型建立算法有不同的具体操作。输入没有标注类别标签的待预测样本属性向量集合后,利用训练好的预测模型可以根据每个实例的属性值以及构建好的预测模型生成的预测规则来对待预测的样本标注样本类别。通常将数据集分为训练数据集和测试数据集,训练数据集构建预测模型,测试数据集来对预测模型的性能进行评估,比如查准率、正确率和查全率等。
基于深度学习的故障预测系统使用开源的深度学习框架。常用的开源深度学习框架有TensorFlow、Caffe、Theano、Torch、Microsoft Cognitive Toolkit等,都能支持深度神经网络、卷积神经网络、深度信念网络、递归神经网络等模型。TensorFlow是谷歌开源通用深度学习框架,具有使用灵活、跨平台、产品化、高性能特点,系统的研制主要在TensorFlow基础上进行二次开发。
4.1.1 TensorFlow安装部署
TensorFlow提供Pip安装、Virtualenv安装、Anaconda安装、docker安装、源代码安装等安装方式。开源软件TensorFlow更新到1.2版,已支持Windows 7、10和Server 2016安装。TensorFlow分为CPU版和GPU版,安装GPU版需要安装CUDA、CuDNN两个驱动。
4.1.2 TensorFlow函数调用
基于深度学习的故障预测系统主要应用TensorFlow的如下API:
Tf.random_uniform([1],-1.0,1.0):构建一个tensor,shape为[1],值符合[-1,1)的均匀分布。其中[1]表示一维数组,包含1个元素。
Tf.Variable(initial_value=None):构建新变量,并会加入到TensorFlow框架的图集合中。
Tf.zeros([1]):构建一个tensor,该tensor的shape为[1],里面所有元素为0。
Tf.square(x,name=None):计算tensor的平方值。
Tf.reduce_mean(input_tensor):计算input_tensor中的所有元素的均值。
Tf.train.GradientDescentOptimizer(0.4):构建梯度下降优化器,0.4为学习速率。学习率决定迈向(局部)最小值的每一步的步长,设置的太小,下降速度会很慢,设置太大则会出现直接越过最小值现象。一般调到目标函数值减小并速度适中情况。
optimizer.minimize(loss):构建优化算子操作,使用梯度下降法计算损失方程的最小值。loss为需要被优化的损失方程。
Tf.initialize_all_vatiables():初始化所有TensorFlow的变量。
Tf.Session():创建一个TensorFlow的session,该session运行TensorFlow的图计算模型。
session.run():在session中执行图模型的运算操作。如果参数为tensor时,可以用来求tensor的值。
Tf.train.ClusterSpec({“ps”:ps_hosts,“worker”:worker_hosts}):创建集群描述信息,ps、worker为作业名称,ps_hosts、worker_hosts为作业的任务所在节点的地址信息。
Tf.train.Server(cluster,job_name,task_index):创建TensorFlow服务,用于运行相应作业上的计算任务,任务在task_index指定的机器上启动。
Tf.device(device_name_or_function):在指定的设备上执行tensor运算。
4.1.3 并行训练
TensorFlow能够支持在几百台机器上并行训练。分布式TensorFlow由高性能的gRPF库作为底层技术支持。TensorFlow集群有一系列任务组成。TensorFlow任务采用相同的训练模型在不同的小批量数据上进行训练,然后再参数模型服务器上更新模型的共享参数。TensorFlow支持同步训练和异步训练两种方式。异步训练在每个节点上的任务为独立训练方式,不需要协调操作。同步训练时每个节点的任务需要读入共享参数,执行并行化的梯度计算,然后将所有共享参数进行合并。
基于深度学习的故障预测主要解决以下关键问题:
1)能够从未标记的数据中学习,装备试验中大多数据都是未标记的,未标记的数据缺少与当前问题相关的明确“意义”,深度学习在数据中检测基本模式,归类相似条目或者识别异常值。
2)将深度学习方法引入故障预测领域,解决普通机器学习训练性能较差,预测效果不理想的现状,提高故障预测准确度。
3)针对常规预测方法难以分析复合故障的情况下各个故障对系统的交互作用,故障预测领域中尚未有故障演化规律研究现状,在深度学习识别的故障特征基础上,形成单特征的时间演化模型和多特征关联的Petri网模型。
4)针对软件故障机理具有突变性,不适宜基于深度学习的故障特征识别与故障演化方法,利用软件历史故障数据和软件质量属性对软件缺陷进行静态预测。
本文针对常规预测方法难以分析复合故障的情况下各个故障对系统的交互作用,难以分析装备数据复杂特征,难以实时、准确预测故障等现状,利用装备状态监测和试验验证获得的海量数据,将深度学习算法与装备故障数据特点相结合,形成基于深度学习的动态故障预测技术;针对软件故障突变的特点,研究基于软件质量特征的机器学习方法,形成软件缺陷静态预测技术。利用现代大数据和人工智能方法,提高装备故障预测能力。
[1] 连光耀,等.基于PHM的电子装备故障预测系统实现关键技术研究[J].计算机测量与控制,2010,18(9):1959-1961.
[2] 黄 波,等.基于RBF神经网络的某复杂装备故障预测方法[J]. 计算机仿真, 2014(01): 14-17.
[3] 严 蕾.基于改进随机森林的软件故障预测模型研究[J].西安电子科技大学,2013: 70.
[4] 周 浩.基于机器学习的E级系统故障预测关键技术研究[J]. 国防科学技术大学,2011:124.
[5] 李 曼.基于机器学习的故障识别方法与系统研制[J].北京交通大学,2015: 122.
[6] 房红征,等.基于粒子群优化神经网络的卫星故障预测方法[J].计算机测量与控制, 2013(07): 1730-1733,1745.
[7] 王 亮,等.基于数据驱动的装备故障预测技术研究[J].计算机测量与控制, 2013(08): 2087-2089,2105.
[8] 罗云锋,贲可荣.软件故障静态预测方法综述[J].计算机科学与探索, 2009(05): 449-459.