0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用MATLAB构建Transformer模型

MATLAB 来源:MATLAB 2025-02-06 10:21 次阅读

Transformer 模型在 2017 年由 Vaswani 等人在论文《Attentionis 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中的右侧部分)两个部分组成,编码器的输出序列将编码器和解码器关联起来,构建跨序列的注意力机制。

40bb0792-e3a9-11ef-9310-92fbcf53809c.png

图 1 Transformer 架构

Transformer 编码器(Encoder)专门用于处理输入序列,通过引入自注意力机制,使其能够高效地捕捉序列中的长距离依赖关系。而这种依赖关系体现为输入序列不同位置之间的相关性。并且将相关性信息加入到输出序列中,使得输出数据包含丰富的上下文信息。

Transformer 解码器(Decoder)主要负责逐步生成输出结果。解码器根据编码器生成的上下文信息和前一步生成的输出,逐步输出目标序列的每一个元素。在解码器中,采用了带有掩码的自注意力机制,使得在计算输出向量时只考虑当前和之前的输入数据,以保持生成结果的顺序性。同时,解码也采用了交叉注意力机制,将编码器的输出结果引入到解码器中。通过交叉注意力机制,计算与编码器的输出序列的相关性。这一机制保证解码器在生成每个输出向量(输出词)时,不仅要考虑之前输出的词,还要考虑编码器生成的上下文信息。

本文主要关注 Transformer 在时间序列(信号)上的应用,主要利用 Transformer 编码器发现序列内部在时间上的依赖关系。接下来将重点介绍 Transformer 编码器及其在 MATLAB 中的实现,并利用 Transformer 编码器构建分类模型 。

2.Transformer编码器及其在MATLAB中的实现

Transformer 编码器的主要由输入、位置编码(input embedding)、多头注意力(multi-head attention)、残差(Add)、标准化(Norm),以及前馈网络(Feed Forward)组成。对于每一个组成部分,在MATLAB中都对应的网络层。

40c5d5f0-e3a9-11ef-9310-92fbcf53809c.png

图 2Transformer 编码器

输入序列

Transformer 的提出是针对序列到序列的自然语言处理任务。自然语言文本首先被转换为固定长度的向量表示,进而形成输入向量序列。我们以自然语言文本“Do you speak MATLAB”为例,MATLAB 中的文本分析工具箱提供FastText预训练词嵌入模型,可以将英文单词转换为 300 维的词向量。例如对于“Do”,通过以下操作可以转为300维的词向量 vec (如下所示):

40cf3212-e3a9-11ef-9310-92fbcf53809c.png

基于 FastText 生成词向量

其中,fastTextWordEmbedding是FastText预训练词嵌入模型,word2vec将词转换为向量表示。进而,输入的自然语言文本被转换为词向量序列,如图 3 所示

40d7420e-e3a9-11ef-9310-92fbcf53809c.png

图 3 自然语言文本转换为词向量序列

位置编码(input embedding)

Transformer 不具备内置的序列顺序信息,需要通过位置编码将序列位置信息注入到输入数据中。在 MATLAB 中,通过使用positionEmbeddingLayer层,将序列顺序信息注入到输入数据中,如下所示。positionEmbeddingLayer的OutputSize的属性设置为词向量维度。

40de32c6-e3a9-11ef-9310-92fbcf53809c.png

自注意力机制

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;

其它两个词向量以此类推。

40e80bc0-e3a9-11ef-9310-92fbcf53809c.png

图 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所示)。

40ef6ab4-e3a9-11ef-9310-92fbcf53809c.png

图 5 输入的序列经过自注意力计算后生成新的输出序列

通过以上介绍,self-attention 机制可以总结出:

通过三个线性变换(也是要学习的参数,当然还包含偏差)对输入序列的每个位置的向量衍生出三个向量,经过相关性计算以及加权平均,又转换为一个输出向量。但是输出向量不仅包含自身的信息,还同时包含了与输入序列其它位置的依赖关系(即其它位置向量的相关性),因此其信息内容更加丰富。

每个输入序列位置上的计算过程都是独立进行,并没有前后依赖关系(类似 LSTM),因此可以通过并行计算进行加速

通过独立计算不同位置间的相关性来捕获输入序列内部的依赖信息,因此其处理长距离的依赖关系更有效,可以避免 LSTM 的长距离依赖关系通过串行传递导致的信息不断衰减问题。

