【学习笔记】Transformer详解

参考链接:【手撕Transformer】Transformer输入输出细节以及代码实现(pytorch)Transformer模型详解(图解最完整版)

模型结构

1、结构图如下。

在这里插入图片描述
上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。

2、名词解释

Input Embedding: 可以理解为将输入的数据转化为特定的向量。本文中是将输入数据转化为512纬的向量。
Positional Encoding: 因为Attention机制关注全局信息,所以需要用一个位置向量来记住单词的位置。这个位置向量可以通过公式或者算法获得,文中采用的是公式。
在这里插入图片描述
Self-Attention: 顾名思义就是自己和自己计算的注意力机制。输入的数据通过这个模块可以得到三个不同的矩阵Q,K,V。然后对这三个矩阵进行运算输出一个包含输入单词信息的矩阵Z。

Multi-Head Attention: 多头自注意力就是多个自注意力机制,文章中是8个自注意力。
Add & Norm: Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。
①Add指X+MultiHeadAttention(X),是一种残差连接,即每一个前馈神经网络的输入不光包含上述self-attention的输出Z,还包含最原始的输入。通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分,在 ResNet 中经常用到。

在这里插入图片描述
Norm指 Layer Normalization,通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。
Feed Forward: Feed Forward 层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数,对应的公式如下。
在这里插入图片描述
X是输入,Feed Forward 最终得到的输出矩阵的维度与 X 一致。
Masked Multi-Head Attention: 即多个自注意力,论文中采用的是8个。
多头注意力机制:
他扩展了模型关注不同位置的能力,这对翻译一下句子特别有用,因为我们想知道“it”是指代的哪个单词。
第二个方面,他给了自注意力层多个“表示子空间”。对于多头自注意力机制,我们不止有一组Q/K/V权重矩阵,而是有多组(论文中使用8组),所以每个编码器/解码器使用8个“头”(可以理解为8个互不干扰自的注意力机制运算),每一组的Q/K/V都不相同。然后,得到8个不同的权重矩阵Z,每个权重矩阵被用来将输入向量投射到不同的表示子空间。
Linear layer:
- 目的:将由解码器堆栈产生的向量投影到一个更大的向量中,称为对数向量。这个向量对应着模型的输出词汇表;向量中的每个值,对应着词汇表中每个单词的得分;
softmax层:
- 操作:这些分数转换为概率(所有正数,都加起来为1.0)。选择具有最高概率的单元,并且将与其相关联的单词作为该时间步的输出

Attention 机制 是对 source 中各个元素 的 value 进行加权求和,而 query 和 key 用于计算 对应 value 的权值系数

  • attention 的核心 就是从 大量信息中 筛选出少量的 重要信息;
    • 具体操作:每个 value 的 权值系数,代表 其 重要度;
      缺点:忽略了 源端或目标端 词与词间 的依赖关系

self-attention的结构在计算每个token时,总是会考虑整个序列其他token的表达;学习句子内部的词依赖关系,捕获句子的内部结构。

  • 优点

    • 捕获源端和目标端词与词间的依赖关系

    • 捕获源端或目标端自身词与词间的依赖关系

  • self-attention 是如何解决长距离依赖问题的呢?

    • 解决方式:

      • 利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列

工作流程

数据从输入到encoder到decoder输出这个过程中的流程(以机器翻译为例子):

1、获取Transformer的输入

对于机器翻译来说,一个样本是由原始句子和翻译后的句子组成的。比如原始句子是: “我爱机器学习”,那么翻译后是 ’i love machine learning‘。 则该一个样本就是由“我爱机器学习”和 “i love machine learning” 组成。

这个样本的原始句子的单词长度是length=4,即‘我’ ‘爱’ ‘机器’ ‘学习’。经过embedding后每个词的embedding向量是512。那么“我爱机器学习”这个句子的embedding后的维度是[4,512 ] (若是批量输入,则embedding后的维度是[batch, 4, 512])。

Transformer的输入是句子中每一个单词的表示向量X,X由单词的 Embedding 和单词位置的 Embedding 相加得到。
在这里插入图片描述

单词Embedding

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

位置Embedding

因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,所以 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。
  • 可以让模型容易地计算出相对位置,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值