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.mzph.cn/news/69624.shtml

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

相关文章

蓝桥杯打卡Day1

文章目录 全排列八皇后 一、全排列IO链接 本题思路:本题是一道经典的全排列问题&#xff0c;深度优先搜索即可解决。 #include <bits/stdc.h>constexpr int N10;std::string s; std::string ans; int n; bool st[N];void dfs(int u) {if(un){std::cout<<ans<…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(8 月 29 日论文合集)

文章目录 一、分割|语义相关(20篇)1.1 VideoCutLER: Surprisingly Simple Unsupervised Video Instance Segmentation1.2 Compositional Semantic Mix for Domain Adaptation in Point Cloud Segmentation1.3 Referring Image Segmentation Using Text Supervision1.4 Semi-Sup…

kafka知识小结

1.为什么分区数只能增加,不能减少? 按照Kafka现有的代码逻辑而言,此功能完全可以实现,不过也会使得代码的复杂度急剧增大。 另外实现此功能需要考虑的因素很多,比如删除掉的分区中的消息该作何处理? 如果随着分区一起消失则消息的可靠性得不到保障; 如果需要保留则又需…

前后端数据加密传输基于AES+RSA实现

前后端数据加密传输基于AESRSA实现 什么是AES和RSA AES AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它的加密速度快&#xff0c;安全性也比较高&#xff0c;是目前广泛使用的加密算法之一。AES的密钥长度可以选择128位、192位和…

NetSuite海鲜书 - 知识会汇编 用户篇 2023

NetSuite2021年初夏&#xff0c;NetSuite知识会成立。它由本人&#xff0c;上海德之匠信息技术有限公司的毛岩喆&#xff08;江湖人称Rick&#xff09;发起建立。建立的初衷秉承Rick个人博客“学问思辨&#xff0c;企业信息化路上的行者”的理念&#xff0c;期望能够在NetSuite…

Flink基础

Flink architecture job manager is master task managers are workers task slot is a unit of resource in cluster, number of slot is equal to number of cores(超线程则slot2*cores), slot一组内存一些线程共享CPU when starting a cluster,job manager will allocate a …

docker快速安装-docker一键安装脚本

1.下载/配置安装脚本 touch install-docker.sh #!/bin/bash #mail:ratelcloudqq.com #system:centos7 #integration: docker-latestclear echo "######################################################" echo "# Auto Install Docker …

使用 skopeo 批量同步 helm chart 依赖镜像

skopeo 是什么&#xff1f; skepeo 是一个开源的容器镜像搬运工具&#xff0c;比较通用&#xff0c;各种镜像仓库都支持。 安装 skopeo 参考官方的 安装指引。 导出当前 helm 配置依赖哪些镜像 $ helm template -n monitoring -f kube-prometheus-stack.yaml ./kube-prome…

大数据组件-Flume集群环境搭建

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

Mybatis对数据加密解密(AES加解密)操作

1&#xff1a;使用mybatis的BaseTypeHandler类&#xff0c;编写需要加密解密处理的类型 package com.example.poi.typeHandlers;import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.AES; import org.apache.ibatis.type.BaseTypeHandler; import org.apa…

vue3+vite+ts项目适配各种分辨率解决方案

现在的电脑屏幕和尺寸越来越多样化&#xff0c;对于前端开发来说&#xff0c;适配各种屏幕成了大难题&#xff0c;开发中一个实际例子&#xff1a;开发一个导航栏&#xff0c;ui给的是1920*60的尺寸&#xff0c;前端开发的时候&#xff0c;在自己电脑缩放比例中开发的&#xff…

AOP到底是啥

AOP到底是啥 前言面向切面编程到底是啥意思那么要怎么实现面向切面编程呢&#xff1f;成果 前言 回忆起来&#xff0c;第一次听到这三字母是博主在上大二的时候&#xff0c;那时候看的一脸懵逼&#xff0c;现在马上研二了才想起来回顾下。 只记得当时面向对象编程还没整明白&…

TDengine(2):wsl2+ubuntu20.04+TDengine安装

一、ubuntu系统下提供了三种安装TDengine的方式&#xff1a; 二、通过 apt 指令安装失败 因为是linux初学者&#xff0c;对apt 指令较为熟悉&#xff0c;因此首先使用了该方式进行安装。 wget -qO - http://repos.taosdata.com/tdengine.key | sudo apt-key add -echo "…

【Linux】文件

Linux 文件 什么叫文件C语言视角下文件的操作文件的打开与关闭文件的写操作文件的读操作 & cat命令模拟实现 文件操作的系统接口open & closewriteread 文件描述符进程与文件的关系重定向问题Linux下一切皆文件的认识文件缓冲区缓冲区的刷新策略 stuout & stderr 什…

STM32 硬件IIC 控制OLED I2C卡死问题

#更新通知&#xff1a;2023-09-06 STM32L151 固件库 使用I2C 太难了&#xff0c;又宕机了&#xff0c;建议不要在固件库版本上尝试硬件IIC 了&#xff0c;一般人真用不了&#xff0c;直接使用软件模拟的&#xff0c;或者不要使用固件库了&#xff0c;用HAL 库吧&#xff0c;据说…

既要炫酷好看,又要出图快?可视化大屏模板了解下!

可视化大屏模板可以在很大程度上满足炫酷好看和出图快的需求。使用模板可以节约制作时间&#xff0c;像奥威BI系统就上线了大量的可视化大屏模板。这些模板实际上都是一张张完整的可视化大屏报表&#xff0c;从数据源到数据分析模型&#xff0c;再到数据可视化图表和智能分析功…

《vue3实战》运用push()方法实现电影评价系统的添加功能

目录 前言 电影评价系统的添加功能是什么&#xff1f; 电影评价系统的添加功能有什么作用&#xff1f; 一、push&#xff08;&#xff09;方法是什么&#xff1f;它有什么作用&#xff1f; 含义&#xff1a; 作用&#xff1a; 二、功能实现 这段是添加开始时点击按钮使…

支持CAN FD的Kvaser PCIEcan 4xCAN v2编码: 73-30130-01414-5如何应用?

这里是引用 Kvaser PCIEcan 4xCAN v2&#xff08;编码: 73-30130-01414-5&#xff09;是一款小巧而先进的多通道实时CAN接口&#xff0c;可发送和接收CAN总线上的标准和扩展CAN消息&#xff0c;时间戳精度高。其与所有使用Kvaser CANlib的应用程序兼容。 主要特性 PCI Express…

spring boot项目上传头像

应用还是验证码使用的原理&#xff1b;但是代码逻辑却有所不同。 逻辑前端传给后端&#xff0c;然后写入本机磁盘去&#xff0c;文件名用uuid避免重复。写完就可以顺带把文件名保存到数据库里。上传就这样子。 怎么取用的&#xff1b;还是通过配置映射的方式&#xff1b;通过sr…

vue3升级了些什么

Vue 3 升级了以下几个方面的内容&#xff1a; 响应式系统&#xff1a;Vue 3 使用了 Proxy 对象来替代 Vue 2 中的 Object.defineProperty&#xff0c;这使得响应式系统更加高效和灵活。Vue 3 的响应式系统可以追踪更细粒度的依赖关系&#xff0c;提供了更好的性能和更细致的响应…