NLP(2)--Transformer

目录

一、Transformer概述

二、输入和输出

三、Encoder

四、Decoder

五、正则化处理

六、对于结构的改进?

七、AT vs NAT

八、Cross-attention


一、Transformer概述

        Transformer模型发表于2017年Google团队的Attention is All you need这篇论文,完全基于自注意力机制模型和前馈神经网络绘制输入和输出之间的全局依赖关系,摆脱CNN和RNN的模型束缚,具有并行计算能力,能够捕捉长期依赖关系进行建模,处理长序列时效果更好,并对全局的信息获取更为完善。

        当下,Transformer作为一个新兴主流模型在多个领域的发展上都有了显著的成功,如机器翻译,大语言模型,文本分类,问答系统,随着计算资源的增加,算力的不断提升,Transformer也逐步推向大模型,多模态的领域。

        Transformer模型从整体上看仍然是Encoder-Decoder结构,论文中给定的Encoder和Decoder数目都是六个,如下图所示。

        注意:在Transformer结构中左右两侧的N×就是Encoder和Decoder的个数,另外最后一个Encoder将输出两个值(输出序列和注意力机制的权重)到每一个Decoder模块结合,后面会说这个过程。

二、输入和输出

        假设当前利用Transformer模型做语音识别任务。

        Transformer的Encoder输入是一个序列数据,可能是不同的词向量形式如Word2Vec或One-hot, 这里为真实的录音。

        Transformer的Decoder输入也是一个序列数据,数据为应识别出来的汉字(labels),类似于让Decoder提前知道了真实的数据,但在实际的语音识别中可以在Decoder的输入中添加一些噪音,提高训练的泛化能力和鲁棒性,避免过度依赖训练中的某些特征,出现过拟合。

        Transformer的自注意力机制也添加了Position Encoding的环节,在输入的一开始加入了词在序列中的位置偏移量进入Encoder。论文中使用正弦和余弦两种方式进行编码(最后好像采用了正弦),公式中pos是位置量,i是位置编码向量中的维度,也可以看做是正弦和余弦的编号或波长 。       

        另外在Transformer中还要设计Begin和End两个起始符,在Decoder的输入中设定Begin符,用来开始训练生成出第一个字,最后一个字输入Decoder后可以输出End符切断输出,避免无限输出。

        最后一个Decoder的输出连接了Linear线性器和Softmax用于归一化输出。

三、Encoder

        ​​​​​​​Encoder中由两个部分构成,多头自注意力机制模块和前馈神经网络,这两个模块都进行Residual+Layer norm(残差+层标准化)的处理。

        首先介绍多头自注意力机制(Multi-Head Attention),在论文中head的个数设置为8,也就是说在自注意力机制的Q,K,V各有8个,自注意力机制请参考NLP基础和自注意力机制 。

        前馈神经网络(Feed Forward Network)是一个完全连接的前馈神经网络,由两个线性变换,中间一个ReLU激活构成。线性变换在不同的位置上需要不同的参数,另一种的解释是使用了两个卷积层作为前馈神经网络,输入输出为512维数,中间层为2048维。

        在Transformer中使用了LayerNorm作为归一化处理,而没有使用BatchNorm?

        由于Layer Normalization是对每一个层进行归一化,不仅仅考虑了每一个Batch的统计信息,也考虑了每个样本在每个特征维度上的特征信息,由于NLP领域输入的序列长度可能有很大差异,而使用LN不会受到batchsize的影响,另外LN也有一定的正则化效果,防止模型过拟合。

        相比之下Batch Normalization对每一个Batch输入进行归一化来减少神经网络中的内部协变量偏移,在NLP领域下不同长度的序列可能由于强制归一化而产生的信息损失,归一化不准确的效果。

        BN和LN的公式都是下面这个,但是数据的选择有所不同。

        另外,使用残差结构(Residual),可以提高特征的融合效果,增强非线性网络的表达能力,提高泛化能力。

四、Decoder

        ​​​​​​​Decoder由三部分构成,掩膜多头注意力机制模块,多头自注意力机制,前馈神经网络。其中,多头自注意力机制需要接收Encoder输出的输出序列、注意力权重和Decoder模块中掩膜多头自注意力机制模块的输出。

         掩膜多头注意力机制(Masked Multi-Head Attention)是自注意力机制的一个变体,序列中每一个词只关注前面的词不在关注后面的词(自注意力机制要考虑每个词与前后的词的相关性)。

        其中Mask存在两种,一种是Sequence Mask也就是不能看到未来的信息,即只关注前面的词,另一种是Padding Mask,由于不同的batch可能序列长度不同,将输入的序列进行对齐,并对短序列填0处理,过长序列截断处理。在论文中提到,使用添加负无穷,在Softmax过滤后,他们的概率为0,从而保证自回归特性。

        另外在论文中提到一种Scale Dot-Product Attention,就是对自注意力机制做的矩阵合并运算。

        

