【论文精读(李沐老师)】Attention Is All You Need

Abstract

在主流的序列转录(给你一个序列,生成另外一个序列)模型中主要是依赖复杂的RNN和CNN,一般包括encoder和decoder两个结构。在性能最好的模型里,通常使用注意力机制连接encoder和decoder。
(本文想做一个序列转录模型,讲述了一下现在主流的模型是什么)
本文提出了一个新的简单的架构——Transformer,本模型完全基于注意力机制,而没有用RNN和CNN。做了两个机器翻译的实验,显示出这个模型在性能上特别好,有更好的并行化以及需用更少的时间来训练。我们的模型在英语到德语上的翻译工作达到了28.4的BLEU score,比目前最好的结果高出2个BLEU score。在英语到法语的翻译工作上,做了一个单模型实验,比所有的模型效果都要好,只在8个GPU上训练了3.5天。Transformer模型在别的任务上泛化的都很好。
(本文本来是针对机器翻译这一小领域提出的transformer,其出圈是可以应用到nlp,video等领域并取得了很好的效果)

Conclusion

一、本文提出了transfomer模型,是第一个仅仅使用注意力机制的序列转录模型,把之前的循环层全部换成了muti-headed self-attention
二、在机器翻译任务上,transformer要比基于RNN和CNN的架构快很多。在实际任务中,效果也比较好。
我们认为transformer可以用在文本以外的任务中,包括图片、语音和视频。使生成不那么时序化也是另外一个研究方向。

Introduction (对摘要的扩充)

一、在时序模型中,常用的是RNN(2017年提出)、LSTM和GRU。两个比较主流的模型是语言模式和Encoder-decoder架构。
二、(主要讲RNN的特点和缺点)假设你的序列是一个句子,RNN会一个词一个词的看,对第t个词,会计算其隐藏状态ht,ht是由h(t-1)和第t个词本身决定的。因此导致,难以并行化,计算量大以及会丢失距离较远的信息,如果不想丢失则需要付出较大的内存空间。虽然采用了一些因式分解等方法提升并行度,但是本质上还是没有解决太多的问题。
三、(主要讲Attention在RNN上的应用,如何将encoder的东西有效的传到decoder。)
四、(讲本文提出的transformer)transformer不再使用RNN,而是纯基于注意力机制,并行度很高,能在较短时间内做到很好的一个效果。

Background(相关工作)

一、如何使用CNN替换RNN来减少时序的计算,但CNN对于比较长的序列难以建模,Transfomer可以看到整个序列。但是卷积可以做多个输出通道,我们也想要这个效,所以提出了muti-headed attention来模拟CNN多输出通道的一个效果。
二、讲自注意力机制,这个工作已被提出,并不是本文的一个创新。
三、讲End-to-end Memory networks。
四、Transformer是第一个只依赖于自注意力机制,来做encoder-decoder架构的模型。

Model Architecture

一、序列模型中,现在比较好的是一个encoder-decoder的架构。encoder,是把x=( x 1 x_1 x1,……, x n x_n xn)表示成z=( z 1 z_1 z1,……, z n z_n zn)。decoder,放入z,生成一个( y 1 y_1 y1,…… y m y_m ym)的序列,在decode中,词是一个一个生成的,使用auto-regressive,即过去时刻的输出,作为当前时刻的输入。
二、Transformer是使用了一个encoder-decoder的架构,具体来说是将一些自注意力机制,Point-wise和fully connected layers堆积在一起。
在这里插入图片描述

Encoder and Decoder Stacks

Encoder:
使用了N=6个完全一样的layer。每个layer有两个子层,第一个子层是multi-head self-attention mechanism,第二个子层是a simple, position-wise fully connected feed-forward network(其实就是一个MLP,多层感知机)。对每一个子层用了一个残差连接,最后使用(layer norm,对每一个样本做Norm)层归一化。为了简单起见,对每一层输出的维度都变成512。
Decoder:
使用了N=6个完全一样的layer。每个layer有三个子层,其中两个子层与encoder一样,第三个子层用了一个Masked Multi-Head Attention。Mask,当前时刻为t,mask只能让看到t时刻之前(为了保证和预测时保持一致,具体做法:将t时刻之后,包括t时刻,取一个很大的负数如 − 1 0 10 -10^{10} 1010,这样进入softmax做指数后就会变成0)。

