Transformer:Attention is All You Need

2023-11-18

【Transformer论文逐段精读【论文精读】】 https://www.bilibili.com/video/BV1pu411o7BE/?share_source=copy_web&vd_source=30e93e9c70e5a43ae75d42916063bc3b

论文地址:[1706.03762] Attention Is All You Need (arxiv.org)

Transformer第一个完全依靠自我注意来计算输入和输出表示的transduction model,不用序列对齐的rnn和CNN,实现高度并行化。

Trasformer并行:先用注意力机制获取序列全局信息(对所有value加权和),然后再在每一个position进行MLP语义转换

RNN串行:某时刻的输出依赖于当前时刻的输入以及上一时刻的输出,无法看到全局信息

1 Introduction

RNN,特别是LSTM(GRU)被确立为sequence建模和transduction(语言模型、机器翻译)的最先进方法。RNN有顺序计算的基本约束,这种固有顺序性质排除了训练示例中的并行化。

在多种任务中,注意力机制成为序列建模和转导模型的一个组成部分,允许在不考虑它们在输入或输出序列中的距离的情况下建模依赖关系[2,19]。然而,除了少数情况外,这种注意机制都是与循环网络结合使用的。

本文提出Transformer,避免RNN,完全依赖注意力机制绘制输入和输出之间全局依赖关系,它允许明显更高的并行化

2 Background

一些模型使用CNN作为基本构建块,为所有输入输出位置并行计算隐藏表示,减少顺序计算,但关联来自两个任意输入或输出位置的信号所需的操作数量随着位置之间的距离而增长(因为卷积操作每次都看一小个窗口,之后再把所有窗口拼起来),在Transformer中,这被减少为一个常数数量的操作。考虑到CNN可以多输出通道,可以看到不同方面的信息,我们用Multi-Head Attention来达到同样的效果。

Transformer第一个完全依靠自我注意来计算输入和输出表示的transduction model,不用序列对齐的rnn和CNN。

3 Model Architecture

Encoder将符号表示的输入序列(x1,x2,…xn)映射到连续表示序列(z1,z2,…zn),Decoder生成输出序列(y1,…,ym)时,是一次一个元素输出的,在每一步中,模型都是自回归,在生成下一步时,将先前生成的符号作为额外的输入。

Transformer遵循Encoder—Decoder结构,为编码器和解码器使用了堆叠的自关注层和按点完全连接层。

3.1 Encoder and Decoder Stacks

Encoder

Encoder由6个相同层的堆栈组成,每一层有两个子层。一个multi-head self Attention,另一个是简单的、按位置完全链接的前馈网络每个子层使用一个ResNet,并进行layernorm。每个子层的输出是LayerNorm(x+sublayer(x))。layernorm是每一个样本自己归一化(BN是对一个batch里所有样本的某一特征进行归一化)

Decoder

也是6层相同层的堆栈组成,也resnet和归一化。解码器还插入第三个子层,该子层对编码器堆栈的输出执行多头注意,修改了解码器堆栈中的自关注子层,以防止位置关注后续位置。这种掩蔽,结合输出嵌入被一个位置抵消的事实,确保对位置i的预测只能依赖于小于i位置的已知输出。这是因为解码器是一个自回归,每一个时刻的输出依赖于前一个时刻输出,但是Transformer可以看到所有序列,因此需要遮盖一下后续的位置。(遮盖的原因是在测试集中,我们是无法看到某时刻之后的信息的,因此和测试集保持一致)

3.2 Attention

Attention function将query和一组key value对映射到输出,q,k,v都是向量,输出是按value的加权和计算的,给每个value的权重是query与相应的key计算的。

3.2.1 Scaled Dot-Product Attention

将QK点积再缩放,然后经过sotmax计算权重,对v加权求和。缩放因为防止Q K点积值太大,落入softmax梯度小的地方。

3.2.2 Multi-Head Attention

与使用d_model的k,q,v执行单一的注意力函数不同,有益的做法将k,q,v线性投影到d_k,d_k,d_v是有益的,在每一个线性投影上,并行执行Attention function,产生d_v输出值,被concat再次投影,产生最终值。

3.2.3 Applications of Attention in our Model

Encoder中的self-attention层,所有k,v,q来自同一个地方,都是编码器前一层的输出,编码器中的每个位置都可以处理编码器前一层中的所有位置。

编码器-解码器注意”层中,查询来自前一个解码器层,记忆键和值来自编码器的输出。这使得解码器中的每个位置都可以覆盖输入序列中的所有位置。这模拟了序列到序列模型中典型的编码器-解码器注意机制。

解码器中的自注意层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。我们需要防止信息在解码器中向左流动,以保持自回归特性。通过屏蔽(设置为−∞)softmax输入(那么经过softmax后权重值设为0)中对应非法连接的所有值来实现缩放点积注意。

3.3 Position-wise Feed-Forward Networks

每一个子层中的FNN都是相同的结构,两层线性转换加一个Relu激活函数,对每一个position(词)单独做相同的FNN,但每一层的参数是不同的。

3.4 Embeddings and Softmax

与其它sequence transduction模型类似,我们使用学习嵌入将输入token和输出token转换为维度为d_model的向量。使用常用的线性变换和softmax函数将解码器输出转换为预测的下一个token的概率。在模型中,在两个embedding层之间共享相同的权重矩阵和pre-softmax线性变换。

3.5 Positional Encoding

因为模型中不包含RNN和CNN,为了使模型利用sequence序列的顺序,必须注入一些关于tokens的相对或绝对位置的信息。将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码与嵌入具有相同的维数d_model,因此两者可以直接相加。

