故障预测

机器在运行过程中,会逐渐老化,失灵,同时也有小概率发生突发性的故障,引发意外,造成不可估计的严重后果

过去在故障检测这一方面,比较多的是,定期检测和抽样检测

定期检测需要的成本很大,如果是在工厂,就需要把所有机器都停了,逐个将机器拆解,检测,判断机器是否能够正常运行,不论是机器停产的代价还是逐个零件检查的人工成本都是巨大且难以负担的;而类似飞机这一类的产品,飞行过程中需要定期返回原厂检测的行为限制了它自身的使用率,以及对于飞行员而言,时刻掌握了解飞机在运行时候的健康情况是很有必要的,对防止意外发生很有必要

抽样检测顾名思义,并不检测所有的机器和产品,只抽查其中的几个或者一些,来判断整体的情况。显然,这种做法虽然节约了成本,但对检测结果来说不够全面,如果是一些简单的无关紧要的设备倒还好;但如果是事关生命的,类似于医疗器械之类的机器及产品,抽样检测的缺点就是致命的

对于故障检测,现代社会需要一种成本较低同时还能保证完备性的检测方法——基于深度学习的智能故障检测

数据

对于深度学习,最基础的也是最初的一步,大量的数据,有了大量的数据,深度学习模型才能一展拳脚,从原始的随机参数模型,逐渐学习最终达到较高的故障预测准确率

在机器故障检测中,数据类型有很多,例如监测设备的电流电压,温度湿度;记录机器的振动频率,运作声音等

电机的工作过程大多是周期重复的,流水线式的,记录设备的振动频率和周期对故障检测会比较有有效,也就是记录振动信号

数据类型及获取

设计好了深度学习的智能模型后,需要测试模型的工作效率,工作状态和健壮性

当然可以用自己私有的,机器的真实运行数据。更推荐的做法是,先用网上公开的,与自己数据类型相似相关的数据来测试模型,如果实际和理想的准确率有出入,可以根据前人已经训练好的模型,来精进自己的训练策略,到模型准确率较高时,再用自己的数据来学习训练

下面列举出了几个比较常用的,大众的,可获取的开源数据

Case Western Reserve University (CWRU)  Dataset

该数据集拥有多种数据,测量的时候,通过改变轴承的直径,检测的位置,马达的负载和转速,取样的频率等方式,在有限的实际设备中,生成多种有效数据。

CWRU数据集在实际使用中相当大众,是训练网络模型和检测网络性能的基本数据集。

但数据大多来源于实验室内,数据不够广泛,也不够真实。

Paderborn University Dataset

该数据集在高分辨率和高采样率的条件下,同步检测电机电流和振动信号。被检测的轴承中,26个为故障轴承,6个健康轴承。故障轴承中,12个为人为损坏,14个为加速寿命造成的更实际的损伤。人为的损坏多为人工钻孔或者人工划损;加速寿命所带来的故障数据,在使用上来说,更具真实性,它更多是因为老化而逐渐失去润滑。

它在提供振动信号的同时,也提供相对应的电流信息,促进完善着基于多物理特性的网络学习模型。

PRONOSTIA Dataset

比起检测轴承故障,该数据集更多是用在检测轴承的剩余有效时间(remaining useful life--RUL)。

它主要提供了在不同条件下的,真实的加速老化轴承数据。收集数据的传感器为转子传感器和压力传感器。

在高频率收集振动数据的同时,它也在监测着轴承的温度数据,便于神经网络从多个物理特性确定轴承的RUL。

Intelligent Maintenance Systems (IMS) Dataset

与普通的数据集不同,该数据集记录的不是人工造成损坏或者通过施加轴电流造成的加速老化故障,IMS数据集包含轴承缺陷演化的完整记录。

在一次故障出现之前,一个轴承要在2000转速情况下,连续运行30天,共约经历8千6百万次循环。

同样的,该数据集在监控震动信号的同时,也监督着轴承的温度(用来检测马达的润滑程度),适用于检测轴承的RUL。

图表总结

数据预处理

网上下载了开源数据或从工厂拿到的检测第一手数据普遍是不能够直接使用的,这是因为不同的深度学习模型有各自擅长处理的数据内容和形式

需要将原始数据向着模型需要的形式方向作转化,同时要最大限度地保留原始数据的数据特征和位置特征

下面是几种常用的数据预处理转换方式

二维图片转换

原有的振动时域信号是一维的,此处把原始一维的信号转换为二维的

假设要生成一个M×M的二维图片,需要长度为M²的一维数据

将长度为M²的数据分成M份,每份长度为M,把一份M作为二维图片里的一行数据,数据点就是这份数据里点的纵坐标,这样就得到了有M²个数据点的M×M的二维图片

具体流程如图所示

得到M×M矩阵的数值后,还需对数值作归一化处理,因为不同工作条件和环境下,数据的取值范围是有很大出入的

把数值归一化,把数据压缩在0~1之间,统一输入,对后面模型学习有一定的帮助,能让模型快速收敛

(简单的归一化方法:记录数据的最大值max和最小值min,对于每一个数据data作如下处理,data=(data-min)/(max-min),得到处理后的数据就是按照原来的差距比例换取的范围在0~1的数据)

