怎么运用MATLAB构建Transformer模型
Transf。or。mer 模型在 2017 年由 Vaswani 等人在论文《At。te。n。ti。onis All You Need》中初次提出。其规划初衷是为了处理自然语言处理(Nature LanguageProcessing, NLP)中的序列到序列使命,如机器翻译。Transformer 通过引进自注意力机制使得处理长距离依靠联系时变得高效。因而 Vaswani 等人的论文着重“注意力是所需的悉数”。
传感器。数据体现为时刻序列,而且序列内部往往存在时刻上的依靠联系,这些时刻上的依靠能够反映出设备的当下或未来的状况,怎么发现和发掘序列内部的常识和依靠联系,是以传感器表征设备状况的。工业。领域中毛病诊断重视的要点。
本文中首要重视 Transformer 在传感器数据中的运用,通过其。编码器。功用捕获序列内部依靠联系,尤其是长距离的依靠联系,并生成输出数据做进一步处理。后续的内容将对图 1 中的编码器的功用及其在。 MATLAB。中的完成做进一步介绍,终究通过一个事例演示在 MATLAB 如怎么规划和构建 Transformer 的编码器。网络。,并在。信号。数据会集进行练习,一起也展现了通过开始练习后的模型在测验集上的杰出测验成果。因为篇幅所限,文章中不能展现悉数进程的 MATLAB 代码,假如读者想要测验运转代码,能够扫码后通过供给的链接进行。下载。。
1. Transformer 模型。
Transformer 模型的中心是自注意力机制(Self-Attention Mechanism)及彻底依据注意力的编码器-解码器架构。图1显现了在论文《Attention is All You Need》中提出的 Transformer 架构,其首要由编码器(Encoder,图 1 中左边部分)和解码器(Decoder,图1中的右侧部分)两个部分组成,编码器的输出序列将编码器和解码器相关起来,构建跨序列的注意力机制。
图 1 Transformer 架构。
Transformer 编码器(Encoder)专门用于处理输入序列,通过引进自注意力机制,使其能够高效地捕捉序列中的长距离依靠联系。而这种依靠联系体现为输入序列不同方位之间的相关性。而且将相关性。信息。加入到输出序列中,使得输出数据包含丰厚的上下文信息。
Transformer 解码器(Decoder)首要担任逐渐生成输出成果。解码器依据编码器生成的上下文信息和前一步生成的输出,逐渐输出方针序列的每一个元素。在解码器中,选用了带有掩码的自注意力机制,使得在核算输出向量时只考虑当时和之前的输入数据,以坚持生成成果的次序性。一起,解码也选用了穿插注意力机制,将编码器的输出成果引进到解码器中。通过穿插注意力机制,核算与编码器的输出序列的相关性。这一机制保证解码器在生成每个输出向量(输出词)时,不只要考虑之前输出的词,还要考虑编码器生成的上下文信息。
本文首要重视 Transformer 在时刻序列(信号)上的运用,首要运用 Transformer 编码器发现序列内部在时刻上的依靠联系。接下来将要点介绍 Transformer 编码器及其在 MATLAB 中的完成,并运用 Transformer 编码器构建分类模型 。
2.Transformer编码器及其在MATLAB中的完成。
Transformer 编码器的首要由输入、方位编码(input embedding)、多头注意力(multi-he。ad。attention)、残差(Add)、标准化(Norm),以及前馈网络(Feed Forward)组成。关于每一个组成部分,在MATLAB中都对应的网络层。
图 2Transformer 编码器。
输入序列。
Transformer 的提出是针对序列到序列的自然语言处理使命。自然语言文本首要被转化为固定长度的向量表明,从而构成输入向量序列。咱们以自然语言文本“Do you speak MATLAB”为例,MATLAB 中的文本剖析工具箱供给FastText预练习词嵌入模型,能够将英文单词转化为 300 维的词向量。例如关于“Do”,通过以下操作能够转为300维的词向量 vec (如下所示):
依据 FastText 生成词向量。
其间,fastTextWordEmbedding是FastText预练习词嵌入模型,word2vec将词转化为向量表明。从而,输入的自然语言文本被转化为词向量序列,如图 3 所示。
图 3 自然语言文本转化为词向量序列。
方位编码(input embedding)。
Transformer 不具备内置的序列次序信息,需求通过方位编码将序列方位信息注入到输入数据中。在 MATLAB 中,通过运用positionEmbeddingLayer层,将序列次序信息注入到输入数据中,如下所示。positionEmbeddingLayer的OutputSize的特点设置为词向量维度。
自注意力机制。
Transformer 模型的中心是自注意力机制。关于输入序列中每个方位对应的向量。自注意力机制首要通过线性改换生成三个向量:查询(Query),键(Key),和值(Value)。然后,通过核算查询和键之间的点积来取得注意力得分(即相关性),这些得分通过 Softmax 归一化后,用于加权求和值向量,即生成输出向量。
以图3中的输入序列为例,假定自然语言文本对应的词向量按次序别离界说为d, y, s, m。而且界说 Query,Key,Value 的转化矩阵为wq, wk, wv。关于词“you”对应的词向量y,通过线性改换生成的 Query,Key,Value 向量为:
yq = wq × y;
yk = wk × y;
yv = wv × y;
同理,关于词“Do”对应的词向量d,通过线性改换生成的 Query,Key,Value 向量为:
dq = wq × d;
dk = wk × d;
dv = wv × d;
其它两个词向量以此类推。
图 4 词向量的线性改换。
关于词“Do”,核算其与其它四个词的相关性,别离为:·。
rdd =dq· dk。
rdy =dq· yk。
rds = dq · sk。
rdm =dq· mk。
其间,rdd,rdy,rds,rdm,别离表明“Do”与自身、“you”、“speak”、“MATLAB”的相关性。运用 softmax 对相关性做归一化处理,并生成归一化后的相关性srdd,srdy,srds,srdm,将其它词对当时词的影响归入的新生成的向量do 中,即:
do=srdd× dv+ srdy× yv + srds× sv+ srdm× mv。
运用相同的核算,能够得到输出向量:do,yo,so,mo(如图5所示)。
图 5 输入的序列通过自注意力核算后生成新的输出序列。
通过以上介绍,self-attention 机制能够总结出:
通过三个线性改换(也是要学习的。参数。,当然还包含误差)对输入序列的每个方位的向量衍生出三个向量,通过相关性核算以及加权均匀,又转化为一个输出向量。可是输出向量不只包含自身的信息,还一起包含了与输入序列其它方位的依靠联系(即其它方位向量的相关性),因而其信息内容愈加丰厚。
每个输入序列方位上的核算进程都是独立进行,并没有前后依靠联系(相似 LSTM),因而能够通过并行核算进行加快。
通过独立核算不同方位间的相关性来捕获输入序列内部的依靠信息,因而其处理长距离的依靠联系更有用,能够防止 LSTM 的长距离依靠联系通过串行传递导致的信息不断衰减问题。
在 MATLAB 中,selfAttentionLayer层完成了自注意力机制。NumKeyChannels特点决议转化后的 Key 向量的维度。因为 Query 要与 Key 做内积,所以 Query 向量的维度与 Key 的维度相同。关于 Value 向量的维度,也能够通过特点NumValueChannels进行设置。假如NumValueChannels设置为“auto”,那么其与 key 向量的维度共同 (如下所示)。
自注意力机制中,线性改换矩阵便是要学习的参数(当然也包含误差)。而参数规划通过设置生成的 Query、Key 和 Value 向量的维度主动决议。例如,当词向量 d 的维度是 300,假如设置 Key 向量 k 的维度设置为 512,那么改换矩阵wk(Key Weights)巨细为:512×300,即:
自注意力中的 Key 向量生成进程。
带有掩码的自注意力机制(Masked Self-Attention)。
Masked Self-Attention 首要用于处理序列数据中的有序性,运用掩码来约束注意力的规模。具体来说,掩码会遮挡掉未来时刻步的信息,保证模型在生成当时方位的输出向量时,只能拜访当时方位及之前方位的词向量,以坚持生成进程的次序性。在 MATLAB 中,通过设置selfAttentionLayer层的特点AttentionMask值为“causal”完成带掩码的自注意力机制。
多头自注意力机制。
多头自注意力通过并行地履行多个自注意力核算(也便是单头自注意力核算),然后将成果拼接起来。这种办法答应模型在不同的“注意力空间”中捕捉不同类型的信息。这儿的“注意力空间”能够用一组 Query、key、Value 向量的线性改换表明。每个“头”运用不同的线性改换对输入序列生成 Query、key、Value,再核算注意力,并生成不同的输出向量。将一切头的输出向量拼接(concatenate)在一起。拼接后的成果能够挑选(也能够不挑选)通过另一个线性改换整合来自一切头的信息,生成终究的多头自注意力输出向量(如图6所示)。
图 6 多头(2头,two-head)自注意力机制。
在 MATLAB 中,通过设置selfAttentionLayer层的特点NumHeads来决议多头自注意力机制的头数(heads)。
在 Transformer 中,除了自注意力机制外的前馈网络、残差链接、以及层归一化,都归于惯例网络层,别离对应 MATLAB 中fullyConnectedLayer、additionLayer和layerNormalizationLayer,这些都是惯例操作,这儿就不做介绍。 ▼。
3.Transformer编码器在依据信号数据的毛病诊断中的运用。
设备毛病诊断是触及通过各种传感器数据。检测。和辨认设备毛病。传感器数据内部包含了时刻上的依靠联系,这种依靠联系体现了设备的动态改变进程,因而,捕获传感器数据包含的动态改变进程,能够很好的辨认和猜测设备的毛病状况。
本文的毛病诊断事例是针对运用轴承的旋转。机械。。这些机械体系常常因。电流。通过轴承放电而导致。电机。轴承在体系启动后的几个月内产生毛病。假如未能及时检测这些问题,可能会导致体系运转的重大问题。
数据集。
数据集包含从轴承测验台和实在生产中的旋转机械搜集的振荡数据。总共有 34 组数据。信号采样频率为 25 Hz。设备状况包含三种:健康(healthy),内圈毛病(inner race fault),外圈毛病(outer race fault)。
因为轴承电流是由变速条件引起的,毛病频率会跟着速度改变而在频率规模内上下动摇。因而,轴承振荡信号本质上对错平稳的。时频表明能够很好地捕捉这种非平稳特性。从信号的时刻、频率和时频表明中提取的组合特征可用于进步体系的毛病检测功能。图7显现了信号在时域和时频域上的显现。
图 7 输入数据(信号)在时域(上)和时频域(下)上的显现。
关于信号数据,MATLAB 供给了特征提取函数,能够别离从时域、频域和时频域上提取特征:
时域 - signalTimeFeatureExtr。ac。tor。
signalTimeFeatureExtractor 能够提取时域上的核算特征,如希望(mean)、均方根(。RMS。)、标准差(StandardDeviation)、及峰值(PeakValue)。而时域上的其它特征,如ShapeFactor、SNR等在本文事例中并没有提取。signalTimeFeatureExtractor 在做信号特征提取的时分需求设置一个窗口(FrameSize),窗口巨细决议了核算核算特征的采样点数量。
频域 – signalFrequencyFeatureExtractor。
signalFrequencyFeatureExtractor 用于在频域上提取信号的核算特征,在本文中,首要提取频率希望(MeanFrequency)、频谱峰值方位(PeakLocation)、频谱峰值(PeakAmplitude)、及均匀频带功率(BandPower)。频域上的其它特征,如Occu。pi。edBandwidth等在本文中并没有提取。signalFrequencyFeatureExtractor 在做信号特征提取时,相同需求设置一个窗口(FrameSize),用于指定每个帧的采样点数,也是频域特征提取时剖析窗口的巨细。当处理长时刻信号时,将信号分红较小的帧能够更有用地进行频域剖析。
时频域 – signalTimeFrequencyFeatureExtractor。
signalTimeFrequencyFeatureExtractor 用于在时频域上提取信号的特征,捕捉到信号在时刻和频率上的改变。在本文中,时频上提取频谱峭度(SpectralKu。rtos。is)和频谱偏度(SpectralSkewness)。在时频域剖析中,谱峭度值描绘了信号在特定时刻点上的频谱形状的尖利程度或平整程度,通过频谱峭度剖析,能够辨认信号中的瞬态事情或冲击。谱偏度值描绘了信号在特定时刻点上频谱的对称性或偏斜程度,通过剖析频谱偏度,能够辨认信号中非对称的频率散布。
原始信号通过火帧并做特征提取,从具有 146484 采样点一维数据,转化为 1464×30 的二维矩阵,如图 8 所示。矩阵的行表明时刻点,矩阵的列表明特征。
图 8 通过特征提取的信号数据。
关于转化后的数据,每个特征能够笼统成一个传感器,每个采样点一起从 30 个传感器搜集数据而组成一个特征向量。一个样本共进行1464次采样。这样就为接下来的 Transformer 编码器模型练习预备好了数据根底。
依据Transformer编码器构建分类模型。
本文是对照《Attentionis all you need》论文中的 Transformer 编码器,通过Deep Network Designer App构建编码器网络,如图9所示。Transformer 编码器的每个组成部分,在MATLAB中都有对应的网络层,通过这些层能够快速的组成网络,并自界说每层的参数。例如本文中,selfAttentionLayer层的头数是 2,并带有掩码。
图 9 依据Transformer的编码器构建毛病诊断模型(分类模型)。
编码器的输出是带有上下文信息的向量序列,而在设备的毛病诊断中,毛病的类型是离散的。本文中,轴承有内圈毛病、外圈毛病、以及健康状况三种类型。因而,还需求运用编码器的输出向量,进一步来构建三分类模型。
关于 Transformer 编码器的输出向量序列,MATLAB 供给globalAveragePooling1dLayer和globalMaxPooling1dLayer两种大局池化办法,在序列(或时刻)方向上做向量每个维度上的数据兼并。在本文中,编码器的输出序列向量的维度是 30,序列长度(时刻步)是 1464,即 1464×30。通过数据兼并后,变为:1×30,如图 10 所示。
图 10 向量序列在时刻方向的兼并。
序列数据做大局池化后的输出成果是一维数据,通过衔接全衔接网络层fullyConnectedLayer,进一步缩减为三输出,即对应于三分类。终究再通过softmaxLayer转化为概率散布,从而判别所属类别。全体网络模型如图11所示。
图11 依据 Transformer 的编码器构建分类模型。
模型练习与测验。
本文共搜集34条信号数据,选用随机的方法依照 70% 和 30% 进一步将数据集划分为练习集和测验集(因为数据量有限,练习进程并没有运用验证集)。
练习集(上)和测验集(下)。
模型练习进程,MATLAB 供给了超参数选项完成模型的进一步骤优,而超参数选项是通过 tr。ai。ningOptions 函数设置的,包含初始学习速率、学习速率衰减战略、minibatch 巨细、练习履行环境(。GPU。、。CPU。)、练习周期等等。通过 100 个 Epoch 练习的模型在测验集上的测验成果如下:
图 12 模型练习进程(上)和测验集精度(heatmap)(下)。
从测验的成果看,Transforme 编码器对长距离依靠联系的捕获作用仍是比较好的。
4.总结。
本文的意图首要是介绍 Transformer 模型的编码器,以及怎么运用 MATLAB 构建 Transformer 模型,并为读者供给一种 Transformer 编码器的运用思路,模型自身以及练习进程还有能够优化当地,仅为读者供给参阅,也欢迎我们做进一步模型结构调整和精度提高。