[TOC]

Transformer的基本知识

Transformer原理

Transformer的输入

  1. transformer中的单词的输入表示x由单词Embedding和位置Embedding相加得到. 2.1 单词embedding可以是word2vec等 2.2 位置embedding表示单词在句子中的位置.保存单词在句子中的相对或绝对位置.位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。

2.3 使 PE 能够适应比训练集里面所有句子更长的句子,假设训练集里面最长的句子是有 20 个单词,突然来了一个长度为 21 的句子,则使用公式计算的方法可以计算出第 21 位的 Embedding。Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)

![sO7Dfo](<https://raw.githubusercontent.com/errolyan/tuchuang/master/uPic/sO7Dfo.jpg>)

自注意力机制

![K42diP](<https://raw.githubusercontent.com/errolyan/tuchuang/master/uPic/K42diP.jpg>)
  1. 左侧为 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,用于对每一层的激活值进行归一化。
  2. 对于输入的每一个向量,首先需要生成3个新的向量Q、K和V,分别代表查询(Query)向量、Key向量和Value向量。Q表示为了编码当前的词,需要去注意其他的词.Key向量是这个词的关键的用于被检索的信息,而Value向量是真正的内容。

实例

输入层

输入层包括Word Embedding和Positional Encoding。Word Embedding可以认为是预训练的词向量,Positional Encoding用于捕获词语的相对位置信息。

9glw7d

层内标准化

层标准化将数据标准化为均值为0,标准差为1.

zKqBV8

缩放点积

缩放点积(Scaled dot-product Attention)是Self-Attention的基础,因此这里先实现它。该模块输入是K,Q,V三个张量,输出Context上下文张量和Attention张量

1Z1ase

Multi-head Attention

论文中使用了8个head,也就是把上述的K,Q,V三个张量按照维度分为8份,每份都经过仿射变换后送入到缩放点积中。 主要流程为:将K,Q,V进行仿射变换,得到对应的query,key和value;然后将它们根据head数目进行维度划分,送入到对应的缩放点积模块进行训练,得到Context张量和Attention张量;多个head的Context张量拼接后经过线性变换就得到了全局的Context张量;最后为了使模型能够更深,收敛更快,对输出加上了dropout,残差连接和层标准化。

mGWNvY