在 MATLAB 中,selfAttentionLayer层实现了自注意力机制。NumKeyChannels属性决定转换后的 Key 向量的维度。因为 Query 要与 Key 做内积,所以 Query 向量的维度与 Key 的维度相同。对于 Value 向量的维度,也可以通过属性NumValueChannels进行设置。如果NumValueChannels设置为“auto”,那么其与 key 向量的维度一致 (如下所示)。

40f9cf22-e3a9-11ef-9310-92fbcf53809c.png

自注意力机制中,线性变换矩阵就是要学习的参数(当然也包含偏差)。而参数规模通过设置生成的 Query、Key 和 Value 向量的维度自动决定。例如,当词向量 d 的维度是 300,如果设置 Key 向量 k 的维度设置为 512,那么变换矩阵wk(Key Weights)大小为:512×300,即:

4104a30c-e3a9-11ef-9310-92fbcf53809c.png

自注意力中的 Key 向量生成过程

带有掩码的自注意力机制(Masked Self-Attention)

Masked Self-Attention 主要用于处理序列数据中的有序性,使用掩码来限制注意力的范围。具体来说,掩码会遮挡掉未来时间步的信息,确保模型在生成当前位置的输出向量时,只能访问当前位置及之前位置的词向量,以保持生成过程的顺序性。在 MATLAB 中,通过设置selfAttentionLayer层的属性AttentionMask值为“causal”实现带掩码的自注意力机制。

多头自注意力机制

多头自注意力通过并行地执行多个自注意力计算(也就是单头自注意力计算),然后将结果拼接起来。这种方法允许模型在不同的“注意力空间”中捕捉不同类型的信息。这里的“注意力空间”可以用一组 Query、key、Value 向量的线性变换表示。每个“头”使用不同的线性变换对输入序列生成 Query、key、Value,再计算注意力,并生成不同的输出向量。将所有头的输出向量拼接(concatenate)在一起。拼接后的结果可以选择(也可以不选择)通过另一个线性变换整合来自所有头的信息,生成最终的多头自注意力输出向量(如图6所示)。

41148574-e3a9-11ef-9310-92fbcf53809c.png

图 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显示了信号在时域和时频域上的显示。

411f5850-e3a9-11ef-9310-92fbcf53809c.png

413354b8-e3a9-11ef-9310-92fbcf53809c.png

图 7 输入数据(信号)在时域(上)和时频域(下)上的显示

对于信号数据,MATLAB 提供了特征提取函数,可以分别从时域、频域和时频域上提取特征:

时域 - signalTimeFeatureExtractor

4142fbfc-e3a9-11ef-9310-92fbcf53809c.png

signalTimeFeatureExtractor 可以提取时域上的统计特征,如期望(mean)、均方根(RMS)、标准差(StandardDeviation)、及峰值(PeakValue)。而时域上的其它特征,如ShapeFactor、SNR等在本文案例中并没有提取。signalTimeFeatureExtractor 在做信号特征提取的时候需要设置一个窗口(FrameSize),窗口大小决定了计算统计特征的采样点数量。

频域 – signalFrequencyFeatureExtractor

signalFrequencyFeatureExtractor 用于在频域上提取信号的统计特征,在本文中,主要提取频率期望(MeanFrequency)、频谱峰值位置(PeakLocation)、频谱峰值(PeakAmplitude)、及平均频带功率(BandPower)。频域上的其它特征,如OccupiedBandwidth等在本文中并没有提取。signalFrequencyFeatureExtractor 在做信号特征提取时,同样需要设置一个窗口(FrameSize),用于指定每个帧的采样点数,也是频域特征提取时分析窗口的大小。当处理长时间信号时,将信号分成较小的帧可以更有效地进行频域分析。

414f28dc-e3a9-11ef-9310-92fbcf53809c.png

时频域 – signalTimeFrequencyFeatureExtractor

signalTimeFrequencyFeatureExtractor 用于在时频域上提取信号的特征,捕捉到信号在时间和频率上的变化。在本文中,时频上提取频谱峭度(SpectralKurtosis)和频谱偏度(SpectralSkewness)。在时频域分析中,谱峭度值描述了信号在特定时间点上的频谱形状的尖锐程度或平坦程度,通过频谱峭度分析,可以识别信号中的瞬态事件或冲击。谱偏度值描述了信号在特定时间点上频谱的对称性或偏斜程度,通过分析频谱偏度,可以识别信号中非对称的频率分布。

415d8fee-e3a9-11ef-9310-92fbcf53809c.png

原始信号经过分帧并做特征提取,从具有 146484 采样点一维数据,转换为 1464×30 的二维矩阵,如图 8 所示。矩阵的行表示时间点,矩阵的列表示特征。

