【自然语言处理

2023-11-05

Transformer由论文《Attention is All You Need》提出:

在这里插入图片描述

论文地址为:

https://arxiv.org/pdf/1706.03762.pdf

一、Transformer 整体结构

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

在这里插入图片描述

上图是 Transformer 的整体结构,左图 Encoder 和右图 Decoder

可以看到 TransformerEncoderDecoder 两个部分组成,EncoderDecoder 都包含 6 个 blockTransformer 的工作流程大体如下:

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

在这里插入图片描述

第二步:将得到的单词表示向量矩阵 (如上图所示,每一行是一个单词的表示 x x x) 传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C C C,如下图。单词向量矩阵用 X n × d X_{n \times d} Xn×d表示, n n n 是句子中单词个数, d d d 是表示向量的维度 (论文中 d = 512 d = 512 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。

在这里插入图片描述
上图展示了 Transformer Encoder 编码句子信息。

第三步:将 Encoder 输出的编码信息矩阵 C C C 传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i + 1 i + 1 i+1,如下图所示。在使用的过程中,翻译到单词 i + 1 i + 1 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i + 1 i + 1 i+1 之后的单词。

在这里插入图片描述
Transofrmer Decoder 预测。

上图 Decoder 接收了 Encoder 的编码矩阵 C C C,然后首先输入一个翻译开始符 “”,预测第一个单词 “I”;然后输入翻译开始符 “” 和单词 “I”,预测单词 “have”,以此类推。这是 Transformer 使用时候的大致流程,接下来是里面各个部分的细节。

二、Transformer 的输入

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

在这里插入图片描述

2.1 单词 Embedding

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

2.2 位置 Embedding

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

所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。

位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用了后者,计算公式如下:
P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d ) P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d ) PE_{(pos,2i)}=\sin(pos / 10000^{2i / d})\\ PE_{(pos,2i+1)}=\cos(pos / 10000^{2i / d}) PE(pos,2i)=sin(pos/100002i/d)PE(pos,2i+1)=cos(pos/100002i/d)
其中,pos表示单词在句子中的位置, d d d表示 PE 的维度(与词 Embedding 一样), 2 i 2i 2i表示偶数的维度, 2 i + 1 2i+1 2i+1表示奇数维度(即 2 i ≤ d 2i \leq d 2id 2 i + 1 ≤ d 2i+1 \leq d 2i+1d)。使用这种公式计算 PE 有以下的好处:

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

因为 sin ⁡ ( A + B ) = sin ⁡ ( A ) cos ⁡ ( B ) + cos ⁡ ( A ) sin ⁡ ( B ) , cos ⁡ ( A + B ) = cos ⁡ ( A ) cos ⁡ ( B ) − sin ⁡ ( A ) sin ⁡ ( B ) \sin(A + B) = \sin(A) \cos(B) + \cos(A) \sin(B), \cos(A + B) = \cos(A) \cos(B) - \sin(A) \sin(B) 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 x x x x 就是 Transformer 的输入。

三、Self-Attention(自注意力机制)

在这里插入图片描述
上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block

红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention 组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。

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

3.1 Self-Attention 结构

在这里插入图片描述

上图是 Self-Attention 的结构,在计算的时候需要用到矩阵 Q Q Q(查询), K K K(键值), V V V(值)。

在实际中,Self-Attention 接收的是输入(单词的表示向量 x x x 组成的矩阵 X X X ) 或者上一个 Encoder block 的输出。而 Q Q Q, K K K, V V V正是通过 Self-Attention 的输入进行线性变换得到的。

3.2 Q, K, V 的计算

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

在这里插入图片描述

3.3 Self-Attention 的输出

得到矩阵 Q Q Q, K K K, V V V 之后就可以计算出 Self-Attention 的输出了,计算的公式如下:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}}) Attention(Q,K,V)=softmax(dk QKT)
d k d_k dk Q Q Q K K K 矩阵的列数,即向量维度。