Attention(注意力层)

注意力函数是一个将query和一些key-value对映射成输出的一个函数。query,key-value和output都是一些向量。output是value的一个加权和(导致output和value的维度一样),每个value的权重是value对应的key与query的相似度算来的。
(在连接encoder和decoder时,key和value不会改变,随着query的改变,权重不同,输出也会不同)

Scaled Dot-Product Attention(是最简单的注意力机制)

一、query和key长度都是等长的,为 d k d_k dk。value是 d v d_v dv(那么输出也是 d v d_v dv)。对query和key做内积,然后将其作为相似度(内积越大,相似度越高),然后除以 d k \sqrt{d_k}\quad dk ,然后通过一个softmax(对每一行做softmax,每一行之间是独立的)来得到权重(非负加起来为一)。
二、query可以写成一个矩阵Q(因为可能不止一个query),key——K,value——V
在这里插入图片描述
在这里插入图片描述
三、一般有两种比较常见的注意力机制:additive attention(可以处理query和key不等长的情况) 和 dot-product attention(本文用)。两种注意力机制其实差不多,本文选择的是点乘注意力机制,因为简单、高效。
四、(解释为什么除以一个 d k \sqrt{d_k}\quad dk )当 d k d_k dk(向量长度)比较大时,点积后的值可能会比较大/较小,就会导致softmax后的值向两端(0和1)靠拢,出现这种情况算梯度会比较小,所以除以一个 d k \sqrt{d_k}\quad dk
在这里插入图片描述

Multi-Head Attention

一、与其做一个单个的注意力函数,不如将整个k,v,q投影到低纬,投影h次(本文用了8个头),然后再做h次的注意力函数,然后将每一个注意力函数的输出并在一起,再投影回来得到一个最终的输出。
在这里插入图片描述
在这里插入图片描述
三、在我们的工作中,h=8。因为有残差连接的存在,我们输入和输出的维度要一样,所以投影的维度为 d k = d v = d m o d e l / h = 512 / 8 = 64 d_k=d_v=d_model/h=512/8=64 dk=dv=dmodel/h=512/8=64(我们每一次将其投影到64维,然后算注意力函数,最后在投影回来)。

Applications of Attention in our Model(讲在transformer中如何使用注意力机制的)

一、在编码器(encoder layers)这一层。假设句子长为n(n个词),则编码器的输入为n个长为d的向量。Q,K,V其实是一样的,复制了三份,只是 w q , w k , w v w_q,w_k,w_v wqwkwv不同。
二、在解码器(decoder layers)这一层。唯一与编码器这一层的注意力机制,不一样的是有一个mask这个东西。
三、在连接encoder和decoder这一层,key和value来自编码器的输出(n个长为d的向量),query来自解码器下一个attention的输入(m个长为d的向量)。

Position-wise Feed-Forward Networks(下图中蓝色部分)

在这里插入图片描述
一、其实就是一个全连接的前馈网络(其实是一个MLP),不一样的是同一个MLP对每一个词都作用了一次(这个就是position-wise)。
在这里插入图片描述
二、x是一个512维, W 1 W_1 W1会将其投到2048维(扩大了四倍),但是由于还要做残差连接,所以用 W 2 W_2 W2将其又投影到512维。FFN(x)说白了就是一个单隐藏层MLP,然后中间隐藏层把输入扩大了四倍,最后输出的时候又回到输入大小。
其实就是通过一个attention层全局的去拉了整个序列的信息,然后再用MLP做语义的转换。

Embeddings and Softmax