把0~1的数据转换为灰度,数字越靠近1,颜色越深

最终得到一个基于原始采样数据的二维灰度图

多时间序列

一段原始的振幅信号,转换成二维的m×n的信号

一次转换采取原始数据的m段信号,每段信号长度为n,信号与信号的间距时间点为k的倍数,第一个间距是k,第二个是2k,如此类推(此处信号是可以有重叠的)

m和n的大小根据实际模型来推导,选用设计的模型需要多大的输入,就把m和n设置为相对应的大小,再对数据作预处理

除了m和n以外,还需要设置信号间的间距k,看起来k的设置是比较自由的,它不受实际的模型影响,可以按需要设置

但实际经验表明,当k是n的倍数或者被n整除时,模型训练总体达到的准确率比较高,转换后的数据隐含地保留了原始数据上每段n数据之间的相互关系,给网络模型提供了新的特征,模型 能更好地利用数据进行学习

CWT

CWT,连续小波变换,能把一段一维的振动信号分解为关于时域和频域的二维信号

电机运作是有一定频率,周期重复运作的,其振动信号也一定具有周期性

根据傅里叶原理,任何周期函数都可以转化为正弦函数和余弦函数构成的无穷级数来表示

我们要做的,就是把这些信号所对应的三角函数找出来,并计算其系数

在连续小波变换中,需要用到小波碰撞,小波碰撞就是用不同参数的小波函数与目标函数相乘碰撞求积分

小波的基函数为:

它由一个复三角函数乘上一个指数衰减函数构成的

复三角函数决定了函数的频率和周期(指数函数没有频率和周期,因此三角函数就直接决定了函数频率)

指数衰减函数决定了函数的持续时间(指数函数参数不同衰减快慢不一样,衰减慢,持续时间长,函数整体趋势平缓;衰减快,持续时间短,函数整体趋势陡峭)

其中,i是常数,w0代表中心频率(选定的基础单位频率),t为自变量(横坐标)

进阶函数:

在基函数之上,增加了两个可操纵的变量,a变量和b变量

其中,b代表平移距离,a代表自变量的缩放

用b变量操纵函数在横坐标上的平移(向左向右平移),用a变量倍率缩放函数的频率和周期

连续小波变换的运算实际就是用不同参数系数的小波函数,持续对原函数进行撞击和积分,最终得到原函数的频域时域关系图

(三角函数相乘,频率一致时,得到的积分最大;频率相近,积分有数值;频率相差较大,积分基本为0)

图示例子

如图所示小波碰撞后,只有靠近频率的函数,相乘后得到积分有正值,其他频率的周期积分都为0

综合多次碰撞得到的频域图可以看出,原始函数的频域为5,系数为200

因此,用不同的小波,不断与原始信号相乘,并积分,就可以获得对应信号频率分布,获取频域信息

(不同频率的小波,窗口大小不一样 ,频率高,窗口小;频率低,窗口大)

并通过信号相乘时,窗口的位置来确定频率的时域信息

与其他类似的转换方法对比

傅里叶变换(FT) 的基函数不具有紧支撑性,只能筛选频率,变换后完全丧失了时间信息,不具有时间分辨率。

短时傅里叶变换(STFT) 的基函数,具有了紧支撑性,既能筛选频率,也能筛选时间。但是它需要先确定频率,在与窗函数相乘构成,所以,不同的频率,具有相同的时间和频率分辨率,窗函数的长短也难以确定。

小波变换(CWT) 的基函数(小波函数),具有紧支撑性,既能筛选频率,也能筛选时间。小波函数可以在改变频率的同时改变窗长,达到了动态调控时间和频率分辨率的目的。

CWTS+PPSP

CWTS是在CWT方法上的一次改进,相对于CWT,CWTS对不同的机器转速会作特殊的相应处理,提高了变换图的转换效率,同时保留了故障特征的位置信息,得出的时域频域图更具有针对性

CWT变换后的效果图:

这是不同scale(基函数的在频率上的缩放)的小波函数对原始信号进行不断碰撞的结果,也就是连续小波变换尺度图

横轴是采样点时间(这里的时间单位是一次采样的时间,实际的时间根据具体采样频率而定)

纵轴是缩放大小,代表用于小波碰撞函数的函数频率和衰减速度,具体理解需要引入公式

选用的公式:

公式中的参数a就是图中的纵坐标scale,与原始公式稍微有点出入,该公式的频率和衰减速率都由参数a来控制

参数a变大,小波函数就被拉宽,频率降低,用来碰撞的窗口也变宽,衰减的速度减慢,函数整体趋势平缓

参数a变小,小波函数就被压缩,频率加快,用来碰撞的窗口也变窄,衰减的速度增加,函数整体趋势陡峭

下图为碰撞频率与碰撞窗口间的关系

左图可以看到,频率大小与窗口大小成反比,频率大,窗口就小;右图横坐标为时间,纵坐标则是scale,scale与频率f成反比,因此scale与窗口大小成正比,scale大,窗口就大