公式中计算矩阵 Q Q Q K K K 每一行向量的内积,为了防止内积过大,因此除以 d k d_k dk 的平方根。 Q Q Q 乘以 K K K 的转置后,得到的矩阵行列数都为 n n n n n n 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。下图为 Q Q Q 乘以 K T K^T KT,1234 表示的是句子中的单词。

在这里插入图片描述
Q Q Q 乘以 K K K 的转置的计算】

得到 Q K T QK^T QKT 之后,使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1。

在这里插入图片描述
【对矩阵的每一行进行 Softmax

得到 Softmax 矩阵之后可以和 V V V 相乘,得到最终的输出 Z Z Z

在这里插入图片描述
Self-Attention 输出】

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

3.4 Multi-Head Attention

在上一步,我们已经知道怎么通过 Self-Attention 计算得到输出矩阵 Z Z Z,而 Multi-Head Attention 是由多个 Self-Attention 组合形成的,下图是论文中 Multi-Head Attention 的结构图:

在这里插入图片描述

从上图可以看到 Multi-Head Attention 包含多个 Self-Attention 层,首先将输入 X X X 分别传递到 h h h 个不同的 Self-Attention 中,计算得到 h h h 个输出矩阵 Z Z Z。下图是 h = 8 h = 8 h=8 时候的情况,此时会得到 8 个输出矩阵 Z Z Z

在这里插入图片描述

得到 8 个输出矩阵 Z 1 Z_1 Z1 Z 8 Z_8 Z8 之后,Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个 Linear 层,得到 Multi-Head Attention 最终的输出 Z Z Z

在这里插入图片描述
可以看到 Multi-Head Attention 输出的矩阵 Z Z Z 与其输入的矩阵 X X X 的维度是一样的。

四、Encoder 结构

在这里插入图片描述
Transformer Encoder block

上图红色部分是 TransformerEncoder block 结构,可以看到是由 Multi-Head Attention, Add & Norm, Feed Forward, Add & Norm 组成的。刚刚已经了解了 Multi-Head Attention 的计算过程,现在了解一下 Add & NormFeed Forward 部分。

4.1 Add & Norm

Add & Norm 层由 AddNorm 两部分组成,其计算公式如下:
L a y e r N o r m ( X + M u l t i H e a d A t t e n t i o n ( X ) ) LayerNorm(X + MultiHeadAttention(X)) LayerNorm(X+MultiHeadAttention(X))
L a y e r N o r m ( X + F e e d F o r w a r d ( X ) ) LayerNorm(X + FeedForward(X)) LayerNorm(X+FeedForward(X))
其中 X X X 表示 Multi-Head Attention 或者 Feed Forward 的输入,MultiHeadAttention( X X X) 和 FeedForward( X X X) 表示输出 (输出与输入 X X X 维度是一样的,所以可以相加)。

Add X X X + MultiHeadAttention( X X X),是一种残差连接,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分,在 ResNet 中经常用到:

在这里插入图片描述

NormLayer Normalization,通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。

4.2 Feed Forward

Feed Forward 层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数,对应的公式如下:
max ⁡ ( 0 , X W 1 + b 1 ) W 2 + b 2 \max(0, XW_1 + b_1)W_2 + b_2 max(0,XW1+b1)W2+b2
X X X 是输入,Feed Forward 最终得到的输出矩阵的维度与 X X X 一致。

4.3 组成 Encoder

通过上面描述的 Multi-Head Attention, Feed Forward, Add & Norm 就可以构造出一个 Encoder blockEncoder block 接收输入矩阵 X ( n × d ) X_{(n \times d)} X(n×d),并输出一个矩阵 O ( n × d ) O_{(n \times d)} O(n×d)。通过多个 Encoder block 叠加就可以组成 Encoder