embedding,给任何一个词,学习一个长为d(本文d=512)的向量来表示。
编码器,解码器,在softmax之前,都需要一个embedding,本文为了方便,使用了相同的权重。在embedding layers乘了一个 d m o d e l \sqrt{d_{model}}\quad dmodel (d=512)。因为在学习embedding的时候,会把每一个向量的L2 norm学成一个比较小的值,从而导致学习到的权重值比较小。因为要之后要加入Positional encoding,乘了一个 d m o d e l \sqrt{d_{model}}\quad dmodel 后这样会使得这两个在规模(scale)上差不多。

Positional Encoding

attention不会处理时序信息,当一句话的词颠倒时,对于attention来说没变化,但是这句话的语义已经发生了改变,所以需要positional encoding。

Why Self-Attention

在这里插入图片描述
Complexity per Layer计算复杂度(越低越好)
Sequential Operations顺序的计算(越低越好,即下一步计算必须要等前面多少计算完成)
Maximun Path Length(越短越好,一个信息到另一个信息点的距离)

Training

Training Data and Bathing

byte-pair encoding (bpe)…

Hardware and Schedule

8 NVIDIA P100 GPUs…

Optimizer

Adam
模型越宽学习率越小

Regularization(正则化)

Residual Dropout
Transformer中对每个子层(self-attention层和全连接层)都进行了residual dropout。具体来说,在每个子层的输入和输出之间添加了一个残差连接,并在残差连接上应用了dropout。这样做的目的是防止过拟合和加速训练。
Label Smoothing

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

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

相关文章

HTTP API接口设计规范

1. 所有请求使用POST方法 使用post,相对于get的query string,可以支持复杂类型的请求参数。例如日常项目中碰到get请求参数为数组类型的情况。 便于对请求和响应统一做签名、加密、日志等处理 2. URL规则 URL中只能含有英文,使用英文单词或…

爱玩飞飞加速实现与分析

一步一步找数据。然后根据游戏数据找游戏基址,游戏基址可以遍历所有数据。想学的可以看看。第一步找基础数据,我们用的ce7.1.当然你们也可以用其他版本。网上随便下一个就行。 第一步。打开ce7.1附加游戏进程。 然后看下自己的血量是多少。我们这里是5…

HTML5支持的视频文件格式和音频文件格式有哪些?

在 HTML5 标准中, 我们有了新的 和 标签, 分别可以引入视频和音频文件的标签 那么这些标签又可以支持哪些文件格式呢 ? 格式支持 视频文件格式 MP4:MPEG-4 Part 14,支持H.264编码。几乎所有的浏览器都支持该格式。 WebM:谷歌开发的格式&a…

【最短路算法】第三弹:一文学懂spfa 算法(队列优化的Bellman-Ford算法)

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:算法、数据结构、Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: 算法 ;该专栏专注于蓝桥杯和ACM等算法竞赛🔥近期目标&…

Java Script

一.初识js 1.与css html的关系 HTML 网页的结构(骨CSS:网页的表现(皮JavaScript :网页的行为2.运行过程 编写的代码是保存在文件上,也就是存储到硬盘(外存zhong)双击以后,html文件浏览器(引用程序)就会读取文件,将文件内容加载到内存中,(数据流向:硬盘->内存)浏览器会解析用…

Linux——基本指令

目录 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要) 06.rmdir指令 && rm 指令(重要) 07.man指令(重要) 08.cp指令(重要) 09.mv指令&…

react使用craco.config.js完成rem移动端适配(sass)

环境: "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.8.2", "sass": "^1.58.3", yarn add craco/craco postcss-pxtorem lib-flexible 1、创建 craco.…

Java入门知识(超详细讲解)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

REDIS19_zipList压缩列表详解、快递列表 - QuickList、跳表 - SkipList

文章目录①. 压缩列表 - zipList②. 快递列表 - QuickList③. 跳表 - SkipList①. 压缩列表 - zipList ①. ZipList是一种特殊的"双端链表",由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1) (oxff:11111111) type…

BI界的ChatGPT,它有什么厉害之处