本文使用不同频率的正弦和余弦函数,其中pos是position,i是dimension。即每一个维度的位置编码对应一个正弦波。我们选择这个函数,因为它让模型很容易地根据相对位置计算,比如,对任何固定偏移k,P_Epos + k 可以表示为P_Epos的线性函数。同时也可以允许模型外推到比训练期间遇到的序列长度更长的序列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Transformer:Attention is All You Need 的相关文章

随机推荐

  • volatile和synchronized的区别

    共性 volatile与synchronized都用于保证多线程中数据的安全 区别 1 volatile修饰的变量 jvm每次都从主存 主内存 中读取 而不会从寄存器 工作内存 中读取 而synchronized则是锁住当前变量 同一时刻只
  • 第一次 openwrt源码下载编译

    openwrt 学习记录 第一次 openwrt源码下载编译 MT7620开发板 安装虚拟机VMware 安装Ubnutu 先进入root账户 topeet ubuntu su 输入密码 1 搭建编译环境 参考 https blog csd
  • maven的使用

    目录 一 maven基本参数 二 maven基础结构 三 mvn的打包和运行 一 maven基本参数 groupId 是指项目里面的标识 一般写法是com mycom myapp 其中mycom是指你公司的域名 例如com google m
  • YOLOv5+PaddleOCR手写签名识别

    YOLOv5 PaddleOCR手写签名识别 介绍 参加了一个中国移动的比赛 比赛的数据集是一个工单 上面有多个人的签名还有手写的时间 因为主办方不允许数据公开 所以在这一系列博客中 我主要讲一下实现的思路 在YOLO演示的时候我会用其他的
  • 查看linux服务器内存信息

    查看服务器内存信息 dmidecode grep P A5 Memory s Device grep Size root localhost home dmidecode grep P A5 Memory s Device grep Siz
  • 【leetcode刷题】--- 21.合并两个有序链表(C++递归)

    21 合并两个有序链表 原题链接 https leetcode cn com problems merge two sorted lists 题目 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成
  • 关于ApplicationContext的getBean()方法发现

    假定 Son类实现father接口 在Son类定义声明式事务后 通过ApplicationContext接口的getBean Class arg0 方法获取注入好的bean会报异常 方法参数Son class Son已声明bean org
  • 18. 线性代数 - 线性变换

    文章目录 线性空间 线性变换 线性变换的几何意义 特征值与特征向量 NumPy的矩阵操作 Hi 你好 我是茶桁 经历了几节线性代数课程之后 终于咱们到了最后一节课了 本节课的内容说多不多 说少也不少 我们先是要理解一下线性空间和线性变换 并
  • uml之Robustness Diagram

    Robustness Diagram 从需求分析到架构设计 转载自 http www dotblogs com tw jed archive 2010 11 21 robustness diagram aspx 什么是Robustness
  • Java IO流

    目录 一 认识Java的流 二 使用字节流读写文本文件 三 使用字符流读写文本文件 四 读写二进制文件 五 序列化和反序列化 六 总结 一 认识Java的流 1 读文件是指把文件中的数据读取到内存中 2 写文件是把内存中的数据写到文件中 3
  • 2023高教社杯 国赛数学建模E题思路 - 黄河水沙监测数据分析

    1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河 研究黄河水沙通量的变化规律对沿黄流域的环境治理 气候变 化和人民生活的影响 以及对优化黄河流域水资源分配 协调人地关系 调水调沙 防洪减灾 等方面都具有重要的理论指导意义 附件
  • spring boot 之 kotlin语言开发,用一次就想放弃Java,爽歪歪~~~

    废话少说 上视频 spring boot 之 kotlin用一次就想放弃java 爽歪歪 1 启动入口 SpringBootApplication EnableDiscoveryClient class TawuziAuthServerDb
  • LVGL V8学习之键盘按键样式重绘(二)

    这一篇继续研究一下基于btnmatrix的键盘按键重绘 是对上一篇LVGL V8学习之键盘按键样式重绘 一 的代码的优化 还是通过codeblock来模拟代码的运行 代码如下 按键矩阵的事件回调函数 static void btnmatri
  • vue后台管理系统—— 模糊查询和列表分页展示

    1 效果显示 通过输入作品名称或者开始时间或者结束时间来显示数据列表 这里的三项选择可以输入其一 也可以都输入 2 分页代码 用的是element组件 包括表格 上面的搜索 div class personalident top div
  • pycharm scrapy 爬取“文章”(文章阅读网)

    import scrapy import re from urllib import parse from scrapy http import Request from Article spider Article spider item
  • nvm使用大全nvm如何动态切换node版本

    注意 nvm use node版本时 要使用管理员权限打开cmd输入命令 否则报错 常用命令 nvm ls 列出所有已安装的 node 版本 nvm list 列出所有已安装的 node 版本 nvm list available 显示所有
  • java基础:日志框架

    文章目录 一 日志技术的概述 二 日志技术体系 三 Logback日志框架 四 Logback快速入门 五 Logback 配置详解 5 1 输出位置 格式设置 5 2 对日志不同内容是否输出的控制 一 日志技术的概述 程序中的日志可以用来
  • Linux 数据库备份与恢复

    1 备份数据主要使用dump命令 格式为 mysqldump u db user p db passwd db name gt backup dir db name time sql p 和 db passwd之间没有空格 不然 db pa
  • 加解密和签名验签简述

    文章目录 一 数字加密算法 1 对称加密 2 非对称加密 3 对称加密和非对称加密的区别 二 使用keytool生成证书 1 创建证书 2 查看密钥库 2 1 keytool list 命令 2 2 keytool list v 命令 3
  • Transformer:Attention is All You Need

    Transformer论文逐段精读 论文精读 https www bilibili com video BV1pu411o7BE share source copy web vd source 30e93e9c70e5a43ae75d429