416b4cf6-e3a9-11ef-9310-92fbcf53809c.png

图 8 经过特征提取的信号数据

对于转换后的数据,每个特征可以抽象成一个传感器,每个采样点同时从 30 个传感器采集数据而组成一个特征向量。一个样本共进行1464次采样。这样就为接下来的 Transformer 编码器模型训练准备好了数据基础

基于Transformer编码器构建分类模型

本文是对照《Attentionis all you need》论文中的 Transformer 编码器,通过Deep Network Designer App构建编码器网络,如图9所示。Transformer 编码器的每个组成部分,在MATLAB中都有对应的网络层,通过这些层可以快速的组建网络,并自定义每层的参数。例如本文中,selfAttentionLayer层的头数是 2,并带有掩码。

41770258-e3a9-11ef-9310-92fbcf53809c.png

图 9 基于Transformer的编码器构建故障诊断模型(分类模型)

编码器的输出是带有上下文信息的向量序列,而在设备的故障诊断中,故障的类型是离散的。本文中,轴承有内圈故障、外圈故障、以及健康状态三种类型。因此,还需要利用编码器的输出向量,进一步来构建三分类模型。

对于 Transformer 编码器的输出向量序列,MATLAB 提供globalAveragePooling1dLayer和globalMaxPooling1dLayer两种全局池化方法,在序列(或时间)方向上做向量每个维度上的数据合并。在本文中,编码器的输出序列向量的维度是 30,序列长度(时间步)是 1464,即 1464×30。经过数据合并后,变为:1×30,如图 10 所示。

4185e322-e3a9-11ef-9310-92fbcf53809c.png

图 10 向量序列在时间方向的合并

序列数据做全局池化后的输出结果是一维数据,通过连接全连接网络层fullyConnectedLayer,进一步缩减为三输出,即对应于三分类。最后再通过softmaxLayer转换为概率分布,进而判断所属类别。整体网络模型如图11所示。

418e6a56-e3a9-11ef-9310-92fbcf53809c.png

图11 基于 Transformer 的编码器构建分类模型

模型训练与测试

本文共收集34条信号数据,采用随机的方式按照 70% 和 30% 进一步将数据集划分为训练集和测试集(由于数据量有限,训练过程并没有使用验证集)。

4198b5a6-e3a9-11ef-9310-92fbcf53809c.png

41a1f300-e3a9-11ef-9310-92fbcf53809c.png

训练集(上)和测试集(下)

模型训练过程,MATLAB 提供了超参数选项实现模型的进一步调优,而超参数选项是通过 trainingOptions 函数设置的,包括初始学习速率、学习速率衰减策略、minibatch 大小、训练执行环境(GPUCPU)、训练周期等等。经过 100 个 Epoch 训练的模型在测试集上的测试结果如下:

41a8cf9a-e3a9-11ef-9310-92fbcf53809c.png

41b706be-e3a9-11ef-9310-92fbcf53809c.png

图 12 模型训练过程(上)和测试集精度(heatmap)(下)

从测试的结果看,Transforme 编码器对长距离依赖关系的捕获效果还是比较好的。

4.总结

本文的目的主要是介绍 Transformer 模型的编码器,以及如何使用 MATLAB 构建 Transformer 模型,并为读者提供一种 Transformer 编码器的应用思路,模型本身以及训练过程还有可以优化地方,仅为读者提供参考,也欢迎大家做进一步模型结构调整和精度提升。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    187

    文章

    2988

    浏览量

    231988
  • 编码器
    +关注

    关注

    45

    文章

    3715

    浏览量

    135938
  • 模型
    +关注

    关注

    1

    文章

    3428

    浏览量

    49529
  • 深度学习
    +关注

    关注

    73

    文章

    5528

    浏览量

    121979
  • Transformer
    +关注

    关注

    0

    文章

    147

    浏览量

    6187

原文标题:传感器数据的深度学习模型应用(一)—— Transformer 模型

