初探 transformer

大部分QA的问题都可以使用seq2seq来实现。或者说大多数的NLP问题都可以使用seq2seq模型来解决。

但是呢最好的办法还是对具体的问题作出特定的模型训练。

概述

Transformer就是一种seq2seq模型。

我们先看一下seq2seq这个模型的大体框架(其实就是一个编码器和一个解码器):

image-20211110011108154

编码器

我们先看编码器(并结合transformer)这个部分

image-20211110011238315

我们将这个encode进行细化,看看里面是什么样子的,下图就是encode的内部:

image-20211110011445224

可以看出encode里面是有若干个Block模块构成的,而这个模块是由transformer来构成的。

**注意:**上述Block的self-attention的实现在原始的模型不是那么简单的,而是更加复杂,实现的结果如下图所示:

image-20211110012024616

那么transformer的encode部分又可以重新定义如下(对add和norm部分作出了解释,就是上图中提到的):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0DVomf0-1686470176975)(null)]

进步一了解这个模型上的一些小改动

image-20211110012251512

解码器

解码器主要是有两种形式,一种是Autoregressive。

Autoregressive

先放一个动画:

https://vdn3.vzuu.com/SD/cf255d34-ec82-11ea-acfd-5ab503a75443.mp4?disable_local_cache=1&auth_key=1636876035-0-0-1b8200d56431047742a6772de99b7384&f=mp4&bu=pico&expiration=1636876035&v=tx

参考: https://www.zhihu.com/question/337886108/answer/893002189

简单介绍

这里我们直接从encode的输出来看结果是什么样子的或者说如何输出结果的,这里以翻译为例:

image-20211110215515474

Begin是用于判断输入的开始的,这样可以便于定位。

接下来我们来看输出的结果是什么:

image-20211111172332837

根据不同的语言,输出的结果就是一个字点集向量(如果是中文,我们可以输出2000个常用词;如果是英文,那么输出的结果既可以是26个英文字母,也可以是常见的词汇;因此要因情况而定)。


那么接下来就来看看下一步的输出是怎么得到的——是将前面的输出作为下一步的输入(也就是当前的输入是前一步的输出):

image-20211111172612970

说到这里,这种处理方法存在一个问题:如果前一步的翻译结果是错误的,那么不就是后面的每一步都是错误的吗,也就是一步错步步错?那么这种情况该怎么解决呢?

这个问题我们先忽略掉,后面再讲这个问题


内部结构

那么我们接下来看这个Decoder的里面是什么样子的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xhyXKXRL-1686470177458)(null)]

与Encode的对比

image-20211111175849366

根据上图可以看出,Decoder和Encoder不同的地方在于多了一个阴影遮挡的地方,并且还在第一个多头注意力的地方添加了一个Masked 。那么这个是什么呢?

Masked

下面这张图是我们前面讨论的Self-attention机制的处理:

image-20211111180212444

下面是所谓的Masked Self-attention的处理方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fIp6fTKf-1686470176987)(null)]

从图中可以看出,与Self- attention不同的地方在于,Masked Self-attention是只考虑前面的数据,而不是像Self-attention一样将全部的输入一起考虑来输出的。

讲得更具体一点,接下来进步一看看如何计算的:

这是原来的,我们需要将下面的框起来的地方给去掉:

image-20211111181027388

现在就变成了下面的这个样子:

image-20211111181103063


那么问题来了,为什么这样做?为什么要做一个Masked?

可以从Decode的实现过程来考虑分析这个问题。

因为在Decode的输出过程中,是靠着一个个的前面的输出作为下一步的输入来考虑的,这也就是说,当前的输出仅需要考虑前面的输出既可,也就不用再考虑全部的输入了。

如何停止

现在我们思考这样的问题——输出如何停止呢?

因为Self-attention是靠前面的输出来作为输入的,也就是说,如果输出不停止,输入也就不会停止,那么最后就会一直输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OCsVnFj-1686470176965)(null)]

解决的方法就是在输出的字典里面添加一个结束字段——"Stop Token"

image-20211111181910958

通过这个Token,可以很好地解决输出的问题了,这样就可以以一定的概率来判断是否是可以停止输出了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-efOOqnv0-1686470176941)(null)]

Non-Autoregressive

先直接上图,看Autoregressive和Non-Autoregressive两个的区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gx2m5eqV-1686470176954)(null)]