在连续小波变换尺度图中,像素点颜色深度,就是小波函数碰撞过后得到的数值结果,颜色越深,代表数值越大

例:图中单个像素点,坐标为(10,20),颜色深度为0.8,的具体意义为,在第10个采样时间点上 ,振动信号经过傅里叶变换,有频率w0/20的三角函数(w0为上文提到的选用中心频率),其系数为0.8(经过归一化处理)

到这里,如果直接把该图片作为模型的输入,会有两个问题

1.产生的二位图片数据量太大,如果直接接入模型,所需模型太大,参数太多,导致需要的计算量大,训练计算时间长,成本高

2.对于图片的纵轴,scale大小的上限设置多大比较合适,单纯从数学和公式上来说,应该用无数个不同频率的小波函数来对原函数进行碰撞,这在实际使用上显然是不可行

CWTS Cropping

由于上述问题,我们需要对CWTS,在时域和频域上,分别进行裁剪

裁剪时主要考虑两个问题

1.scale上限如何设置,能最小化或者消除有用数据的损失

2.时域上裁剪多长一段比较合理

时域裁剪

收集到的数据,除了在数值上的显式特征外,还有一些暗藏的隐式特征,例如,一定时间内,故障出现的次数;一次周期内,故障出现的相对时间位置等等

原始数据的振动频率是周期性的,对于特定的机器转速,数据的频率周期也不一样

但可以确定的是,不论是正常工作的频率还是故障的频率都会随着工作周期,有规律的按一定的频率出现

时域上的裁剪范围不合理,有可能会破坏原始数据的位置特征

例如:某故障特征一次工作周期出现两次,分别是在头部和尾部,但由于时域裁剪范围是半个周期,经过时域裁剪后,一半的图片在头部出现了该故障信号,另一半的图片则在尾部出现该故障信号,模型很有可能就会错误地认为这是两种故障特征,实际上,这只是一种故障特征地两种表现形式(裁剪范围不当,甚至会导致同一个位置的故障信号,分别出现在不同图片的多个位置,形成错误的信号位置特征)

想要保持故障频率在图中的相对位置一致,可以把时间宽度裁剪为一个轴承传动的周期,这样原始信号中,故障频率的位置特征就保存了下来

注意,这里的时间周期,指的是,一次轴承转动需要经历多少个采样时间点,我们需要把轴承转动的周期,转化为图片横坐标的时间点个数

比如采样频率为3000Hz,轴承转速为1000次/s,那一次轴承转动就需要经历3个时间点,将CWTS的时域裁剪为3个一份

具体公式:

假设q为轴承转动一次周期,经过了多少次采样时间点(即一次轴承周期需要多少个采样时间点)

f为采样频率,轴承转速为n(rpm),则轴承频率fm=n/60

q = f/fm = 60f/n

求出来的q就是一次周期所需的采样时间点个数,也就是一次裁剪的时间点长度

频域裁剪

这是上面提到的,CWT中基函数的公式,在实际转换开始前,需要先设置w0,也就是基频率,它决定了连续小波变换尺度图纵坐标的单位频率

w0一般设置为0.796到0.955,此处为了方便计算,取w0为0.955

这意味着,纵坐标上1的时候,该小波函数频率为0.955,一次周期需要1/0.955≈1.05个采样时间点

采样时,采样频率要比机器的运转频率高出很多,因此我们可以去除纵坐标0~1的区域(该区域的频率w0还高,w0的频率已经很接近采样频率了,机器故障运转频率不在这里面,此段数据无效)

因此,scale的下限取1即可(scale和频率成反比,频率取上限,scale取下限)

接下来就是限定频率的下限,也就是scale的上限

实际经验和理论表明:当机器出现故障时,机器运转的故障频率普遍比机器正常工作频率高

已经求出,正常运行的机器,一次工作周期需要q个采样时间点,在纵轴上对应的坐标为:0.955q

(由于周期和频率成反比,频率和scale成反比,因此周期和scale成正比,周期为1.05,scale取1,周期为q,scale取0.955q)

机器频率在纵坐标上对应的点为0.955q,因此在纵轴上,所有scale大于0.955q的数据(频率比机器工作效率低),对故障检测来说,都是无效数据,可以直接去除

因此,纵轴的上限就是0.955q,为了方便计算和增大容错率,直接取q即可

总结一下,CWTS裁剪,横坐标裁剪q长度一份,纵坐标裁剪1到q的部分

SPP

在不同转速下,经过CWTS处理,获得的二维图片大小是不一致的,但又要求用同一个模型来处理不同大小的数据,这就需要中间加一道自适应工序

对于不同大小的输入,始终输出恒定大小的数据

SPP(Spatial pyramid pooling),译名为空间金字塔池化

普通的池化一般是,固定池化大小,设置池化步长,对于不同的输入,输出一个降维后的数据(在原数据大小的基础上降k维度)

SPP池化则是,固定输出大小,变长设置池化大小和池化步长,对于不同的输入,都能输出一个固定维度的数据

假设在第L层,原始数据为M×M,公式为

filter=⌈M/L⌉

stride=⌈(M-filter)/L⌉