​ChatGPT火了,注册用户从0到1亿,仅用了2个月时间。ChatGPT的背后是大数据、大模型、大算力,是AI的能力集中化的典型场景。那么在BI界,是否也有一款像ChatGPT一样智能BI软件,只要告诉它我们想看啥数据,它噔…

使用 Jpom 自动构建和部署项目

比 Jenkins 简单的项目构建和部署工具。 前端项目自动构建部署 我有几个自用的前端项目,每次修改代码后都需要本地打包再上传到服务器进行部署,感觉有点麻烦,不够自动化,所以一直想找个能够实现自动构建和部署的工具。 这时候可…

智能灯泡灯一Homekit智能家居

传统的灯泡是通过手动打开和关闭开关来工作。有时,它们可以通过声控、触控、红外等方式进行控制,或者带有调光开关,让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块,可与手机、家庭智能助手、或其他智能硬件进行通信&#…

Camtasia Studio2023非常好用的电脑录屏软件

如果你需要制作视频教程、游戏直播或其他视频内容,那么一个好的录屏软件就是必不可少的。Camtasia Studio是非常好用的录屏软件,它们可以记录计算机屏幕上发生的所有活动,并可捕捉声音。这些软件还提供了一些视频编辑功能,如裁剪、…

【Python学习笔记(七)】queue队列模块的使用

queue队列模块的使用 前言 为了解决多线程之间共享数据的问题,需要对线程进行加锁或者是线程等待; 更简单的解决这一问题,就需要引入队列的概念: 队列是一种特殊的线性表,是一种先进先出 (FIFO) 的数据结构&#xff…

代码随想录第二十七天(669、108、538、回溯算法介绍)

669. 修剪二叉搜索树 不能简单地通过递归实现代码&#xff0c;比如&#xff1a; class Solution { public:TreeNode* trimBST(TreeNode* root, int low, int high) {if (root nullptr || root->val < low || root->val > high) return nullptr;root->left t…

Altium Designer 2023版本安装过程

1、解压下载好的文件。 2、双击打开Setup文件夹。 3、找到installer文件&#xff0c;右键点击&#xff0c;并且以管理员身份运行。 4、点解next。 5、选择语言位&#xff1a;Chinese&#xff0c;点击我同意&#xff0c;接着next。 6、勾选前面两个&#xff0c;点击next。 7、选…

View绘制流程分析

View绘制流程分析 目录介绍 01.addView的流程分析 1.1 wm.addView()流程 02.requestLayout绘制 2.1 源码流程分析2.2 View绘制流程简析 03.performMeasure测量 3.1 performMeasure源码3.2 measure设计思路3.3 measure测量流程 04.performLayout布局 4.1 performLayout源码4.2…

页面布局 so easy——Android开发常见的界面布局方式详解

​ 在Android应用中&#xff0c;界面由布局和控件组成。布局好比是建筑里的框架&#xff0c;控件相当于建筑里的砖瓦。针对界面中控件不同的排列位置&#xff0c;Android定义了相应的布局进行管理。本篇将针对Android界面中常见的布局进行详细地讲解。 View视图 所有的UI元素…

C 语言网络编程 — 内核协议栈收包/发包流程

目录 文章目录目录关键技术DMAsk_buff 结构体Net driver Rx/Tx Ring BufferBuffer Descriptor TableNAPI 收包机制网卡多队列内核协议栈收包/发包流程概览内核协议栈收包流程详解驱动程序层&#xff08;数据链路层&#xff09;VLAN 协议族Linux Bridge 子系统网络协议层&#x…

PCB模块化设计01——USB接口详解知识要点

目录PCB模块化设计01——USB接口详解知识要点一、定义二、USB分类&#xff1a;三、传输协议四、USB接口布局布线要求PCB模块化设计01——USB接口详解知识要点 一、定义 USB是通用串行总线(Universal Serial Bus)&#xff0c;分为HOST/DEVICE两个角色&#xff0c;所有的数据传…
最新文章