【NLP】--- Transformer流程及原理


Transformer 在《Attention is All You Need》 提出的新模型. 改善了RNN训练慢的缺点, 能有效提升模型精确率.

一. Transformer组成

Transformer是由一系列的 encoder 和 decoder 所组成, 当然decoder的数量是和decoder相等的, 在论文中都是6.

1.1. 输入单词预处理

  1. 通过embedding方法将句子中的一系列单词转换为一系列词向量
  2. 对上一步骤得到的一系列词向量进行Positional Embedding处理, 引入位置信息,得到输入 Encoder 的词向量

1.2. Encoder

由两个主要功能层组成:

为了使网络具有一定的深度(DNN), 故引入 Residuals 模块——即分别在两个主要功能层后加入一个 Add & Normalize 层, 示意图如下:

作为 Encoder 的输出, 是两个向量:

此小部分详见 Multi-Headed-Attention 模块

  • Key Vector
  • Value Vector

1.3. Decoder

由三个主要功能层组成:

与Encoder中 Self-Attention 不同的是, Decoder中的 Self-Attention只关注当前t时刻时(从0开始计时), 已经生成得到的前t个单词, 即指被允许处理输出序列中更靠前的那些位置. 在进行softmax步骤前, 其会把之后的位置设为-inf来表示隐藏.

同样, 为了增加网络的深度, 也引入 Residuals, 即同样增加 Add & Normalize 层, 示意图如下:

1.4. 总体流程

二. Transformer 部分机制详解

2.1. Positional Embedding

该方法能够扩展到看不见的序列长度处!!!

2.1.1. Positional Embedding原理

为了使模型能够理解输入语句中单词的顺序, 故提出Positional Embedding, 为每个单词生成一个对应的位置向量, 然后将得到的词嵌入向量加上对应的位置向量, 得到基于时间步的词嵌入向量.

2.1.2. 位置向量生成原理

PE(pos,2i)=sin(pos100002idmodel)PE(pos,2i+1)=cos(pos100002idmodel)PE_{(pos, 2i)}=\sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}}) \\ PE_{(pos, 2i+1)}=\cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})

2.1.3. 效果图

可以看到在中心位置分成了两半,因为左半部分的值由一个正弦函数生成,右半部分由余弦函数生成,然后将它们连接起来形成了每个位置的编码向量

2.2. Multi-Headed-Attention

参见我的blog

2.3. Encoder-Decoder Attention

工作原理类似Multi-Headed Attention机制, 但是只会从之前层生成 Query Vector, 而Key Vector和Value Vector都是从Encoder的输出中获取.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章