通过临时计算过滤器大小和池化步长,保证了输出大小一致,最后再把各池化层平铺,作为输入链接到全连接层

SPP的三个问题

1.SPP层的输出直接送入全连通层进行分类,在没有卷积层的情况下,SPP层所获得的特征可能无法得到充分的利用

2.原始数据的位置信息没有得到利用

3.全连通层的输入矩阵较大,参数很多,模型训练学习时计算量大,耗时成本高

PSPP

解决了SPP的三个问题

1.PSPP层的输出会直接接入卷积层,通过卷积运算,对PSPP的输出进行更深度的学习和特征提取,以及数据降维

2.PSPP不再是从1×1的池化输入开始向上堆积,而是只选择固定的几个池化输出层,将其复合作为最终输出,并且在反向传播的时候,根据池化的位置信息,乘以对应的权重之后,再进行学习

例:图中选择了3×3和4×4的池化输出层,合并的时候,4×4矩阵不动,3×3矩阵摊开,附着在4×4矩阵外面,组成一个5×5的矩阵,作为后面接入卷积层的输入

在PSPP的反向传播中,由于同一个原始二维数据,经过了多次的池化,在学习梯度时,就会有多个反馈的梯度,这里需要一个策略来综合学习多个梯度

对于这类梯度的计算,普遍有两个策略:

上策略是简单的求平均值,下策略是对梯度求加权平均(对于原3×3矩阵,梯度就乘上3×3的权重,再求平均,4×4矩阵类似)

运用下面的策略能够很好地把矩阵位置信息利用起来

反向传播时,虽然梯度都是从大的矩阵(例子中为5×5矩阵)反馈回来的,但实际上,从不同位置反馈回来的梯度,是有差别的

相对于从3×3的池化矩阵,4×4的池化矩阵更大,获取的特征信息更多,对模型的特征判断有更大的贡献

因此,在传播梯度时,应该给4×4矩阵赋予更高的权重,此处具体比例取等级的平方(3²和4²)

实验证明,加权平均梯度能更好的帮助深度学习模型更快收敛

峰值计算

预处理:

(1)对原始数据作高通滤波操作

(2)提取固定时域区间的最大值

(3)区域最大值排序,只保留大小相差较大数据的较大值(作为一个峰值保存下来)

具体操作如图所示,在实际使用中,统计一个信号的峰值,可以根据其峰值来判断信号的类型,经过统计经验得出,信号的峰值大于200,大概率为异常信号

模型

用神经网络深度学习模型对机器作故障预测,经过实践经验证明,是可行的,高效的

相对于过去浅层的学习模型,深度学习模型有着自动化,高准确率,健壮性强等优势

深度学习模型用机器自动学习,取代了浅层模型中,人工手动提取特征的步骤,通过公式的计算让机器能够自动学习,自动提取特征,这节约了实践中大量的人力资源成本

同时,高准确率以及对于不同环境仍能照常工作的强健壮性,也令深度学习模型在众多模型中脱颖而出

CNN

CNN,卷积神经网络,是深度学习模型的一种,它由三个部分组成,输入层,隐藏层和输出层

CNN被普遍用于图片识别

输入层获取数据,当原始数据不规整,不符合预期时,需要对数据先作预处理操作

隐藏层对数据作特征提取,学习判断,低层隐藏层负责获取表面特征,高层隐藏层把前边获取的特征数据组合起来,获取高层特征

输出层负责输出高层隐藏层的计算结果,若结果用于分类,则后接全连接层,计算分类,如果不用分类,则直接输出卷积二维运算结果即可

CNN的隐藏层普遍由卷积层和池化层组成(用于分类,就还包含全连接层)

卷积

卷积操作如图所示,卷积核与输入对应位置相乘后相加,计算完成,卷积核移动到下一个位置(移动距离和步长有关),继续进行卷积,直到所有输入都卷积完成,最终得到该卷积层的输出

输入经过卷积后,通常呈现降维趋势,如果经过多次卷积,输出的维度过小,会导致不能全面地保留数据原有地特征,为了扩大(保持)数据的大小维度,可以在卷积的时候添加padding层

M:输入长度

N:输出长度

S:池化步长

N=ceil(M/S)

输入除以步长,计算出理论输出大小的长度

F:滤波器宽度

PT=(N-1)×S+F-M

计算出,由原始滤波器大小F开始,进行N-1次滤波操作的数据长度,得到理论应有的输入长度

理论长度减去实际长度就是该填充的长度

PL=floor(PT/2)

PR=PT-PL

填充部分平均分到原始数据的两端

池化

普遍的池化策略有最大值池化和平均值池化

最大值池化如图所示(平均池化操作类似),池化是为了给数据进行降维,减缓模型在计算学习的时候,由于大参数带来的高时间计算成本

如果想要适度降低数据在大小维度上的降幅,或者遇到数据不能整除问题,可以类似卷积,添加零填充层

梯度下降

CNN通过卷积,池化层得出结果后,将计算结果和期望结果作对比,得到残差公式,再把相差的结果对模型中的每个参数作偏求导,最终得到各个参数的梯度

令各参数沿着其负梯度方向按比例调整数值,这就是梯度下降,也是深度模型能自动学习的秘密

