Transformer模型简介

2023-10-26

简介

Transformer 是 Google 团队在 17 年 6 月提出的 NLP 经典之作,
由 Ashish Vaswani 等人在 2017 年发表的论文 Attention Is All You Need 中提出。

Transformer 在机器翻译任务上的表现超过了 RNN,CNN,只用 encoder-decoder 和 attention 机制就能达到很好的效果,最大的优点是可以高效地并行化。

在这里插入图片描述

Transformer 整体结构

首先介绍 Transformer 的整体结构,下图是 Transformer 用于中英文翻译的整体结构:

在这里插入图片描述
可以看到 Transformer 由 Encoder 和 Decoder 两个部分组成,Encoder 和 Decoder 都包含 6 个 block。Transformer 的工作流程大体如下:

第一步:获取输入句子的每一个单词的表示向量 X,X由单词的 Embedding(Embedding就是从原始数据提取出来的Feature) 和单词位置的 Embedding 相加得到。

在这里插入图片描述
第二步:将得到的单词表示向量矩阵 (如上图所示,每一行是一个单词的表示 x) 传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C,如下图。单词向量矩阵用 [公式] 表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。
在这里插入图片描述
第三步:将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。
在这里插入图片描述
上图 Decoder 接收了 Encoder 的编码矩阵 C,然后首先输入一个翻译开始符 “”,预测第一个单词 “I”;然后输入翻译开始符 “” 和单词 “I”,预测单词 “have”,以此类推。这是 Transformer 使用时候的大致流程,接下来是里面各个部分的细节。

Transformer 的输入

Transformer 中单词的输入表示 x由单词 Embedding 和位置 Embedding (Positional Encoding)相加得到。

在这里插入图片描述

单词 Embedding

单词的 Embedding 有很多种方式可以获取,例如可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。

位置 Embedding

Transformer 中除了单词的 Embedding,还需要使用位置 Embedding 表示单词出现在句子中的位置。因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于 NLP 来说非常重要。所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。

位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用了后者,计算公式如下:
在这里插入图片描述
其中,pos 表示单词在句子中的位置,d 表示 PE的维度 (与词 Embedding 一样),2i 表示偶数的维度,2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d)。使用这种公式计算 PE 有以下的好处:

  • 使 PE 能够适应比训练集里面所有句子更长的句子,假设训练集里面最长的句子是有 20 个单词,突然来了一个长度为 21 的句子,则使用公式计算的方法可以计算出第 21 位的 Embedding。
  • 可以让模型容易地计算出相对位置,对于固定长度的间距 k,PE(pos+k) 可以用 PE(pos) 计算得到。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。

将单词的词 Embedding 和位置 Embedding 相加,就可以得到单词的表示向量 x,x 就是 Transformer 的输入。

Attention

Scaled dot-product attention

“Scaled dot-product attention”如下图所示,其输入由维度为d的查询(Q)和键(K)以及维度为d的值(V)组成,所有键计算查询的点积,并应用softmax函数获得值的权重。
在这里插入图片描述
“Scaled dot-product attention”具体的操作有三个步骤:

  • 每个query-key 会做出一个点乘的运算过程,同时为了防止值过大除以维度的常数
  • 最后会使用softmax 把他们归一化
  • 再到最后会乘以V (values) 用来当做attention vector
    数学公式表示如下:
    在这里插入图片描述
    在论文中, 这个算法是通过queries, keys and values 的形式描述的,非常抽象。这里用了一张CMU NLP课里的图来进一步解释, Q(queries), K (keys) and V(Values), 其中 Key and values 一般对应同样的 vector, K=V 而Query vecotor 是对应目标句子的 word vector。如下图所示。
    在这里插入图片描述

Multi-head attention

上面介绍的scaled dot-product attention, 看起来还有点简单,网络的表达能力还有一些简单所以提出了多头注意力机制(multi-head attention)。multi-head attention则是通过h个不同的线性变换对Q,K,V进行投影,最后将不同的attention结果拼接起来,self-attention则是取Q,K,V相同。

在这里插入图片描述

Self-Attention