第一个 Encoder block 的输入为句子单词的表示向量矩阵,后续 Encoder block 的输入是前一个 Encoder block 的输出,最后一个 Encoder block 输出的矩阵就是编码信息矩阵 C C C,这一矩阵后续会用到 Decoder 中。

在这里插入图片描述
Encoder 编码句子信息】

五、Decoder 结构

在这里插入图片描述
上图红色部分为 TransformerDecoder block 结构,与 Encoder block 相似,但是存在一些区别:

  • 包含两个 Multi-Head Attention 层;
  • 第一个 Multi-Head Attention 层采用了 Masked 操作;
  • 第二个 Multi-Head Attention 层的 K K K, V V V 矩阵使用 Encoder 的编码信息矩阵 C C C 进行计算,而 Q Q Q 使用上一个 Decoder block 的输出计算;
  • 最后有一个 Softmax 层计算下一个翻译单词的概率。

5.1 第一个 Multi-Head Attention

Decoder block 的第一个 Multi-Head Attention 采用了 Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i i i 个单词,才可以翻译第 i + 1 i + 1 i+1 个单词。通过 Masked 操作可以防止第 i i i 个单词知道 i + 1 i + 1 i+1 个单词之后的信息。下面以 “我有一只猫” 翻译成 “I have a cat” 为例,了解一下 Masked 操作。

下面的描述中使用了类似 Teacher Forcing 的概念,不熟悉 Teacher Forcing 的童鞋可以参考以下上一篇文章 Seq2Seq 模型详解。在 Decoder 的时候,是需要根据之前的翻译,求解当前最有可能的翻译,如下图所示。首先根据输入 “” 预测出第一个单词为 “I”,然后根据输入 “ I” 预测下一个单词 “have”。

在这里插入图片描述

Decoder 预测】

Decoder 可以在训练的过程中使用 Teacher Forcing 并且并行化训练,即将正确的单词序列 ( I have a cat) 和对应输出 (I have a cat ) 传递到 Decoder。那么在预测第 i i i 个输出时,就要将第 i + 1 i + 1 i+1 之后的单词掩盖住,注意 Mask 操作是在 Self-AttentionSoftmax 之前使用的,下面用 0 1 2 3 4 5 分别表示 “ I have a cat ”。

第一步:是 Decoder 的输入矩阵和 Mask 矩阵,输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5 × 5 5\times 5 5×5 的矩阵。在 Mask 可以发现单词 0 只能使用单词 0 的信息,而单词 1 可以使用单词 0, 1 的信息,即只能使用之前的信息。

在这里插入图片描述
【输入矩阵与 Mask 矩阵】

第二步:接下来的操作和之前的 Self-Attention 一样,通过输入矩阵 X X X 计算得到 Q Q Q, K K K, V V V 矩阵。然后计算 Q Q Q K T K^T KT 的乘积 Q K T QK^T QKT

在这里插入图片描述
Q Q Q 乘以 K K K 的转置】

第三步:在得到 Q K T QK^T QKT 之后需要进行 Softmax,计算 attention score,我们在 Softmax 之前需要使用 Mask 矩阵遮挡住每一个单词之后的信息,遮挡操作如下:
在这里插入图片描述
Softmax 之前 Mask

得到 Mask Q K T QK^T QKT 之后在 Mask Q K T QK^T QKT 上进行 Softmax,每一行的和都为 1。但是单词 0 在单词 1, 2, 3, 4 上的 attention score 都为 0。

第四步:使用 Mask Q K T QK^T QKT 与矩阵 V V V 相乘,得到输出 Z Z Z,则单词 1 的输出向量 Z 1 Z_1 Z1 是只包含单词 1 信息的。

在这里插入图片描述
Mask 之后的输出】

第五步:通过上述步骤就可以得到一个 Mask Self-Attention 的输出矩阵 Z i Z_i Zi ,然后和 Encoder 类似,通过 Multi-Head Attention 拼接多个输出 Z i Z_i Zi 然后计算得到第一个 Multi-Head Attention 的输出 Z Z Z Z Z Z 与输入 X X X 维度一样。

