7.2 Transformer:具有里程碑意义的新模型——自注意力模型

简介: 该文章详细介绍了Transformer模型及其核心组件自注意力模型(Self-Attention Model),解释了其如何克服循环神经网络在处理长序列数据时遇到的长程依赖问题,并促进了深度学习在多个领域的应用发展。


7.2 Transformer:具有里程碑意义的新模型


第7.1章节中我们学习了经典的循环神经网络RNN和其变体长短期记忆网络LSTM。循环神经网络是处理时序数据的主要模型,可以实现很多不同类型的深度学习任务,如:

1)序列到类别任务:输入是时序数据,输出是类别,如文本分类、情感分析任务等。

2)同步的序列到序列任务:输入是时序数据,输出是等长度的序列数据,如图1所示的序列标注任务。

图1 序列标注任务

3)异步的序列到序列任务:输入是序列数据,输出是不等长度的序列数据,如机器翻译、问答系统等。

然而循环神经网络是一个串行建模方式,即下一个时刻t的单元状态依赖t−1时刻的单元状态的输入,这种设计在实际应用时存在两个瓶颈问题:

1)计算过程难以并行,使得训练较大模型常用的并行计算技术无用武之地,无法充分发挥硬件的能力。

2)序列较长时,存在长程依赖的问题(梯度爆炸或梯度消失)。理论上循环神经网络可以建立长时间间隔状态之间的依赖关系,但由于存在长程依赖问题,对于序列前边重要的信息,在序列后续的计算过程中可能会丢失。如在阅读理解任务中,一篇文章最后段落的理解,可能依赖对于该文章开篇的典故的理解,这种与全局信息的关联,显然不是循环神经网络能够捕捉的。循环神经网络会随着扫描序列的进行,更关注距离较近的环境信息,距离更远的信息会逐渐变弱。

2017年,Transformer模型在论文《Attention is all you need》中被提出,字面理解“您只需要一个Attention就可以解决所有问题”。Transformer最开始被应用于机器翻译任务上,取得了SOTA的效果,并推动机器翻译任务达到新的高度,这一切很大程度上要归功于一个非常核心的组件:自注意力模型(Self-Attention Model)。

由于自注意力模型的引入,Transformer不仅摆脱了循环神经网络中串行计算的问题,同时能够在任意时刻,只关注输入序列中对当前计算最重要的信息(更全局化,而不是关注序列中临近的输入),从而缓解了循环神经网络在建模长时间间隔时时面临的长程依赖问题。

Transformer模型是一个具有里程碑意义的模型,它的提出催生了众多基于Transformer网络结构的模型,特别是在2018年预训练模型BERT的提出,其在多项NLP任务上均取得了突破性的进展。自此,不管是学术界,还是工业界均掀起了基于Transformer的预训练模型研究和应用的热潮,并且逐渐从NLP领域延伸到CV、语音等多项领域。例如ViT, DETR, TimeSformer分别在图像分类、检测和视频领域全面超过之前SOTA。

各种基于Transformer结构的变体模型在模型结构、运行效率和不同领域模型应用等方面纷纷被提出,同时各个领域的多项任务指标更是不断被刷新,深度学习领域进入了一个新的时代。

本章内容主要分如下两个部分:

  • 理论解读:介绍Transformer两个核心组件自注意力模型和序列到序列模型(Sequence-to-Sequence,Seq2Seq)以及Transformer的完整结构。
  • 动手实践:使用Transformer的Encoder模块完成新闻分类的任务。

7.2.1 自注意力模型

7.2.1.1 自注意力模型的实现原理

自注意力模型(Self-Attention Model)的设计思想来源于解决循环神经网络在解决长序列数据时遇到的问题:

1)如何计算更全局的信息依赖,而不局限于距离的远近

2)如何使得计算以并行化,而不是只能串行进行?

为了解决如上两个问题,自注意力模型采用查询-键-值(Query-Key-Value,QKV)的模式。对于输入序列X=[x1,...,xL]∈RL×D,每一个输入xi都有三个向量表示:查询向量qi∈RDk向量i∈RDk向量vi∈RDv

其中qiki用来计算序列中其它输入对本输入的影响力,vi是本输入的向量表示,输入xj对输入xi影响力使用 qjki 表示。影响力越大,说明处理输入xi的时候需要重点考虑输入xj的信息。

这样模型在处理当前输入时,它的注意力可以在整个输入序列上不受约束的扫描,从而得到对处理当前内容最有帮助的信息。

基于上面朴素的想法,自注意力模型的网络结构如图2所示。

图2 自注意力模型结构图

模型在处理输入xi时,先计算其它输入对xi的影响(qjki),用αij表示;然后将αij经过Softmax后得到的值α^ij与值向量vi相乘,就得到xi经过整个序列信息影响后的向量表示zi,即

7.2.1.2 自注意力模型严谨的数学表达