从图上可以看出,Autoregressive是一个接着一个的输出,但是Non-Autoregressive的输出是根据全部的输入一起输出而得到最好的结果。

那么NAT如何确定输出的长度的呢?有下面两种方法:

  • 将Decoder的输入内容输入一个predictor,通过这个predictor来判断最后的输出长度;
  • 将所有的输入送入到Decoder中,然后根据输出结果里面有没有“Stop token”,如果有一个的话,就将后面的输出全部舍弃。

那么NAT的优点是什么呢?

  • 可以并行计算;
  • 可以控制输出的长度;

另外,NAT现在是一个研究的热门方向,这里就不做详细的阐述了。

编码器和解码器的连接

至此可以考虑如何连接了,先从宏观的角度上来看一下解码器和编码器的连接情况:

image-20211111191132605

从上图中可以看出,encoder的输出是在第二阶段作为了decoder的收入。

接下来具体来看是Cross attention是如何工作的:

下图是一开始的处理,先收入一个Begin Token用于输出第一个单词

image-20211111192539255

接下来是第二个输出:

image-20211111193121693

这里插一句,Cross Attention其实早在Self- attention之前就已经存在了,并且还已经实际应用在预测当中。

扩展问题

前面在提到Decoder的输出是按照前面的输出作为输入的,因此这里会出现问题就是——一步错,步步错: image-20211111235516449

处理方法就是上图中使用的方法——不仅仅给模型正确的输入,还要给错误的输入,这样可以让模型学得更好。

下面就是这个方法(Scheduled Samping)的论文依据:

image-20211111235906211

补充资料

  • 这里不得不提一下最经典,也是我目前看到最好的一篇博客,题目叫做《The Illustrated Transformer》。这样说可能大家不清楚,但是如果我放置下面这几张图,可能大家就知道很多地方都有他的身影:

​ 我个人认为这篇博客看懂了,几乎就看懂了transformer了;这里我也有一个[PPT的中文](https://pan.baidu.com/s/1LovEFd4Fswwk0jr8wIKkvA?pwd=ajh9 提取码:ajh9)内容很好地阐述了该博客的技术。

  • 还有HuggingFace的介绍——Transformers 是如何工作的里面的内容也不错,并且很简洁,内容是中文的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29388.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue中如何进行表单图片裁剪与预览

Vue中如何进行表单图片裁剪与预览 在前端开发中,表单提交是一个常见的操作。有时候,我们需要上传图片,但是上传的图片可能会非常大,这会增加服务器的负担,同时也会降低用户的体验。因此,我们通常需要对上传…

选择合适的采购系统,实现企业数字化转型

随着数字化技术的飞速发展,企业数字化转型已经成为了当今市场的必然趋势。而采购系统作为企业数字化转型的重要组成部分,选择合适的采购系统对于企业来说至关重要。本文将围绕选择合适的采购系统,实现企业数字化转型展开讨论。 一、企业数字化…

OpenCV项目开发实战-- 的单应性(Homography)实例Python/C++代码实现

文末附基于Python和C++两种方式实现的测试代码下载链接 什么是单应性(Homography)? 考虑图 1 中所示的平面(书的顶部)的两个图像。红点表示两个图像中的相同物理点。在计算机视觉术语中,我们称这些为对应点。图 1. 显示了四种不同颜色的四个对应点——红色、绿色、黄色和…

YUM源安装,在线YUM,本地YUM

YUM源 一、定义 YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,**可以自动处理依赖性关系&…

【八大排序(五)】快排进阶篇-挖坑法+前后指针法

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:八大排序专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 快排进阶篇 1. 前情回顾2. 思路回顾3. 单…

java方法

文章目录 一、java方法总结 一、java方法 在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢? println() 是一个方法。 System 是系统类。 out 是标准输出对象。这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 pr…

docker部署prometheus+grafana视图监控

效果 一、grafana可视化平台部署 docker run -d \--namegrafana \--restartalways \-p 3000:3000 \grafana/grafanagrafana我也是部署在170.110服务器上,192.168.170.110:3000访问grafana 默认账号密码都是admin 二、部署exportor采集信息 针对各类数据库平台系统…

ch8_1_CPU的结构和功能

1. cpu的结构 1.1CPU 的功能 控制器的功能 控制器的功能具体作用取指令指令控制分析指令操作控制执行指令, 发出各种操作命令控制程序输入与结果的输出时间控制总线管理处理中断处理异常情况和特殊请求数据加工 运算器的功能 实现算术运算 和 逻辑运算&#x…

我的256创作纪念日

机缘 挺开心的,想到自己未曾写过一些非技术类的博客,恰巧今天刚好也是我的256创作纪念日,就乘着这个日子,写一点自己过去的收获、内心的想法和对未来的展望吧。 本人不才,只就读于一所民办本科之中,我挺不想…

【linux】探索Linux命令行中强大的网络工具:netstat

文章目录 前言一、netstat是什么?二、使用方法1.常用参数2.实例演示3.更多功能 总结 前言 在Linux命令行中,有许多实用的工具可帮助我们管理和监控网络连接。其中一个最重要的工具就是netstat,它提供了丰富的网络连接和统计信息,…

在windos中同时使用gitee与github

1.为什么这样做? 原因非常简单,我们遇到自己喜欢的git仓库后,通常会将他们克隆到我们本地电脑上,但这个时候会有一个问题,就是我们喜欢的仓库有可能是gitee仓库,也有可能是github仓库,这个时候…

web性能检测工具lighthouse

About Automated auditing, performance metrics, and best practices for the web. Lighthouse 可以自动检查Web页面的性能。 你可以以多种方式使用它。 浏览器插件 作为浏览器插件,访问chrome网上商店 搜索Lighthouse 插件安装。以两种方式使用。 方式一 安装…

命名管道:FIFO

至此,我们还只能在相关的程序之间传递数据,即这些程序是由一个共同的祖先进程启动的。但如果我们想在不相关的进程之间交换数据,这还不是很方便。 我们可以用FIFO文件来完成这项工作,它通常也被称为命名管道(named pip…

分布式重试服务平台 Easy-Retry

文章目录 [toc] 1.简介1.1[爱组搭官网](http://aizuda.com/)1.2介绍1.3 相关地址 2.架构2.1系统架构图2.2 客户端与服务端数据交互图 3.业内成熟重试组件对比4.快速开始4.1 服务端项目部署4.1.0 初始化脚本4.1.1 源码部署4.1.2 Docker部署 4.2 客户端集成配置4.2.1 添加依赖4.2…

青岛科技大学|物联网工程|物联网定位技术(第三讲)|15:40

目录 物联网定位技术(第三讲) 1. 试简述C/A码的作用、构成 请画出C/A码生成电路简图并给予原理性的说明 2. 试简述 P码的作用、构成 请画出P码生成电路简图,并给予原理性的说明 3. GPS信号是如何进行伪码扩频与解扩 请画图给予说明 4…

被抄袭声明

我(受害者)的博客主页: ChuckieZhu的博客_CSDN博客-MATLAB,Python,Django领域博主 抄袭者(施害者)博客主页: 洋洋菜鸟的博客_CSDN博客-python实例,数学建模,python基础领域博主 问题说明: …

vue结合elementui表格el-table实现弹窗checkbox自定义列显示隐藏,刷新保持上次勾选不丢失,附完整代码

el-table实现自定义列显示隐藏 有时候表格太多列,要是默认全都显示就会很拥挤,又不能固定只显示某些列,这时候我们可以让用户自定义要显示隐藏哪些列。 网上很多教程都是用的v-if,但是v-if非常麻烦,每一列都要写判断条…

Volo.Abp升级小记(二)创建全新微服务模块

文章目录 创建模块领域层应用层数据库和仓储控制器配置微服务 测试微服务微服务注册添加资源配置配置网关 运行项目 假设有一个按照 官方sample搭建的微服务项目,并安装好了abp-cli。 需要创建一个名为GDMK.CAH.Common的模块,并在模块中创建标签管理功能…

Centos环境 使用docker 部署MySQL 8.X详细版本

文章目录 安装docker配置docker 阿里镜像加速阿里云容器镜像服务ACR配置镜像源 安装部署MySQL拉取MySQL镜像创建挂载文件测试部署部署MySQL进入容器将它的mysql配置同步给宿主机删除test1测试容器 正式部署MySQL查看正式部署的容器状态配置远程连接字符集以及关闭跳过密码验证等…

基于STM32C8T6的智能小车项目时钟配置

一、时钟树简介 HSE 是高速的外部时钟信号,可以由有源晶振或者无源晶振提供,频率从 3-25MHZ 不等。当使用有源晶振时,时钟从 OSC_IN 引脚进入,OSC_OUT 引脚悬空,当选用无源 晶振时,时钟从 OSC_IN 和 OSC_OU…