具体公式:

LSTM

RNN,循环神经网络,由一个固定模块循环嵌套执行,擅长处理序列数据,能够学习数据中,前后有联系的相互特征

例如自然语言处理,单一地看字是识别不出语言的,需要联系前后文,把字组成词,再把词组成句子

在故障检测中也有类似的特征,单独看某一时间段的振动信号有时不能完整地判断机器运行状态,有可能它是被之前的故障振动影响了,需要综合前后的振动数据,最终判断机器的工作类型

在实际运用过程中,RNN面临着一个很大的问题:在使用链式法则进行梯度计算的时候,由于模型是嵌套组成的,计算一个梯度就会引入很多的嵌套计算,最终引发梯度爆炸,计算成本太大

LSTM,是一类特殊的RNN,它的出现增加了一个遗忘机制,通过丢弃不必要的信息,成功解决了RNN的梯度爆炸问题

它由三个部分组成:忘记门,信息增加门和输出门

忘记门

通过上一个嵌套的信息,再结合当前输入的数值,综合判断前面的信息对现阶段的模型是否有价值,计算出一个权重

有价值,就继续保留信息,没有价值,就直接把信息遗忘

具体公式

信息增加门

由忘记门判断是否归零序列信息后,模型还会根据输入,按公式把当前的信息和已有的序列信息结合起来,组成一个新的序列信息,并传给下一个嵌套模块

具体公式

输出门

输出门通过当前的输入数据和历史的序列数据,代入公式算出该模块的输出数据

模型通过流程得到输出后,把输出和标签作对比,根据残差值计算模型参数的梯度

由于模型参数是嵌套使用的,在计算的时候,需要把所有相关的链式梯度都合并在一起,所幸LSTM有遗忘机制,能够丢弃一部分低价值的嵌套数据,大大压缩最终实践计算的成本

GAN

GAN分为两部分,生成器和鉴别器

生成器

接受要用于伪造的数据(数据可以是准备好的,用于伪造成真实数据风格的素材,也可以像图中一样,是杂乱随机的数据点)

理想情况下,它能够输出基于原始信号的,具有真实信号风格的数据

鉴别器

分别从真实数据集和由生成器伪造的假数据集获取输入,经过网络模型学习,最终判断数据的真假

对抗

生成器尝试生成接近真实的数据集,以欺骗鉴别器,令鉴别器不能分辨出生成数据集的真假

鉴别器尝试分辨输入的数据,哪个是真实数据,哪个是生成的数据

学习

生成器和鉴别器交叉学习,其中一方学习时,另一方参数不变

训练刚开始时,生成器和鉴别器都是初始状态,不能够顺利完成任务

这时,需要先训练鉴别器,因为生成器的训练依赖于鉴别器的生成,而当生成器性能不佳时,鉴别器能更容易地抓取真实数据的特征,轻易判断出数据真假

等到鉴别器能比较稳定地识别数据真假性之后,再训练生成器,二者交替训练

直到最后,鉴别器识别出数据真假的概率稳定在50%,也就是达到了纳什均衡(不是每次博弈对抗,都可以达到纳什均衡,这就涉及到对抗收敛稳定性问题)

梯度计算公式

鉴别器公式

左乘积意思是,数据为真时,鉴别器判断数据为真的概率;右乘积意思时,数据为假时,鉴别器判断数据为假的概率

鉴别器需要想办法令该公式的值最大化,因此在算出梯度后,沿着梯度方向前进

计算梯度时,把此公式对D求导,再乘以D对相应参数的导数,可得梯度

生成器公式

在训练生成器时,不需要让鉴别器判断真实的数据这一步,因此公式只有一项,就是数据为假,鉴别器判断数据为假的概率

生成器需要令公式的值最小化,沿着梯度负方向前进(也可以把标签取反,把假数据的标签改为1,统一训练过程,沿梯度方向前进,便于操作)

在计算梯度时,把模型看成一个大型的网络(生成器和鉴别器合在一起),因为最后一层是在鉴别器里头,因此计算总梯度时,需要鉴别器的参数来计算出总代价函数对于生成器输出层的导数,然后再计算生成器的参数

具体情况处理

数据量较大

传感器的改进,各大公司学校开源数据的分享,有时会造成用于训练的数据量较大

此外,完成一个大型任务,需要的数据不一定集中在同一个数据库里,有时候数据是分散的,分布在不同的,不连通的数据库中

比如说多个公司合作,共同制作一个故障检测系统,每家公司的数据不相互共享,这种情况下,传统的,在同一个机器上训练智能模型的做法在这里行不通

数据量增加,模型深度增加,必然带来计算量的暴增。使用单一机器训练庞大的智能模型,会给机器带来巨大的负担,同时需要耗费大量的时间,成本高,计算效率低下

数据分布式平行处理

数据平行分布式处理,将一个模型分布到多个系统中,在各自的数据上训练学习,最终汇总到主系统中,完成模型训练

数据平行分布式需要遵守的原则

1.数学等价:数据分布式平行处理的结果,和数据在一台设备上运行的效果在数学上,逻辑上等价