假设输入序列为X=[x1,...,xL]∈RL×D,经过线性变换得到xi对应的查询向量q``i``∈R``Dk、键向量ki∈RDk和值向量vi∈RDv。对于整个输入序列X,线性变换的过程可以简写为

其中WQ∈RDk×DWK∈RDk×DWV∈RDv×D可学习的映射矩阵。默认情况下,可以设置映射后的QKV的特征向量维度相同,都为D

图3展示了输入为两个向量序列x1和x2的自注意力的计算过程,需要执行如下步骤:

图3 自注意力计算示意

1)两个输入向量x1和x2经过线性变换,分别获得它们在查询向量Q、键向量K和值向量V

2)使用点积计算,先得出q1在k1和k2的分数α11和α12;再将分数缩放并使用Softmax进行归一化,获得x1的自注意力分布分数 α^11和α^12;最后根据该位置的自注意力分布对v1和v2进行加权平均,获得最终x1位置的输出向量z1 。

3)同理,可以获得x2的自注意力向量z2,即每个输入向量的位置均对应一个自注意力输出的编码向量zi∈R1×Dv

为了加快计算效率,在实际应用时,可以使用矩阵计算的方式一次性计算出所有位置的自注意力输出向量,即

其中Z∈RL×Dv

在自注意力计算过程中,为了防止注意力分布具有较大的方差,导致Softmax的梯度比较小,不利于模型的收敛,在计算过程中除以了一个D,可以有效降低方差,加速模型收敛

相关文章
|
机器学习/深度学习 人工智能 并行计算
GPU如何成为AI的加速器
GPU如何成为AI的加速器
427 0
|
传感器 数据库
一种多源信息融合方法及其应用(Matlab代码实现)
一种多源信息融合方法及其应用(Matlab代码实现)
498 0
|
Python
python文件的打开、读取、关闭、写入与二进制文件的读写操作
python文件的打开、读取、关闭、写入与二进制文件的读写操作
2564 0
python文件的打开、读取、关闭、写入与二进制文件的读写操作
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
《Python+AI如何颠覆传统文书审查模式》
在法律领域,法律文书审查传统上依赖人工,耗时且易出错。Python结合AI技术为这一问题提供了高效解决方案。通过自然语言处理(NLP),计算机可精准分析法律文书,包括分词、句法分析、命名实体识别(NER)和文本分类等步骤。这些技术能快速提取关键信息,理解复杂语义,并结合深度学习模型如Transformer提升准确性。实际应用中,高质量数据与专业标注至关重要,同时借助TensorFlow或PyTorch优化模型训练。AI辅助审查不仅提高效率,还助力律师、法官和企业法务更好地应对挑战,推动司法公正与智能化发展。
238 1
|
6月前
|
Prometheus 监控 数据可视化
模型被挤了?立即查看服务器GPU/CPU占用,别再误杀他人进程!
模型在服务器上跑得好好的,突然就“卡”了甚至被挤掉?别急着抱怨!本文手把手教你如何优雅地查看共享服务器的CPU和GPU占用情况,学会做一个有素质的“共享玩家”,告别模型被挤的尴尬!文末还有硬核忠告和Linux学习建议。
987 87
|
9月前
|
数据采集 存储 搜索推荐
从零开始搭建埋点采集体系:轻松解锁用户行为分析
埋点技术因其高精度和定制化能力,成为许多公司的首选方式。然而,有些公司在埋点采集时,将其视为开发过程中的“附加任务”,让研发人员在开发过程中顺带加上一些埋点,而没有完整的规划和验证。这往往导致数据分析的效果不尽如人意。为了避免这种情况,我们需要将数据采集提升到项目级别,进行系统化的规划和实施。
从零开始搭建埋点采集体系:轻松解锁用户行为分析
通义灵码一周年:灵码编码搭子新功能测评
作为一名软件开发工程师,我使用通义灵码个人版的@workspace和@terminal功能,快速进行项目初始化、代码熟悉、需求实现、代码审查及协作开发,整体效率提升30%。通过智能提示、自动补全、代码审查等工具,大幅减少手动配置时间和错误率,使我能够更专注于创新工作。
|
Java 应用服务中间件 API
如何爬出Kotlin协程死锁的坑?
本文将会剖析 Kotlin 协程死锁的根本原因, 以及如何彻底地从坑中爬出来。
|
机器学习/深度学习 人工智能 自然语言处理
英伟达开源大模型对齐框架—NeMo-Aligner
【5月更文挑战第25天】英伟达开源NeMo-Aligner,一个针对大型语言模型对齐的工具包,支持RLHF、DPO等前沿技术,实现高效训练和扩展。基于Megatron-LM,利用3D并行训练和分布式PPO优化处理大规模模型。采用Apache 2.0许可,鼓励社区参与和创新。然而,硬件需求和技术门槛仍是应用挑战。[链接](https://arxiv.org/abs/2405.01481v1)
353 5
Qt之使用图片填充QLabel
Qt之使用图片填充QLabel
897 1

热门文章

最新文章