文章出处:【微信号:MATLAB,微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    大语言模型背后的Transformer,与CNN和RNN有何不同

      电子发烧友网报道(文/李弯弯)近年来,随着大语言模型的不断出圈,Transformer这一概念也走进了大众视野。Transformer是一种非常流行的深度学习模型,最早于2017年
    的头像 发表于 12-25 08:36 4753次阅读
    大语言<b class='flag-5'>模型</b>背后的<b class='flag-5'>Transformer</b>,与CNN和RNN有何不同

    【大语言模型:原理与工程实践】大语言模型的基础技术

    全面剖析大语言模型的核心技术与基础知识。首先,概述自然语言的基本表示,这是理解大语言模型技术的前提。接着,详细介绍自然语言处理预训练的经典结构Transformer,以及其工作原理,为构建
    发表于 05-05 12:17

    你了解在单GPU上就可以运行的Transformer模型

    —— 具有超过32个预训练的语言模型,支持超过100种语言,并在TensorFlow和PyTorch进行了相互的转换,这在构建先进的NLP系统上是非常了不起的工作。Transformer已经被用于除
    发表于 11-02 15:19

    如何使用Matlab/Simulink构建MIMXRT1170 EVK?

    我正在尝试为 MIMXRT1170-EVK 编译和构建示例模型。代码生成成功,但构建失败。我使用的模型是基于模型的设计工具箱中包含的 LWI
    发表于 03-24 07:34

    基于MATLAB的svpwm仿真模型

    svpwm的MATLAB仿真模型
    发表于 01-08 11:51 45次下载

    TensorFlow2.0中创建了一个Transformer模型包,可用于重新构建GPT-2、 BERT和XLNet

    想到不如做到。于是Zachary Bloss(就是下图这位带着淡淡忧伤的背影),一位美国最大的非银行贷款机构之一Quicken Loans的数据分析师,花了一点时间,在TF2中构建一个可扩展的transformer模型
    的头像 发表于 09-13 04:55 1.3w次阅读

    AD9680 MATLAB模型

    AD9680 MATLAB模型
    发表于 03-23 12:54 6次下载
    AD9680 <b class='flag-5'>MATLAB</b><b class='flag-5'>模型</b>

    AD7403 MATLAB模型

    AD7403 MATLAB模型
    发表于 06-04 09:13 5次下载
    AD7403 <b class='flag-5'>MATLAB</b><b class='flag-5'>模型</b>

    Microsoft使用NVIDIA Triton加速AI Transformer模型应用

    Microsoft 的目标是,通过结合使用 Azure 与 NVIDIA GPU 和 Triton 推理软件,率先将一系列强大的 AI Transformer 模型投入生产用途。
    的头像 发表于 04-02 13:04 1871次阅读

    基于Transformer的大型语言模型(LLM)的内部机制

    本文旨在更好地理解基于 Transformer 的大型语言模型(LLM)的内部机制,以提高它们的可靠性和可解释性。 随着大型语言模型(LLM)在使用和部署方面的不断增加,打开黑箱并了解它们的内部
    的头像 发表于 06-25 15:08 1666次阅读
    基于<b class='flag-5'>Transformer</b>的大型语言<b class='flag-5'>模型</b>(LLM)的内部机制

    transformer模型详解:Transformer 模型的压缩方法

     动机&背景 Transformer 模型在各种自然语言任务中取得了显著的成果,但内存和计算资源的瓶颈阻碍了其实用化部署。低秩近似和结构化剪枝是缓解这一瓶颈的主流方法。然而,作者通过分析发现,结构化
    的头像 发表于 07-17 10:50 2400次阅读
    <b class='flag-5'>transformer</b><b class='flag-5'>模型</b>详解:<b class='flag-5'>Transformer</b> <b class='flag-5'>模型</b>的压缩方法

    基于Transformer模型的压缩方法

    基于Transformer架构的大型模型在人工智能领域中发挥着日益重要的作用,特别是在自然语言处理(NLP)和计算机视觉(CV)领域。
    的头像 发表于 02-22 16:27 826次阅读
    基于<b class='flag-5'>Transformer</b><b class='flag-5'>模型</b>的压缩方法

    使用PyTorch搭建Transformer模型

    Transformer模型自其问世以来,在自然语言处理(NLP)领域取得了巨大的成功,并成为了许多先进模型(如BERT、GPT等)的基础。本文将深入解读如何使用PyTorch框架搭建Trans
    的头像 发表于 07-02 11:41 2097次阅读

    Transformer语言模型简介与实现过程

    在自然语言处理(NLP)领域,Transformer模型以其卓越的性能和广泛的应用前景,成为了近年来最引人注目的技术之一。Transformer模型由谷歌在2017年提出,并首次应用于
    的头像 发表于 07-10 11:48 2432次阅读

    matlab预测模型有哪些

    环境,使其成为预测模型开发和实现的理想平台。本文将详细介绍MATLAB中常用的预测模型及其应用。 线性回归模型 线性回归是一种简单的预测模型
    的头像 发表于 07-11 14:27 975次阅读