5.2 第二个 Multi-Head Attention

Decoder block 第二个 Multi-Head Attention 变化不大, 主要的区别在于其中 Self-Attention K K K, V V V 矩阵不是使用 上一个 Decoder block 的输出计算的,而是使用 Encoder 的编码信息矩阵 C C C 计算的。

根据 Encoder 的输出 C C C 计算得到 K K K, V V V,根据上一个 Decoder block 的输出 Z Z Z 计算 Q Q Q (如果是第一个 Decoder block 则使用输入矩阵 X X X 进行计算),后续的计算方法与之前描述的一致。

这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)。

5.3 Softmax 预测输出单词

Decoder block 最后的部分是利用 Softmax 预测下一个单词,在之前的网络层我们可以得到一个最终的输出 Z Z Z,因为 Mask 的存在,使得单词 0 的输出 Z 0 Z_0 Z0 只包含单词 0 的信息,如下:

在这里插入图片描述
Decoder Softmax 之前的 Z Z Z

Softmax 根据输出矩阵的每一行预测下一个单词:

在这里插入图片描述
Decoder Softmax 预测】

这就是 Decoder block 的定义,与 Encoder 一样,Decoder 是由多个 Decoder block 组合而成。

六、Transformer 总结

  • TransformerRNN 不同,可以比较好地并行训练;
  • Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加位置 Embedding,否则 Transformer 就是一个词袋模型了;
  • Transformer 的重点是 Self-Attention 结构,其中用到的 Q Q Q, K K K, V V V 矩阵通过输出进行线性变换得到;
  • TransformerMulti-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【自然语言处理 的相关文章