2.非侵入性,拦截性:数据分布式,普遍是从一台设备上运行的基础上,扩展得到的。这要求我们在改进成分布式的时候,不去改变和重构模型原有的代码,而是在原有模型的基础上,添加一个数据平行的功能(非侵入性);子系统在数据计算完成后,产生的数据和信息,主系统要能够及时地获取,并运用这些数据,对模型进行精进,训练

3.高效性:性能和效率要比相同条件下的单个设备训练有优势

大体流程

1.模型分布:将原始模型,复制若干份,分别传输到各子系统中

2.数据平行训练:把初始模型复制若干份,分别传送到各个子系统中训练

3.梯度汇总:子系统将通过数据计算出来的梯度,传输汇总到主系统上(不使用参数汇总,因为参数汇总不能及时解决梯度冲突问题,最终会造成预测结果发散)

4.主系统在收集好所有梯度后,计算平均梯度,进行本地学习,再把新的参数更新到各子系统上

重复循环2 3 4步,直到模型训练完成

按照流程执行简单的数据分布式方案,在等价性和非侵入性拦截性方面没有问题,程序能够顺利运行,模型也可以训练成功

唯一的问题就是效率过于低下,不论时子系统在上传完数据后,等待参数反馈的等待时间;还是主系统训练完成后,等待各个子系统的汇总数据等待时间;还是数据传输时所需的传输时间,都大大降低了模型训练的效率

改进方案:

将原始方案的同步交流改成异步交流:

1.策略:

子系统在单次训练完成时,不与主系统进行交流和梯度汇总;在多次训练,获得多层梯度之后,再统一与主系统进行交流

2.优势:

子系统在一次训练后,无需挂机等待其他系统的参数汇总,主系统统一学习,而是直接开始进行下一次训练,这减少了原方案中的同步等待时间

在传输系统上,不同数据量,所对应的平均数据传输时间是有差异的

如图所示,一次性传输更多的数据,能使单位数据量的传输成本降低

数据在多次训练后再进行汇总,一次传输的数据量大,平均成本低,效率也就提高了

3.具体改进方法:

(1)设置bucket:

bucket的大小代表一次要存储的数据量上限,只有当存储的数据量达到了上线,子系统才统一跟主系统进行交流

bucket的大小也是有讲究的,设置小了,带宽使用不完全,信道没有发挥最大效能;设置大了,会导致类似使用参数汇总的问题,梯度得不到及时的缓冲,最终造成梯度冲突问题,训练结果发散,模型准确度不能收敛

实际使用的时候,先设置bucket大小为25MB(经过实践检测得到的性能较好的bucket大小),然后根据模型运行状况进行调整,模型训练速度慢,性能低下,就把bucket调大;模型准确度波动较大,不能稳定平衡,就把bucket调小

(2)设置autograd hook

对于每个参数的梯度都设置一个hook,当梯度计算好之后,将对应hook标为ready,当一个子系统的所有hook都为ready后,就把总的梯度数据汇总给主系统

如果只是设置交流标志,只需给总的梯度设置hook即可,但对每个梯度都设置hook,优势在于,一旦梯度计算出现了问题或者发生梯度消失,可以根据hook及时检测出问题所在的参数位置,及时进行策略调整和模型修正

在训练时,没有参与计算的参数(例如最大池化),自然没有梯度,在前向传递的时候就直接把对应的hook设置为ready,以免梯度计算完成后,集体等待一个不需要计算的梯度

(3)多次训练同时进行

bucket设置过大将会导致梯度不是及时汇总抵消,模型发散

为了提高传输效率,我们可以多次训练同时异步进行

这种方法,在保持bucket大小合适的同时,增大了一次传输的数据量大小,降低了单位数据的传输成本,增加了模型训练效率

另外,用数据对模型进行多次训练,最终得出的结果也更完备,具有说服力

未来发展方向

1.Layer Dropping

在每层向前推进的过程中,只随机选择其中的几个节点链接,传输数据;等到计算梯度,反向传播,学习改变权重的时候,就不需要计算每一个节点的梯度,只有个别节点的权重需要更新,传输效率变高,收敛速度也快了。

实验结果证明,这种方法在本地培训中效果很好,对模型的收敛速度有着相当显著的帮助,在对准确率影响不大的同时,大幅度减少了梯度的计算量。

可以考虑将这种提高效率的方法移植到分布式训练上

2.Gradient Compression

一般来说,除了出现梯度消失和梯度爆炸的问题时,梯度不需要过多的精准度,很多时候一个整数位即可

但当前的DDP实现总是使用参数类型作为梯度类型,这样储存一个梯度就需要一个浮点数大小的空间,梯度存储空间变成了原来的两倍

可以考虑适当压缩梯度,梯度减少,需要改变的权重就减少,减少每次迭代产生的数据量大小,加快传输速率

数据量不足

深度学习智能模型训练,需要大量的已标注数据作为输入,如果当前目标任务的已标注数据不足,那就需要用点技巧了

迁移学习

迁移学习就是利用现有的已训练好的模型,来给新的任务模型训练提供帮助

迁移学习在以下条件环境,比较适用