因为 Self-Attention是 Transformer 的重点,所以我们重点关注 Multi-Head Attention 以及 Self-Attention,首先详细了解一下 Self-Attention 的内部逻辑。

结构

在这里插入图片描述
上图是 Self-Attention 的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的。

Q, K, V 的计算

Self-Attention 的输入用矩阵X进行表示,则可以使用线性变阵矩阵WQ,WK,WV计算得到Q,K,V。计算如下图所示,注意 X, Q, K, V 的每一行都表示一个单词。
在这里插入图片描述

Self-Attention 的输出

得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:
在这里插入图片描述
公式中计算矩阵Q和K每一行向量的内积,为了防止内积过大,因此除以 [公式] 的平方根。Q乘以K的转置后,得到的矩阵行列数都为 n,n 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。下图为Q乘以 [公式] ,1234 表示的是句子中的单词。
在这里插入图片描述
得到QKt之后,使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1.
在这里插入图片描述
得到 Softmax 矩阵之后可以和V相乘,得到最终的输出Z。
在这里插入图片描述

上图中 Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数,最终单词 1 的输出 Z1等于所有单词 i 的值 Vi根据 attention 系数的比例加在一起得到,如下图所示:
在这里插入图片描述

Encoder 结构和Decoder 结构

在这里插入图片描述

如图所示是谷歌提出的transformer 的架构。这其中左半部分是 encoder 右半部分是 decoder。

  • Encoder: 由N=6个相同的layers组成, 每一层包含两个sub-layers. 第一个sub-layer 就是多头注意力层(multi-head attention layer)然后是一个简单的全连接层。 其中每个sub-layer都加了residual connection(残差连接)和normalisation(归一化)。

  • Decoder: 由N=6个相同的Layer组成,但这里的layer和encoder不一样, 这里的layer包含了三个sub-layers, 其中有一个self-attention layer, encoder-decoder attention layer 最后是一个全连接层。前两个sub-layer 都是基于multi-head attention layer。这里有个特别点就是masking, masking 的作用就是防止在训练的时候 使用未来的输出的单词。比如训练时,第一个单词是不能参考第二个单词的生成结果的。Masking就会把这个信息变成0,用来保证预测位置 i 的信息只能基于比 i 小的输出。

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

Transformer模型简介 的相关文章

