王丽蓉,郑东健
(1.河海大学 水利水电学院,南京 210098;2.河海大学 水资源高效利用与工程安全国家工程研究中心,南京 210098;3.河海大学 水文水资源与水利工程科学国家重点实验室,南京 210098)
为保证大坝安全,防止工程灾害发生,有必要做好大坝安全监测及评价工作。监测系统故障造成的测量误差及结构安全状态的变化使监测数据表现出多种异常模式,准确识别异常值为判断异常原因及分析大坝运行状态奠定基础。传统异常值识别方法有数学统计法、数学模型法等。常用的数学统计法如格拉布斯判别法忽略了监测数据随时间变化的特性,只能判断监测数据中的最小、最大值是否异常[1];回归模型法考虑了监测数据与温度、水位及大坝运行年限的关系[2],但是计算分析过程比较复杂。
卷积神经网络(CNN)是一种由多个处理层叠加而成的深度神经网络,具有自主抓取数据特征的特点和优秀的分类能力,适合二维数据处理(如图像识别),也能够解决可以转化为二维数据且具有较强局部相关性的问题[3]。基于CNN的结构健康监测研究主要集中在损伤识别[4]和裂纹检测两方面[5],另外CNN还广泛应用于各个领域的图像分类问题,如作物品种识别[6]、舰船目标识别[7]、断层识别[8]。
利用CNN进行数据异常识别,可以解决非最值异常点难以辨别的问题,并减轻数据处理压力。运行期大坝安全监测得到的监测数据往往是随时间周期性变化的序列,使得同一监测点在不同时间段形成的监测数据-时间过程线存在一定相似性,而异常数据则表现出显著差异。由原始监测数据绘制监测数据过程线,然后将过程线以图像形式输入CNN,利用CNN自主提取图像特征,并根据是否存在异常和异常种类将其分为6种类型;进一步对CNN进行改进,在分类完成后继续搜索异常位置。在监测过程中监测数据实时转化为过程线,利用CNN定时检测新增数据是否异常,可以实现自动、及时预警,让现场工作人员及时了解大坝安全状况。
本文基于CNN提出一种监测数据异常识别模型,以单个及多个突跳点、震荡段、台阶、台坎为监测数据异常模式,以原始监测数据绘制的过程线图像为输入数据,提取图像特征,同时识别异常类型和异常位置。CNN用于过程线图像分类,将其分为无异常过程线、1个突跳点过程线、3个突跳点过程线、震荡段过程线、台阶过程线、台坎过程线6种类别;若存在异常,则调用原始输入数据搜索异常位置,模型的识别过程见图1。由于异常监测数据不足,本文采用MatLab模拟生成的过程线图像作为试验数据。
图1 CNN模型数据异常识别过程Fig.1 Process of identifying anomalies of data by CNN
所提方法的实现步骤为:①采用MatLab模拟生成训练、测试数据;②利用训练数据训练CNN模型;③利用测试数据检验CNN模型的分类性能。步骤②和步骤③均采用图1所示识别过程,区别在于试验数据不同,且步骤②不断调整CNN网络参数。
将数据异常识别问题转化为图像分类问题,使用CNN作为特征提取器和分类器对监测数据过程线图像进行分类,将属于同一监测点的监测数据按相同时间长度划分为若干段,并分别生成监测数据过程线,若过程线存在突跳点、震荡段、台阶、台坎则认为数据异常。设置过程线图像类别如下:
(1)第1类:有1个突跳点(1个突跳点过程线)。
(2)第2类:无异常点(无异常过程线)。
(3)第3类:有1个震荡段(震荡段过程线)。
(4)第4类:存在台阶(台阶过程线)。
(5)第5类:有3个突跳点(3个突跳点过程线)。
(6)第6类:存在台坎(台坎过程线)。
CNN模型的输入数据为监测数据过程线图像;输出数据为图像编号、图像类别及异常位置。
2.1.1 Momentum权值调整
采用反向传播算法mini batch方案训练CNN,每10个数据为一组(batch size=10),采用Momentum方法调整网络参数。这意味着训练CNN时每输入10个数据,层间权值及卷积核就从输出层到输入层反方向地更新一次。以层间权值为例,采用Momentum方法的优点是使权值调整有方向性,提高训练的稳定性和训练速度。式(1)是Momentum方法的实现过程,可见每次的权值更新都包含之前的更新量,使得之前的更新量总是对新的权值调整产生影响,保证了权值调整的方向性,由于β<1,这种影响随步骤推移而减弱[9]。
式中:Δw为权值改变量;α为学习率;δ=φ′(v)e,φ′为当前节点激励函数的导数,v为当前节点输出的加权和,e为当前节点的误差;x若在中间层,为上一神经元节点输出,若在输入层,为神经网络输入;β为动量参数;m-为上一步的Momentum(动量);m为Momentum;w为权值。
2.1.2 ReLU与softmax激励函数
激励函数是神经网络的重要组成部分,它将网络从线性映射转化为非线性映射,从而提高神经网络的表达能力[3]。sigmoid函数见式(2),图像见图2(a)。
sigmoid函数导数易于计算且输出在0~1之间,被广泛用作激励函数,但当其输出接近0或1时,梯度总是接近0,即“梯度消失”,导致权值更新无法从输出端向输入端传递,使深度神经网络训练停滞。为克服sigmoid函数的缺点,CNN隐藏层采用ReLU激励函数,见式(3),图像见图2(b),当输入为负时输出0,输入为正时输出原数。在函数右侧梯度不会消失,这一优点使神经网络的训练速度高于使用sigmoid函数[10],且ReLU函数形式简单,降低了计算负荷。
图2 激励函数Fig.2 Activation functions
本文利用CNN解决六元分类问题,分类器应存在6个输出节点,输出层采用softmax激励函数,见式(4)。
式中v(i)(i=1、2、3、4、5、6)表示第i个输出节点的加权和。softmax函数将加权和转化为输出向量,向量元素y(i)表示图像为第i类的概率,0≤y(i)≤1,且例如输出向量为(0.02,0.80,0.08,0.02,0.03,0.05)T,说明CNN认为图像为第1—第6类的概率分别是0.02、0.80、0.08、0.02、0.03、0.05,因此CNN最终输出图像类别为第2类。由于存在6类图像,同时将图像标签转化为包含6个元素的标签向量,各元素值d(i)表示图像为第i类的概率,元素d(i)等于0或1,且如第2类图像的标签向量为(0,1,0,0,0,0)T。本文使用的训练数据和测试数据都包含图像标签,统计CNN输出类别与标签一致的图像占所有图像的百分比,可以检验CNN的分类性能。
2.1.3 交叉熵函数
损失函数是对神经网络误差的度量方式,以式(5)表示的交叉熵函数作为损失函数,由2.1.2节知d等于0或1,则表达式转化为式(6)。
式中:d为标签向量的元素;y为输出向量的元素;E为交叉熵函数计算值。
函数图像见图3,可见当y与d足够接近时函数输出趋近于0,而y与d的差异增大时,函数输出以几何增量增长,说明交叉熵函数对误差敏感,因此由交叉熵函数导出的学习规则通常能获得好的性能。
图3 交叉熵函数Fig.3 Cross entropy function
为了识别异常点所在位置,对CNN进行改进,增加异常位置搜索功能,搜索结果是用区间表示的异常位置范围。图4为搜索过程,每张图像(28像素×28像素)完成分类后,再调用原始输入数据进入异常搜索区块,为了尽量缩小异常位置范围,选择搜索步长为1像素。搜索块高度为28像素,宽度根据各类图像异常区域占图像面积大小选择,如图4,第1、第4、第5类图像的搜索块采用1像素宽度,而第3、第6类图像的搜索块采用4像素宽度。
图4 数据异常位置搜索过程Fig.4 Process of searching for the positions of anomalies
若分类结果为第1、第3、第4类图像,搜索块以1像素步长从左至右计算搜索块覆盖范围的图像像素强度平均值,遍历图像一次;若为第2类,输出异常位置为“0”,表示无异常;若为第5类,搜索块同上述操作遍历图像3次,以便搜索到3个突跳点;若为第6类,遍历图像2次,以便搜索到台坎左右两端。
待识别图像中过程线是白色而背景是黑色,使得图像过程线区域的像素强度很大(200左右),而背景区域的像素强度为0,因此像素强度平均值最大的区域为数据异常段。
每对一张图像完成分类,就识别此图像的异常位置,用区间(m,n)表示图像异常位置范围,第5类图像的异常位置包含3个区间,分别表示3个突跳点,其余5类分别包含1个区间;m、n分别表示异常范围的左、右像素坐标,且m、n均为整数,具体取值见表1。在实际应用中,CNN得到的异常区间(m,n)可以根据横坐标数值转化为具体时间段。
表1 m、n取值Table 1 Values of m and n
鉴于运行期大坝的安全监测数据过程线通常具有周期性,以正弦函数为基础用MatLab软件模拟生成6类28像素×28像素图像及每张图像对应的类别标签,分别为:存在一个突跳点的正弦图像(突跳点过程线,第1类)、无异常的正弦图像(无异常过程线,第2类)、存在1个震荡段的正弦图像(震荡段过程线,第3类)、存在台阶的正弦图像(台阶过程线,第4类)、存在3个突跳点的正弦图像(3个突跳点过程线,第5类)、存在台坎的正弦图像(台坎过程线,第6类)。以65 000张图像组成训练数据集,6 500张图像组成测试数据集,训练数据集和测试数据集都混合了6类过程线图像,且6类的数量比为第1类∶第2类∶第3类∶第4类∶第5类∶第6类=1∶1.5∶1∶1∶1∶1。
随机选取绘图参数,生成形态各不相同的大量过程线图像。图5为部分示例。曲线存在凹状和凸状,异常段的最值不一定是整条曲线的最值,如图5(a)左侧2张图像的突跳点既不是最大值也不是最小值,而图5(a)右侧2张图像的突跳点分别为最大值、最小值,控制图像生成过程使第1、第3、第5类图像中“异常段包含最值”的概率为50%;异常点随机出现在整条曲线的任何位置,且生成图像的数量足够多,充分完整地模拟异常数据及出现时间的多种可能性。
图5 模拟过程线图像Fig.5 Images that simulate process lines
构建的CNN模型包含分类区块和异常搜索区块,结构如图6所示,其中分类区块即为常规CNN,由一个特征提取器和一个分类器组成;搜索区块已在2.2节中详细介绍。CNN模型的输入数据为监测数据过程线图像;输出数据为图像编号、图像类别及异常位置。
图6 CNN模型结构Fig.6 Structure of CNN model
数据异常识别过程如下:监测数据过程线图像进入特征提取器,输入卷积层,通过卷积运算提取图像特征,一个图像输入卷积层后输出多个携带不同特征的图像;随后经ReLU激励函数进入池化层,将相邻像素合并为单个像素,以降低数据维数和运算负荷,并防止发生过拟合;池化后的二维图像经过向量化输入分类器,通过隐藏层再经ReLU激励函数进入softmax层进行分类;最后由异常搜索区块搜索异常位置。图像编号、图像类别和异常位置储存在同一向量中输出神经网络。
由于输入28像素×28像素的灰度图像,允许784(28×28)个输入神经元节点。卷积层包含20个9×9维的卷积滤波器,池化层使用1个2×2维的平均池化器,隐藏层由100个神经元节点组成;由于图像存在6个类别,构造有6个神经元节点的softmax层,即2.1.2节中分类器的6个输出节点。模型结构的参数见表2。
表2 CNN模型参数Table 2 Parameters of CNN model
编程软件为MatLab,卷积神经网络学习方案采用mini batch,batch size设为10,学习率设为0.001,动量参数设为0.009 5,激励函数采用ReLU和softmax函数,损失函数为交叉熵函数。CNN模型遍历全部(65 000个)训练数据一遍称为训练1代,运行程序4次,分别为训练2代、3代、5代、6代。每次运行程序,在训练完成后都识别同样的6 500个测试数据作为CNN分类准确率测试方法,得到总体分类准确率及各类图像分类准确率,见表3。可见运行次数1、1个突跳点过程线识别错误数量为191,表明第1次运行程序训练2代时,1 000张1个突跳点过程线测试图像中有191张没有被CNN识别为1个突跳点异常。
由表3可知:
(1)随着训练代数增加,CNN图像分类总体准确率提高,训练6代时,总体准确率达到最大值0.973 1。6种过程线的分类准确率都至少为0.93,除1个突跳点过程线外,其余5种过程线的分类准确率都在0.95以上。由于异常点不是最值的图像占第1、第3、第5类图像的50%,表明CNN对非最值异常点有较好的识别效果。
(2)随着训练代数增加,1个突跳点过程线最终分类准确率提升的倍数(1.149 6)最高;震荡段、3个突跳点过程线准确率略有增加;无异常过程线准确率保持在0.95以上,台阶、台坎过程线准确率保持在1左右。
(3)每一次运行程序,1个突跳点过程线的分类准确率都低于其他5种过程线;分析认为1个突跳点过程线识别准确率相对较低的原因是突跳点在图像中所占面积远小于其他类别,异常特征表现不明显,与无异常图像相似度高,增加了CNN特征学习的难度。
运行程序训练6代,分别绘制6类待识别图像的训练loss图,见图7。由图7可知6类图像的分类误差随训练进程趋近于0,表明CNN的分类能力逐渐提高;训练3代后,1个突跳点和无异常过程线的损失起伏点重合度高,震荡段和3个突跳点过程线的损失基本稳定在0附近,而台阶和台坎过程线的损失始终接近0,说明CNN倾向于将1个突跳点过程线与无异常过程线混淆。
表3 CNN图像分类准确率Table 3 Accuracy of image classification by CNN
图7 训练loss图Fig.7 Training loss
另外,选取了部分输入图像及其对应的输出数据制成表4,输出数据是由图像编号、图像类别及异常位置组成的向量,可见CNN输出可以定量展现数据异常识别结果。
表4 部分输入输出数据Table 4 Partial input and output data
本文基于卷积神经网络(CNN)构建了监测数据异常识别模型,通过CNN图像分类来识别监测数据异常模式,并改进CNN增加搜索异常数据位置的功能;通过人工生成的训练数据和测试数据分别训练和测试CNN模型,得到以下结论:
(1)随着训练代数增加,CNN图像分类准确率提高,训练6代时,总体分类准确率达到最大值0.973 1,6种过程线图像的分类准确率都至少为0.93。CNN对非最值异常点有较好的识别效果。
(2)CNN模型的输出是一个包含图像编号、图像类别及异常位置的向量,定量展现出数据异常识别结果。