五、正则化处理

        在论文中提到正则化处理,使用残差dropout和标签平滑处理。

        残差dropout用于每个子层的输出之中,在残差结构和LayerNorm环节之前进行,dropout=0.1。

        标签平滑处理设定\epsilon ls=0.1,让模型更加不确定性,但提高了准确性和BLEU分数。

六、对于结构的改进?

        在https://arxiv.org/pdf/2002.04745.pdf这篇论文中提到一种Pre-LN Transformer结构,如下图(图a为原Tranformer,图b为新模型),将LayerNorm提前到Encoder的多头自注意力机制模块和前馈神经网络以前进行。

        论文中提到可以更好的进行训练,减少学习率的预热环节和超参数的调整环节,特别是在大规模数据集的训练可以有显著的速度提升。但随之而来的缺点就是,不易收敛,对模型的表示能力可能有一定的改变。

七、AT vs NAT

        自回归解码器(AT Decoder):每次输入一个词,生成一个词,因此生成速度较慢,无法并行生成输出序列,训练推断的效率较低,但可以生成高质量输出序列,适用于机器翻译这一类高度依赖前面生成词的问题。

        非自回归解码器(NAT Decoder):可以同时输入多个词,一次前向传播生成一串词,提高了训练和推断的效率,但可能造成生成的输出出现错误,而来不及处理,造成一系列错误,对于长期依赖关系的任务会受到限制。

八、Cross-attention

        在https://arxiv.org/pdf/2005.08081.pdf文章中提到了一个Layer-Wise Multi-View Decoding的结构,通过引入交叉注意力机制改进传统的自注意力机制结构,尝试去在多层Encoder和Decoder中寻找更好的融合方式,可以更好的捕捉全局上下文信息,具体的应用在扩散模型中有一定体现。

 参考视频:2021 - Transformer (下)_哔哩哔哩_bilibili


http://www.niftyadmin.cn/n/5003790.html

相关文章

win10下使用composer安装依赖ssl报错处理

报错:you are running Composer with SSL/TLS protection disabled. https://repo.packagist.org could not be fully loaded (curl error 60 while downloading https://repo.packagist.org/packages.json: SSL certificate problem: unable to get local issuer c…

使用生成式 AI 增强亚马逊云科技智能文档处理

数据分类、提取和分析对于处理大量文档的组织来说可能具有挑战性。传统的文档处理解决方案是手动的、昂贵的、容易出错的,并且难以扩展。利用 Amazon Textract 等 AI 服务,亚马逊云科技智能文档处理(IDP)允许您利用业界领先的机器学习(ML)技术来快速准确地处理任何扫描文档或图…

docker介绍和安装

docker安装 下载Docker依赖组件 yum -y install yum-utils device-mapper-persistent-data lvm2 设置下载Docker的镜像源为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo 安装Docker服务 yum -y install docker-ce 安…

SQL-DCL

DCL-管理用户 1.查询用户 USE mysql; SELECT * FROM user; 2.创建用户 CREATE USER “用户名”“主机名” IDENTIFIED BY "密码“; 3.修改用户密码 ALTER USER “用户名”“主机名” IDENTIFIED WITH mysql_native_password BY &quo…

动态分配(解决最优化问题)

文章目录 核心思想:三要素刷动态规划题大致流程线性DP 核心思想: 将复杂的问题分解成多个简单的子问题,遍历问题的状态以及状态之间的关系,然后以递推的方式来解决问题。 三要素 最优子结构、重叠子问题、无后效性 刷动态规划…

某米ax3000路由器组网解析

我们使用某米k60手机与某米ax3000 wifi6路由器组网,来分析和学习网络速率与瓶颈限制。 某米 AX3000 路由器简介 某米 AX3000 路由器是一款支持 WiFi 6 的双频路由器,它的 MIMO 是 22,也就是两根天线。MIMO 是 Multiple Input Multiple Outpu…

Spark 6:Spark SQL DataFrame

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据。 SparkSQL是用于处理大规模结构化数据的计算引擎 SparkSQL在企业中广泛使用,并性能极好 SparkSQL:使用简单、API统一、兼容HIVE、支持标准化JDBC和ODBC连接 SparkSQL 2014年正式发布,当…

【CAD二次开发】重新加载acad.pgp快捷菜单文件

为了加快绘图速度,好多人会进行CAD快捷命令的修改,那怎么在不需要重启CAD的情况下自动更新? CAD修改acad.pgp,快捷命令后,自动更新。 方法一 命令行输入reinit,命令。 在弹出的窗口中,选择‘PGP文件’&…