随机推荐

  • centos ip 没有显示

    进入 cd etc sysconfig network scripts 编辑网卡设置 我的网卡默认是ifcfg ens33 有的网卡默认是ifcfg eth0 执行 vi ifcfg ens33 将onboot no 改为onboot ye
  • MPU6500驱动调试笔记(STM32F407+SPI)

    一 问题背景 本来最开始实验室使用MPU6050芯片 采集陀螺仪原始数据做生理信号采集 但算法发现用IIC接口采样率 200hz 达不到要求 故寻找同类型支持SPI协议的芯片去替代 发现了这块MPU6500 还便宜 就用起来 在读写寄存器费
  • ST 电机控制工作台帮助文档翻译 之 STM32F3x 的 OCP 和 OVP(使用嵌入式模拟的过压保护(仅限 STM32F3x))

    ST 电机控制工作台 使用嵌入式模拟的过压保护 仅限 STM32F3x 图5显示了可以使用 STM32F30x 的内部资源实现的过压保护网络的基本实现 图5 过压保护网络 原理类似于 过流保护
  • linux-目录相关作用

    文章来自狂神老师的笔记 同时会有自己的体会 狂神老师课程的链接 https www bilibili com video BV187411y7hF from search seid 10463862828616102628 注意 linux
  • 基于SpringBoot的实习管理系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SpringBoot 前端 Vue HTML 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse
  • 一位技术主管的十年编程经验总结 .

    一位技术主管的十年编程经验总结 有天和朋友聊天 朋友是国内一家大型互联网企业的一位技术主管 朋友把他将近十年研发工作积累的心血总结成两点 这两点朋友刚一提出来我并没有马上明白 只是大约有这么一个概念 我还没达到朋友在技术领域的那种高度 不能
  • PAT乙级1041 考试座位号 (15 分)

    1041 考试座位号 15 分 一 问题描述 每个 PAT 考生在参加考试时都会被分配两个座位号 一个是试机座位 一个是考试座位 正常情况下 考生在入场时先得到试机座位号码 入座进入试机状态后 系统会显示该考生的考试座位号码 考试时考生需要
  • 机器学习:Jupyter Notebook中numpy的使用

    一 Jupyter Notebook的魔法命令 模块 方法 或者help 模块 方法 查看模块 方法的解释文档 1 run 机械学习中主要应用两个魔法命令 run timeit 魔法命令格式 命令 run 将模块引用并在Jupyter No
  • Java设计模式——备忘录模式

    文章目录 备忘录模式 备忘录模式 主要目的是保存一个对象的某个状态 以便在适当的时候恢复对象 个人觉得叫备份模式更形象些 通俗的讲下 假设有原始类A A中有各种属性 A可以决定需要备份的属性 备忘录类B是用来存储A的一些内部状态 类C呢 就
  • PyQt5 pyqtSignal: 自定义信号传入的参数方法

    PyQt5 pyqtSignal 自定义信号传入的参数方法 在PyQt5当中 用户是可以自定义信号与槽函数的 这里想讲的是如何在pyqtSignal中传入任何的参数 一般来说 我们会在pyqtSignal 中传入不同的参数 以便完成不同类之
  • 我去公司面试,人事经理面试没有过,我却把责任链模式学会了

    设计模式在开发当中是运用特别多的 设计模式就是参照我们日常生活特性 抽象出特性 从而某种实现达到具体要求 当然这当中一定是灵活转变 责任链正式拉开序幕 我去某某互联网公司去面试 好的方向的流程大致应该是 你上招聘软件投递简历 简历筛选通过
  • 查看电脑是否开启虚拟化

    第一步 win R快捷键输入cmd 第二步 输入systeminfo命令 即可查看电脑配置信息
  • 5.1 数组

    C 为基本的数据类型 整数 浮点数 字符型和布尔型 提供了内置的支持 就像在上一章我们为复数类定义了重载的运算符那样 内置的支持也称为协助函数 helper function 支持这些数据类型完成各种允许的运算 也就是说基本数据类型也可以说
  • 【华为OD机试真题2023B卷 JAVA&JS】计算最接近的数

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 计算最接近的数 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个数组X和正整数K 请找出使表达式X i X i 1 X i K 1 结果最接近于数组中位数的下标
  • Modbus协议详解2:通信方式、地址规则、主从机通信状态

    首先我们要清楚 Modbus是一种串行链路上的主从协议 在通信线路上只能有一个主机存在 不会有多主机存在的情况 虽然主机只有一个 但是从机是可以有多个的 Modbus的通信过程都是由主机发起的 从机在接收到主机的请求后再进行响应 从机不会主
  • 30个 BeageBone 嵌入式项目

    特点 展示了如何使用 BeagleBone Black 编程和构建有趣且引人入胜的项目 学习如何将 BeagleBone Black 连接到您的计算机并对其进行编程 快速掌握 BoneScript 和其他编程工具 30 个 BeagleBo
  • 2023网站seo过时了吗?

    不完全是 虽然SEO过去的一些策略可能已经不再有效 但SEO本身并没有过时 实际上 随着搜索引擎算法的不断发展和用户对搜索结果质量的不断提高 合法 道德以及有效的SEO策略依然能够帮助网站获得搜索引擎排名并吸引大量有针对性的流量 尽管SEO
  • 接收I/O请求完成通知

    那片土在蓝天上 燃烧的翅膀 Windows via C C 学习笔记 设备I O之 接收I O请求完成通知 上一篇 讨论了如何发送I O请求 在异步的设备I O请求方式下 要考虑的问题就是当I O请求完成之后 驱动程序如何通知你的应用程序
  • Docker入门——简单记录

    Docker Docker是一个虚拟环境 某种意义上说它就是一个带有终端命令行的虚拟机 狭义上解释 Docker是一个容器 在这个容器里 Docker中的镜像不再是静态不可操作的 可以对安装的系统镜像进行软件下载 比如gcc g 之类 只不
  • 【自然语言处理

    Transformer由论文 Attention is All You Need 提出 论文地址为 https arxiv org pdf 1706 03762 pdf 文章目录 一 Transformer 整体结构 二 Transform