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.hqwc.cn/news/99800.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC(一)

1.SpringMVC简介 1.1 什么是MVC MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为实体类Bean:专门存储业务逻辑的,如Student、Us…

2605. 从两个数字数组里生成最小数字

诸神缄默不语-个人CSDN博文目录 力扣刷题笔记 文章目录 1. 我自己写的2. 题解2.1 用哈希表来判断重复数字2.2 用位运算判断重复数字2.3 快排 1. 我自己写的 解法:如果有重复数字就直接输出最小的重复数字,如果没有就直接把两个列表里最小的数字拼在一起…

面试设计模式-责任链模式

一 责任链模式 1.1 概述 在进行请假申请,财务报销申请,需要走部门领导审批,技术总监审批,大领导审批等判断环节。存在请求方和接收方耦合性太强,代码会比较臃肿,不利于扩展和维护。 1.2 责任链模式 针对…

java面试之ThreadLocal问题

什么是ThreadLocal,它的基本用法是什么 简单来说就是能在多线程中保持变量独立的线程对象 不用Threadlocal多线程访问同一个变量会出现的问题 package com.pxx;/*** Created by Administrator on 2023/9/3.*/ public class Demo1 {private String v1;public String getV1() …

详解IP协议

在介绍IP协议之前,先抛出一个概念:IP地址的作用——定位主机,具有将数据从主机A跨网络传输到主机B的能力,有了TCP提供的策略,例如滑动窗口、拥塞控制等,IP去执行它,所以我们通常叫TCP/IP协议&am…

降噪音频转录 Krisp: v1.40.7 Crack

主打人工智能降噪服务的初创公司「Krisp」近期宣布推出音频转录功能,能对电话和视频会议进行实时设备转录。该软件还整合的ChatGPT,以便快速总结内容,开放测试版于今天上线。 随着线上会议越来越频繁,会议转录已成为团队工作的重…

QT DAY7

主要完成多人聊天室,注册与登录使用sql3数据库进行对密码的保存,避免了用户重复登录、错误密码登录、重复注册的问题,之后使用TCP通信,连接上服务器后可在聊天室多人交流

十四、MySQL(DCL)如何实现用户的简单管理?配置用户?

1、DCL语句: 要学习DCL语言,就要清楚DCL语言是用来干什么的,首先DCL语言英文全称是Data Control Language,是数据控制语言,主要用来管理数据库用户、控制数据库的访问权限/ 2、DCL的基础语法: (…

SpringBoot通过@Cacheable注解实现缓存功能

目录 一、Spring从3.1开始支持Cache二、Cacheable常用属性1、value/cacheNames2、key3、condition4、unless5、keyGenerator6、sync7、cacheManager 三、整合步骤1、加入pom2、启动类加EnableCaching注解3、controller或service加Cacheable注解即可 四、代码实例五、Spring Boo…

unity面试题(性能优化篇)

CPU 预处理、缓存数据 注释空的unity函数 运算cpu->gpu 减少昂贵计算(开方) 限制帧数 加载(预加载、分帧加载、异步加载、对象池) 慎用可空类型比较 避免频繁计算(分帧、隔帧) 算法优化 变体收集预热 使用clear操作代替容器的new操作 unity spine使用二进制格式…

Unity中Shader的变体shader_feature

文章目录 前言一、变体的类型1、multi_compile —— 无论如何都会被编译的变体2、shader_feature —— 通过材质的使用情况来决定是否编译的变体 二、使用 shader_feature 来控制 shader 效果的变化1、首先在属性面板暴露一个开关属性,用于配合shader_feature来控制…

Ubuntu 20.04.5 怎么安装微信

这是我的ubutun版本号 在这个系统装桌面版微信很多功能不健全。搜索了很多方法,这个算是不错的一个法子。 1.添加仓库 首次使用时,你需要运行如下一条命令将移植仓库添加到系统中。 wget -O- https://deepin-wine.i-m.dev/setup.sh | sh 2.应用安装 …