目标任务领域的数据(或者说有标注的数据)不足,不能支撑模型从零开始训练到收敛的状态

同时,在类似的领域上,有一个已有大量数据的,训练完备的模型;这时就可以利用已有的模型,对现有的问题解决,提供一定的帮助

总结一下,迁移学习需要两个前提

1.源领域的样本足够多,足够大

2.源领域和目标领域的样本足够相似(这里的相似需要独特的解释)

本文中对于相似的理解是,两个领域的特征领域一致,特征分布一致,就称两个领域相似

迁移学习的好处是,利用已有的模型,对于新的需要解决的类似的问题提供帮助

节省时间:模型不用从头开始训练,计算量少,收敛速度快

节省数据:模型是迁移过来的,不需要目标领域太多的数据,解决了数据荒的问题

缺点主要是不一定能找到符合特定“相似”条件的源领域模型,即使找到了模型在新问题上也不一定能顺利收敛

(在目标数据量足够的情况下,完全不需要迁移学习)

两个简单的具体使用方法

1.finetune

用别人训练好的网络来实现自己的任务,最常用的方法是,直接把别人网络模型的权重赋值到自己的模型上,单纯把损失函数修改一下,再用目标领域的数据对模型进行训练,直到收敛

(直接把别人的模型搬过来,参数也照搬,接上自己的数据接着训练)

2.fixed feature extractor

把别人训练好的网络当成已经训练好的特征提取器,截取前面几层卷积层作为新模型的特征提取器,后面连接上自己的全连接分类层,在模型训练中,只训练全连接层

(把别人训练好的模型,截取特征提取部分使用,接上自己的分类部分和数据训练)

本文的使用方法是第二种方法的扩展,把已训练的特征提取器截取过来,接上自己的分类部分;同时把源数据的特征向目的数据的特征靠拢,利用沃瑟斯坦距离来判断数据相似度

步骤:

1.把源数据上的特征提取器截取过来,作为特征提取使用

2.在数据提取器后面接上自己定义的分类器

3.分别用一段源数据和目标数据把特征提取器跑一遍,得到一些源特征和目的特征(其中源特征要跑完全程,也就是运行完后面的分类部分,并计算损失函数,获得梯度)

4.把源特征和目的特征接上判别器,判别两个特征的相似度(通过计算他们的沃瑟斯坦距离)

5.结合2 4的损失函数,最终改变三个部分的参数 θf, θc 和 θd (令2里面的损失函数最小;同时4里面的判别相似度最大)

6.重复上述步骤,直到参数收敛

具体公式

其中,ρ代表平衡系数,lwd是相似系数,α1是损失系数的学习率,α2是相似系数的学习率

lgrad是惩罚梯度,它的存在是为了解决梯度消失问题

在梯度下降计算中,梯度的计算用到的链式法则里头,需要很多次求导,这些求导里头就包括了,大量的对激活函数的求导

此时,如果激活函数普遍导数在0到1之间,则容易造成数字太小不好储存,最终梯度消失(反之,则会造成梯度爆炸)

这里是类似的操作,防止相乘的参数都过于接近0,导致最终梯度消失,在相似系数的计算中,加入了惩罚梯度

GAN生成数据

通过生成器和鉴别器对抗学习,最终训练出基于原始输入数据的,带有真实数据风格的数据

GAN的优势

DL模型训练通常需要大量的已标注数据,这给数据采集带来极大的麻烦

GAN的模型训练不需要已标注数据,对于真实数据和生成数据,它会自动硬标注为真和假(或1和0),计算梯度时就按这个标签来学习

GAN生成数据的能力,是相当有使用价值的,这一定程度上解决了模型学习时,数据量稀少的问题

并且GAN的鉴别能力,经测试,与一般的DL网络性能并无太大差距,甚至优于一些基本的DL网络模型

在原来基础上可以做的改进

1.去除卷积网络的池化层,鉴别器改用跨步卷积,生成器用部分跨步卷积,这样改进允许网络学习自己的空间采样方法

2.去除卷积网络深层链接的全连接层,简化了卷积神经网络结构

3.采用批标准化技术 ,在每层交互数据之前,都进行一次批标准化,有助于网络学习的快速收敛

特征杂糅

GAN去除特征

GAN除了可以生成特定风格的数据外,还可以用来去除某些特定的特征

在生成图片中,有时我们需要去除某种特征,例如雨天,雾天时,环境遮挡住了风景和人物,我们需要去除雨和雾对图片的影响

例子:去除图片中的窗户

策略方案:

添加若干张图片,这些图片被人工地画上了窗户

分别将原始数据和人工数据输入到生成器中,观察生成器的最后两层的卷积核 (卷积网络训练到深层时,卷积核会捕捉具有识别度较高的特征),若一个卷积核在人工数据中激活,在原始数据中沉寂,则删除该卷积核

把能够生成相应特征的卷积核去掉(关闭连接),再启动GAN生成图片,输出的图片就会去除本来该有的特征

上图为原图,下图为生成图,可以看到,生成的图片大多都没有了窗户,原本的窗户都变成了门或者柜子等其他房间特征

理论上,对于这种特征加减还可以任意组合,例:

通过特征的加减组合,最终能够生成具有理想特征风格的图片

这种去除特征的能力在故障诊断中也能发挥作用

有时候,好几种故障特征会相互重叠,糅杂在一起,不方便模型学习训练

这时,可以先提取数据中其中比较明显,易于提取的故障特征,再用GAN去除特征的功能,将数据中的该特征去除掉,然后再学习训练模型

训练后如果还有糅杂的故障特征,就继续重复上述步骤,提取简单特征,去除数据中的简单特征,这样一步步把糅杂的特征解开,最后把学习到的故障特征结合起来,组成最终能够识别多个故障特征的模型

一篇关于电机的深度学习故障预测综述相关推荐

  1. 一篇适合新手的深度学习综述

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|人工智能与算法学习 这篇综述论文列举出了近年来深度学习的重 ...

  2. 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)

    转自:http://www.tuicool.com/articles/jUz2Y3b 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文 ...

  3. 百来篇关于机器学习和深度学习的资料

    编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定期的更新,望看到文章的朋友能够学到更多. <Brief History of Machine Le ...

  4. 一篇就够用了——深度学习Ubuntu16.04环境配置+Win10双系统

    一篇就够用了深度学习Ubuntu16.04环境配置 必看!此教程使用说明 [必备配置]基本环境配置 1.win10+ubuntu16.04双系统安装 2.ubuntu最重要的事--切换下载源 3.ub ...

  5. 一文了解深度学习实战——预测篇

    本文将从四个案例 房价预测.泰坦尼克号生还预测.股票预测.影评情感预测 入手,让童鞋们从实战角度快速入门深度学习的预测部分! 目录 房价预测 基于决策树回归器(DecisionTreeRegresso ...

  6. 【重磅】Google元老Eric Schmidt发布《深度学习2020大综述》,深度学习集大成者

    关注上方"深度学习技术前沿",选择"星标公众号", 技术干货,第一时间送达! 最近谷歌元老级人物Eric Schmidt和Maithra Raghu发布了深度学 ...

  7. 论文合集 | 李飞飞新论文:深度学习代码搜索综述;Adobe用GAN生成动画(附地址)...

    来源:机器之心 本文约3200字,建议阅读7分钟. 本文介绍了李飞飞新论文,深度学习代码搜索综述,Adobe用GAN生成动画. 本周有李飞飞.朱玉可等的图像因果推理和吴恩达等的 NGBoost 新论文 ...

  8. 用物理学突破深度学习理论瓶颈? Google-斯坦福发布《深度学习统计力学》综述论文,30页pdf阐述深度学习成功机制...

    来源:专知 [导读]深度学习革新了很多应用,但是背后的理论作用机制一直没有得到统一的解释.最近来自谷歌大脑和斯坦福的学者共同在Annual Review of Condensed Matter Phy ...

  9. 深度学习算法简要综述(下)

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 124 篇文章,本文大约 3731 字,阅读大约需要 10 分钟 原文 ...

最新文章

  1. SSL协议安全系列:PKI体系中的证书吊销
  2. 下载和安装Nginx之普通的HTTP和HTTPS服务器
  3. C# 常用正责表达式
  4. python知识:numpy.geomspace()
  5. 流畅的验证组件:FluentValidation
  6. Python标准库:itertools迭代器函数
  7. NYOJ 171 聪明的kk
  8. 如何免费试用SAP的Fiori应用
  9. 基于python的性能负载测试Locust-6-脚本编写之使用HTTP client
  10. python 两个list 求交集,并集,差集
  11. python输出文本和值_Python有没有函数打印当前对象的所有属性和值?_others_酷徒编程知识库...
  12. 什么是信用评分分析?
  13. 阿里巴巴矢量图标库的使用,超详细用法
  14. 点击按钮复制指定代码
  15. IDEA打包jar包将依赖包打包到一起
  16. 全国计算机城市排名,这五大城市教育资源全国领先,各城市优质高校排行榜一定要收藏!...
  17. 硬件知识:打印机十个共性故障解决方法
  18. qq企业邮箱怎么删除邮件服务器,腾讯企业邮箱如何删除邮件,有什么要注意的呢?...
  19. java木马编码,深度好文:解码“深度伪装”的ZeuS网银木马
  20. android设置背景色为全透明和半透明

热门文章

  1. java中while使用方法_如何在Java中使用“ while循环”?
  2. python123不能登录_最近教务系统升级了。。用 python 爬时, URL 被加密了无法操作模拟登陆...
  3. php bcmul结果为0,php – 为什么bcmul返回的数字与我指定的数字不同?
  4. 华为smc服务器作用,华为SMC2.0助力企业统一融合平台
  5. Java获取指定日期所在周的周一和周日的日期
  6. #双11故事联播#开拓篇| 会花钱懂赚钱,财富产品团队的双11
  7. Vmware workstation安装文件无法复制问题
  8. 用LibreOffice生成或者更新的文档目录,用WPS Office打开,按住Ctrl键然后点击无法跟踪链接
  9. ETC,支付的蓝海还是红海?
  10. 亚马逊、Shopee、美客多店铺出单量如何提高?有何方法?