随机推荐

  • element-ui组件库中Calendar日历组件使用心得(可能用到的常用方法和如何添加监听)

    最近接触到一个需求 做一个值班排班表 拿到低保真之后一直在考虑是如何实现这个排班表 考虑过自己写 也考虑过 fullcalendar vue插件 经过一些评估之后最终选择了项目本身使用的element ui组件库中Calendar日历组件
  • Kafka监控工具,LinkedIn详解

    Kafka监控工具包括以下几种 Kafka Manager 这是一个开源的Kafka集群管理工具 可以监控Kafka集群的健康和性能 并提供可视化的用户界面 Kafka Monitor 这是LinkedIn开发的一个监控工具 可以监控Kaf
  • PPYOLOE

    PP YOLOE是基于PP YOLOv2的单阶段Anchor free模型 超越了多种流行的yolo模型 PP YOLOE有一系列的模型 即s m l x 可以通过width multiplier和depth multiplier配置 PP
  • TDA4VM-LINUX-CSI-9296-9295-camera架构驱动分析和详细使用

    前言 TI在LINUX SDK 8 01版本后才开始支持Linux V4L2接入CSI2 所以在使用前尽量先用RTOS SDK接入CSI2的接口camera 正常工作后开始进行Linux V4L2的开发 LINUX SDK的安装使用 参考另
  • Linux微型服务器(NAS)的搭建

    现在人使用Nas的越来越多 但是对于学生党来说 拥有一个自己的Nas是一件令人兴奋的事情 本篇文章介绍微型Nas 基于神雕开发的海纳思系统 首先 我们选取的是机顶盒改微型nas 我们可以利用mas搭建网页 离线下载 挂青龙脚本 1 1Nas
  • 通过minikube部署kubernetes

    通过minikube部署kubernetes 需要本地验证部署一下knative 需要一个集群 所以先部署一个minikube 记录如下 0 环境准备 安装一个VM VirtualBox 6 0 4版本 1 安装Docker 自己的机器安装
  • 购物车测试用例

    1 界面测试 界面布局 排版是否合理 文字是否显示清晰 不同卖家的商品是否区分明显 页面的tooltips能正常显示 鼠标浮动在购物车按钮 迷你购物车界面显示是否正常 2 功能测试 未登录时 将商品加入购物车 页面跳转到登录页面 登录成功后
  • 开源Linux面板-1Panel

    开源Linux面板 1Panel 1Panel 是一个现代化 开源的 Linux 服务器运维管理面板 1Panel 的功能和优势包括 快速建站 深度集成 Wordpress 和 Halo 域名绑定 SSL 证书配置等一键搞定 高效管理 通过
  • Windows 10 PC 安装 Docker CE

    系统要求 Docker for Windows 支持 64 位版本的 Windows 10 Pro 且必须开启 Hyper V 安装 点击以下链接下载
  • 四数之和——双指针的实践

    一 四数之和 1 1 题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target 判断 nums 中是否存在四个元素 a b c 和 d 使得 a b c d 的值与 target 相等 找出所有满足条件且不重复的四元组 1
  • frida学习及使用

    文章目录 安装frida 安装python3 7 设置环境变量 安装pycharm和nodejs 使用frida 将frida server push到手机设备中 端口转发 安装apk 使用jadx查看java代码 运行frida serv
  • npm 升级依赖包

    首先安装升级插件 npm check updates npm install g npm check updates 或者 cnpm install g npm check updates ncu 是 npm check updates 的
  • 防抖 / 节流

    防抖 新建debounce js文件 export const debounce function fun delay let timer return function let that this let args arguments i
  • 7月9日王者荣耀服务器维护,《王者荣耀》7月9日体验服停机更新公告

    亲爱的召唤师 为了增加版本的稳定性 我们计划在2021年7月9日16 00 18 00对 王者荣耀 体验服进行停机维护 更新时间 7月9日16 00 18 00 15 30关闭PVP 更新方式 停机更新 更新范围 王者荣耀修炼之地体验服 下
  • 在iPhone/iPad端运行DebianLinux系统【iSH-AOK】

    最后一次更新 2023 4 08 请勿利用文章内的相关技术从事非法测试 由于传播 利用此文所提供的信息而造成的任何直接或者间接的后果及损失 均由使用者本人负责 作者不为此承担任何责任 文章目录 1 前言 2 简介 2 2iSH AOK介绍与
  • es批量修改数组动态增加并去重

    es创建测试的index和type 对应mysql的数据库和表 PUT uniq test idx1 mappings uniq test properties comId type long customerName type keywo
  • Your branch is ahead of 'origin/master' by 2 commits.

    遇到这种问题 表示在你之前已经有2个commit而没有push到远程分支上 所以需要先git push origin 将本地分支提到远程仓库 也可以直接git reset hard HEAD x解决 这里的x表示的就是在这之前已经有多少次的
  • 分享一些你觉得在Linux上顺理成章,换到Windows上就可能令人费解的事

    Linux与Windows都是十分常见的电脑操作系统 相信你对它们二者都有所了解 在你的使用过程中 是否有什么事让你觉得在Linux上顺理成章 换到Windows上就令你费解 亦或者关于这二者你有任何想要分享的 都可以在这里留下你的看法 方
  • PSM倾向得分匹配

    1 简要介绍 我们以 是否上大学 对 收入 的影响为例来说明这个问题 这里 先讲二者的关系设定为如下线性模型 显然 在模型 1 的设定中 我们可能忽略了一些同时影响 解释变量 是否上大学 和 被解释变量 收入 的因素 例如 家庭背景 能力
  • Transformer模型简介

    简介 Transformer 是 Google 团队在 17 年 6 月提出的 NLP 经典之作 由 Ashish Vaswani 等人在 2017 年发表的论文 Attention Is All You Need 中提出 Transfor