Transformer系列-详细介绍

Transformer详解

论文简介

2017年Google在NIPS 发表了Attention is all you Need,开创了一个新的阶段,也彻底将NLP任务以前的CNN、RNN甩出了很大的距离,文章提出采用Attention机制进行翻译任务,取得了SOTA。
论文链接链接: Attention is all you Need

工作流程

整体结构

Transformer由Encoder和Decoder两部分组成,Encoder和Decoder都包含6个block。

  1. 获取输入句子的每一个单词的向量表示X,X由单词的Embedding(原始数据提取的Feature)和单词位置的Embedding相加得到
  2. 将得到的单词表示向量矩阵传入Encoder中,得到句子所有单词的编码矩阵C。单词向量矩阵用Xn*d表示,n是剧中单词个数d是向量维度。
  3. 将Encoder输出的编码信息矩阵C传递到Decoder中,Decoder依次根据当前翻译过的单词1~i翻译下一个单词i+1,在使用过程中,翻译到单词i+1的时候需要通过Mask(掩盖)操作掩盖住i+1之后的单词

Transformer的输入

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

  1. 单词的 Embedding 可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。

  2. 位置Embedding(PE): 因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于 NLP 来说非常重要。所以 Transformer 中使用位置 Embedding 保存单词在序列中的相对或绝对位置。PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以sin,cos公式计算得到,transformer采用sin,cos公式计算PE,公式计算的优点是:使 PE 能够适应比训练集里面所有句子更长的句子、可以让模型容易地计算出相对位置。

Self-Attention

attention

计算的时候需要用到矩阵Q(查询),K(键值),V(值)Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的

  1. Self-Attention的输入:单词的表示向量x组成的矩阵X,或者上一个 Encoder block 的输出
  2. QKV的计算:Q = X * WQ,K = X * WK,V = X * WV
  3. self-Attention的输出img

dk是QK矩阵的列数,即向量维度。公式中计算矩阵Q和K每一行向量的内积,为了防止内积过大,因此除以dk的平方根。Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1

  1. Multi-Head Attention 是由多个 Self-Attention 组合形成的,Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个Linear层,得到 Multi-Head Attention 最终的输出Z

Encoder结构

  1. Encoder由 Multi-Head Attention, Add & Norm, Feed Forward, Add & Norm 组成的

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

  3. Norm指 Layer Normalization(层归一化),通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛

  4. Feed Forward (前馈)层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数

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

Decoder结构

  1. 与Encoder的不同点:包含两个 Multi-Head Attention 层、第一个 Multi-Head Attention 层采用了 Masked 操作、第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算、最后有一个 Softmax 层计算下一个翻译单词的概率、。
  2. Decoder block 的第一个 Multi-Head Attention 采用了 Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息
  3. Decoder block 第二个 Multi-Head Attention 变化不大, 主要的区别在于其中 Self-Attention 的 K, V矩阵不是使用 上一个 Decoder block 的输出计算的,而是使用 Encoder 的编码信息矩阵 C 计算的,而Q使用上一个 Decoder block 的输出计算。这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)
  4. Decoder block 最后的部分是利用 Softmax 预测下一个单词,Softmax 根据输出矩阵的每一行预测下一个单词

总结

  • Transformer 与 RNN 不同,可以比较好地并行训练
  • Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加位置 Embedding,否则 Transformer 就是一个词袋模型了。
  • Transformer 的重点是 Self-Attention 结构,其中用到的 Q, K, V矩阵通过输出进行线性变换得到
  • Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score。

参考:https://zhuanlan.zhihu.com/p/338817680
总结作笔记加强记忆

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值