1.NLP深度学习主要类别:

序列到类别的任务(seq2vec):输入的是时序数据,输出的是类别,如文本分类、情感分析任务。

同步的序列到序列任务:输入的是时序数据,输出的是等长的序列数据,如序列标注任务。

异步的序列到序列任务:输入的是时序数据,输出的不是等长的序列数据,如机器翻译、问答系统等。

2.自注意模型(self-attention):

2.1 自注意力模型(Self-Attention Model)的设计思想来源于解决循环神经网络在解决长序列数据时遇到的问题:

  1. 如何计算更全局的信息依赖,而不局限于距离的远近。
  2. 如何使得计算可以并行化。

其中qi和ki用来计算序列中其本次输入对自己本次的影响力,vi是本输入的向量表示,输入xj对输入xi的影响力使用 qj⋅ki 表示。影响力越大,说明处理输入xi的时候需要重点考虑输入xj的信息。

使用自注意力的强化学习 自注意力机制和transfor_自然语言处理

模型在处理输入xi时,先计算其它输入对xi的影响(qj⋅ki),用αij表示;然后将αij经过Softmax后得到的值α^ij与值向量vi相乘,就得到xi经过整个序列信息影响后的向量表示zi,即输出向量zi。

使用自注意力的强化学习 自注意力机制和transfor_自然语言处理_02

2.2 自注意力机制计算问题:

输入一个Xi[x1,x2x3,...xn]的序列。

使用自注意力的强化学习 自注意力机制和transfor_transformer_03

对于x1:        

q1和k1、q1和k2分别计算对应权重α1和α2,表示x1和x2输入各自所占的比重;在经过softmax()变换;得到新的权重:α^1和α^2。

新的权重α^1和α^2分别乘以v1和v2然后相加得到z1。同理对于x2的计算也同样如此。

使用自注意力的强化学习 自注意力机制和transfor_transformer_04

3.基于Transformer模型的Seq2seq模型:

3.1 序列到序列模型(Sequence-to-Sequence,Seq2Seq)的输入是一个序列,输出也是一个序列,这种模型在语音和语言领域的任务中非常常见。如机器翻译、问答系统、语音识别等。

3.2 编码器和解码器:

Seq2Seq模型往往采用编码器-解码器(Encoder-Decoder)的结构设计,主要应用于异步的序列到序列的深度学习任务。其中编码器负责理解和抽象输入序列的信息,然后传递给解码器生成输出序列。解码器生成输出序列时需要两部分信息输入:一是编码器传递过来的抽象了全局输入的信息;二是解码器在上一个阶段的输出信息

使用自注意力的强化学习 自注意力机制和transfor_使用自注意力的强化学习_05

3.3 下图是基于编码器-解码器结构实现的机器翻译任务示意,模型的输入是“Deep learning”,编码器会先将这个输入计算成向量表示,解码器则会逐字逐句的生成输出:深度学习。在这个过程中,当解码器生成“度”时,它的输入既包含编码器传递过来的向量表示,又包含解码器上一阶段生成的输出“深”,依此类推。其中<BOS>是一个特殊的向量,表示编码器启动工作。

使用自注意力的强化学习 自注意力机制和transfor_编码器_06

3.4 编码器和解码器都使用了上文介绍的自注意力模型,但解码器在设计上有两个特殊的点:

(1)解码器:解码器有两部分输入(需要接受编码器的输入信息和输入到本解码器的输入信息。)

解码器使用Masked Self-Attention。Masked Self-Attention与Self-Attention的主要区别在于:Masked Self-Attention只根据当前位置和之前的输入片段来计算影响力,而不是使用每个qi和所有输入片段的ki来计算影响力。也就是说,我们只能根据历史信息预测现在,而不能根据未来信息预测现在。如图所示,第二个输入只会根据第一个输入的情况计算影响力,而不会去计算与第三和第四个输入的影响力。在生成模型的场景,我们还不知道后面会生成哪些内容,只知道之前生成了哪些内容。Self_Attention是需要计算全局的输入ki的情况

使用自注意力的强化学习 自注意力机制和transfor_编码器_07

(2)编码器:

将编码器的全局信息传递到解码器中去,一个常用的设计是使用Cross Attention结构如图所示,将解码器本时刻的输入向量作为qi(解码器输入qi),按照自注意力的计算方法,qi分别与编码器中的ki和vi进行计算,从而实现将编码器生成的全局信息引入到解码器中。

使用自注意力的强化学习 自注意力机制和transfor_transformer_08

4.Transformer模型:

4.1 Transformer结构:

使用自注意力的强化学习 自注意力机制和transfor_使用自注意力的强化学习_09

Transformer模型包括编码器和解码器两部分,都是层次堆叠式的结构,不妨称之为Transformer Encoder Layer和Transformer Decoder Layer,(Transformer编码器使用的多头自注意力机制Self_Attention,解码器使用的是Masked Self-Attention)。所示,假设编码器和解码器都为6层,将Transformer的核心部分进行展开,Transformer编码器的输出向量会分别输入至每层的Transformer Decoder Layer中,与多头自注意力模块进行信息融合。

使用自注意力的强化学习 自注意力机制和transfor_深度学习_10

4.2 Transformer编码器:

transformer是编码器和解码器的结构。

嵌入层:是对输入的文本特征进行编码。

编码层:是自注意力机制生成的特征编码向量。

每个编码层包含四个模块:多头注意力层(Multi-Head Attention)、加与规范层(Add&Norm)、前馈层(Feed Forward)和加与规范层(Add&Norm)。

使用自注意力的强化学习 自注意力机制和transfor_深度学习_11

4.3 多头自注意力层:

多头自注意力(Multi-Head Self-Attention,MHSA)的本质是多组自注意力计算的组合,每组注意力计算被称为一个"头",不同组注意力的计算是相互独立的。(Transformer一般是8头)

下图是多头自注意力计算示意图,是一个H头自注意力的计算。首先输入序列X∈RL×D被映射到了不同的Q、K、V向量空间,然后根据头数H将Q、K、V向量沿着最后一维等分为H份,然后在每一份Q、K、V子空间中分别执行自注意力计算得到[head1,…,headH],最后将输出结果进行拼接,作为最终的输出向量Z。

使用自注意力的强化学习 自注意力机制和transfor_深度学习_12

4.4 多头自注意力层计算:(类似于自注意力机制的计算过程)

使用自注意力的强化学习 自注意力机制和transfor_transformer_13

4.5 加与规范层:

每个的Transformer Encoder Layer包含2个加与规范层(Add&Norm),其作用是通过加入残差连接和层规范化两个组件,使得网络训练更加稳定,收敛性更好。

这里以第1个加与规范层为例,假设多头自注意力的输入和输出分别为X∈RL×D和Z∈RL×D,那么加与规范层可以表示为

L=LayerNorm(X+Z)

其中L∈RL×D,LayerNorm表示层规范化。接下来,向量L将经过前馈层和第2个加与规范层的计算,获得本层Transformer Encoder的输出向量O∈RL×D。